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() {
|
object FirExhaustiveWhenChecker : FirWhenExpressionChecker() {
|
||||||
override fun check(expression: FirWhenExpression, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(expression: FirWhenExpression, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (expression.usedAsExpression && !expression.isExhaustive) {
|
if (expression.usedAsExpression && !expression.isExhaustive) {
|
||||||
if (expression.source?.isIfExpression == true) {
|
val source = expression.source ?: return
|
||||||
reporter.reportOn(expression.source, FirErrors.INVALID_IF_AS_EXPRESSION, context)
|
if (source.isIfExpression) {
|
||||||
} else {
|
reporter.reportOn(source, FirErrors.INVALID_IF_AS_EXPRESSION, context)
|
||||||
|
return
|
||||||
|
} else if (source.isWhenExpression) {
|
||||||
val missingCases = (expression.exhaustivenessStatus as ExhaustivenessStatus.NotExhaustive).reasons
|
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
|
private val FirSourceElement.isIfExpression: Boolean
|
||||||
get() = elementType == KtNodeTypes.IF
|
get() = elementType == KtNodeTypes.IF
|
||||||
|
|
||||||
|
private val FirSourceElement.isWhenExpression: Boolean
|
||||||
|
get() = elementType == KtNodeTypes.WHEN
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -499,6 +499,7 @@ class ExpressionsConverter(
|
|||||||
|
|
||||||
it.replaceExplicitReceiver(firReceiver)
|
it.replaceExplicitReceiver(firReceiver)
|
||||||
}
|
}
|
||||||
|
firSelector.replaceSource(dotQualifiedExpression.toFirSourceElement())
|
||||||
return firSelector
|
return firSelector
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1985,6 +1985,7 @@ class RawFirBuilder(
|
|||||||
|
|
||||||
firSelector.replaceExplicitReceiver(receiver)
|
firSelector.replaceExplicitReceiver(receiver)
|
||||||
}
|
}
|
||||||
|
firSelector.replaceSource(expression.toFirSourceElement())
|
||||||
return firSelector
|
return firSelector
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// NI_EXPECTED_FILE
|
// NI_EXPECTED_FILE
|
||||||
|
|
||||||
interface T {
|
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."sdf"
|
||||||
1.{}
|
1.{}
|
||||||
1.<!INVALID_IF_AS_EXPRESSION!>if<!> (true) {}
|
1.if (true) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun test() {
|
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.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()
|
val C.foo1 : C.D get() = D()
|
||||||
|
|||||||
Reference in New Issue
Block a user