FIR: Improve error reporting for EXPRESSION_EXPECTED_PACKAGE_FOUND

This commit is contained in:
Denis.Zharkov
2021-09-08 11:45:08 +03:00
committed by teamcityserver
parent 8f6ec42304
commit ef684c0dff
4 changed files with 13 additions and 5 deletions
@@ -12,7 +12,7 @@ FILE: innerQualifier.kt
}
}
public final val x: R|kotlin/Unit| = R|kotlin/Unit|
public final val x: R|kotlin/Unit| = Q|Outer.Inner|
public get(): R|kotlin/Unit|
public final val klass: R|kotlin/reflect/KClass<Outer.Inner>| = <getClass>(Q|Outer.Inner|)
public get(): R|kotlin/reflect/KClass<Outer.Inner>|
@@ -232,7 +232,13 @@ class FirCallResolver(
val qualifiedAccess = qualifiedAccess.transformExplicitReceiver<FirQualifiedAccess>()
val nonFatalDiagnosticFromExpression = (qualifiedAccess as? FirPropertyAccessExpression)?.nonFatalDiagnostics
if (isUsedAsReceiver) {
val basicResult by lazy(LazyThreadSafetyMode.NONE) {
collectCandidates(qualifiedAccess, callee.name)
}
// Even if it's not receiver, it makes sense to continue qualifier if resolution is unsuccessful
// just to try to resolve to package/class and then report meaningful error at FirStandaloneQualifierChecker
if (isUsedAsReceiver || !basicResult.applicability.isSuccess) {
(qualifiedAccess.explicitReceiver as? FirResolvedQualifier)
?.continueQualifier(
callee,
@@ -244,7 +250,7 @@ class FirCallResolver(
?.let { return it }
}
var result = collectCandidates(qualifiedAccess, callee.name)
var result = basicResult
if (qualifiedAccess.explicitReceiver == null) {
// Even if we successfully resolved to some companion/named object, we should re-try with qualifier resolution
@@ -1,3 +1,4 @@
// COMPARE_WITH_LIGHT_TREE
package foo
class X {}
@@ -6,7 +7,7 @@ val s = <!EXPRESSION_EXPECTED_PACKAGE_FOUND!>java<!>
val ss = <!NO_COMPANION_OBJECT!>System<!>
val sss = <!NO_COMPANION_OBJECT!>X<!>
val x = "${<!NO_COMPANION_OBJECT!>System<!>}"
val xs = java.<!UNRESOLVED_REFERENCE!>lang<!>
val xs = java.<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>lang<!>
val xss = java.lang.<!NO_COMPANION_OBJECT!>System<!>
val xsss = foo.<!NO_COMPANION_OBJECT!>X<!>
val xssss = <!EXPRESSION_EXPECTED_PACKAGE_FOUND!>foo<!>
@@ -16,7 +17,7 @@ fun main() {
<!EXPRESSION_EXPECTED_PACKAGE_FOUND!>java<!> = null
<!NO_COMPANION_OBJECT!>System<!> = null
<!NO_COMPANION_OBJECT!>System<!>!!
java.lang.<!NO_COMPANION_OBJECT!>System<!> = null
<!NO_COMPANION_OBJECT{LT}!>java.lang.<!NO_COMPANION_OBJECT{PSI}!>System<!><!> = null
java.lang.<!NO_COMPANION_OBJECT!>System<!>!!
<!NO_COMPANION_OBJECT!>System<!> is Int
<!INVISIBLE_REFERENCE!>System<!>()
@@ -1,3 +1,4 @@
// COMPARE_WITH_LIGHT_TREE
package foo
class X {}