Change FirQualifiedAccess source to KtQualifiedExpression (if any)
This commit is contained in:
+9
-4
@@ -18,15 +18,20 @@ import org.jetbrains.kotlin.fir.expressions.isExhaustive
|
||||
object FirExhaustiveWhenChecker : FirWhenExpressionChecker() {
|
||||
override fun check(expression: FirWhenExpression, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (expression.usedAsExpression && !expression.isExhaustive) {
|
||||
if (expression.source?.isIfExpression == true) {
|
||||
reporter.reportOn(expression.source, FirErrors.INVALID_IF_AS_EXPRESSION, context)
|
||||
} else {
|
||||
val source = expression.source ?: return
|
||||
if (source.isIfExpression) {
|
||||
reporter.reportOn(source, FirErrors.INVALID_IF_AS_EXPRESSION, context)
|
||||
return
|
||||
} else if (source.isWhenExpression) {
|
||||
val missingCases = (expression.exhaustivenessStatus as ExhaustivenessStatus.NotExhaustive).reasons
|
||||
reporter.reportOn(expression.source, FirErrors.NO_ELSE_IN_WHEN, missingCases, context)
|
||||
reporter.reportOn(source, FirErrors.NO_ELSE_IN_WHEN, missingCases, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val FirSourceElement.isIfExpression: Boolean
|
||||
get() = elementType == KtNodeTypes.IF
|
||||
|
||||
private val FirSourceElement.isWhenExpression: Boolean
|
||||
get() = elementType == KtNodeTypes.WHEN
|
||||
}
|
||||
|
||||
+1
@@ -499,6 +499,7 @@ class ExpressionsConverter(
|
||||
|
||||
it.replaceExplicitReceiver(firReceiver)
|
||||
}
|
||||
firSelector.replaceSource(dotQualifiedExpression.toFirSourceElement())
|
||||
return firSelector
|
||||
}
|
||||
|
||||
|
||||
@@ -1985,6 +1985,7 @@ class RawFirBuilder(
|
||||
|
||||
firSelector.replaceExplicitReceiver(receiver)
|
||||
}
|
||||
firSelector.replaceSource(expression.toFirSourceElement())
|
||||
return firSelector
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// NI_EXPECTED_FILE
|
||||
|
||||
interface T {
|
||||
val a = <!UNRESOLVED_REFERENCE!>Foo<!>.<!PROPERTY_INITIALIZER_IN_INTERFACE!><!UNRESOLVED_REFERENCE!>bar<!>()<!>
|
||||
val a = <!PROPERTY_INITIALIZER_IN_INTERFACE!><!UNRESOLVED_REFERENCE!>Foo<!>.<!UNRESOLVED_REFERENCE!>bar<!>()<!>
|
||||
}
|
||||
@@ -72,7 +72,7 @@ fun main1() {
|
||||
|
||||
1."sdf"
|
||||
1.{}
|
||||
1.<!INVALID_IF_AS_EXPRESSION!>if<!> (true) {}
|
||||
1.if (true) {}
|
||||
}
|
||||
|
||||
fun test() {
|
||||
|
||||
+1
-1
@@ -26,6 +26,6 @@ class C {
|
||||
|
||||
val C.foo : C.D = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!><!UNRESOLVED_REFERENCE!>D<!>()<!>
|
||||
|
||||
val C.bar : C.D = C().<!EXTENSION_PROPERTY_WITH_BACKING_FIELD!>D()<!>
|
||||
val C.bar : C.D = <!EXTENSION_PROPERTY_WITH_BACKING_FIELD!>C().D()<!>
|
||||
|
||||
val C.foo1 : C.D get() = D()
|
||||
|
||||
Reference in New Issue
Block a user