FIR: Improve error reporting for EXPRESSION_EXPECTED_PACKAGE_FOUND
This commit is contained in:
committed by
teamcityserver
parent
8f6ec42304
commit
ef684c0dff
+1
-1
@@ -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 {}
|
||||
|
||||
Reference in New Issue
Block a user