[FIR] Fix qualifier handling by FirQualifierNameResolver
This commit is contained in:
@@ -150,7 +150,9 @@ class FirCallResolver(
|
||||
|
||||
@Suppress("NAME_SHADOWING")
|
||||
val qualifiedAccess = qualifiedAccess.transformExplicitReceiver(transformer, ResolutionMode.ContextIndependent)
|
||||
qualifiedResolver.replacedQualifier(qualifiedAccess)?.let { return it }
|
||||
qualifiedResolver.replacedQualifier(qualifiedAccess)?.let { resolvedQualifierPart ->
|
||||
return resolvedQualifierPart
|
||||
}
|
||||
|
||||
val info = CallInfo(
|
||||
CallKind.VariableAccess,
|
||||
@@ -182,10 +184,17 @@ class FirCallResolver(
|
||||
result.currentApplicability
|
||||
)
|
||||
|
||||
if (qualifiedAccess.explicitReceiver == null &&
|
||||
(reducedCandidates.size <= 1 && result.currentApplicability < CandidateApplicability.SYNTHETIC_RESOLVED)
|
||||
) {
|
||||
qualifiedResolver.tryResolveAsQualifier(qualifiedAccess.source)?.let { return it }
|
||||
if (qualifiedAccess.explicitReceiver == null) {
|
||||
if (result.currentApplicability < CandidateApplicability.SYNTHETIC_RESOLVED
|
||||
) {
|
||||
// We should run QualifierResolver if no successful candidates are available
|
||||
// Otherwise expression (even ambiguous) beat qualifier
|
||||
qualifiedResolver.tryResolveAsQualifier(qualifiedAccess.source)?.let { resolvedQualifier ->
|
||||
return resolvedQualifier
|
||||
}
|
||||
} else {
|
||||
qualifiedResolver.reset()
|
||||
}
|
||||
}
|
||||
|
||||
val referencedSymbol = when (nameReference) {
|
||||
@@ -194,10 +203,6 @@ class FirCallResolver(
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (qualifiedAccess.explicitReceiver == null) {
|
||||
qualifiedResolver.reset()
|
||||
}
|
||||
|
||||
when {
|
||||
referencedSymbol is FirClassLikeSymbol<*> -> {
|
||||
val classId = referencedSymbol.classId
|
||||
|
||||
@@ -25,6 +25,7 @@ class FirQualifiedNameResolver(components: BodyResolveComponents) : BodyResolveC
|
||||
|
||||
fun reset() {
|
||||
qualifierStack.clear()
|
||||
qualifierPartsToDrop = 0
|
||||
}
|
||||
|
||||
fun initProcessingQualifiedAccess(qualifiedAccess: FirQualifiedAccess, callee: FirSimpleNamedReference) {
|
||||
@@ -44,6 +45,9 @@ class FirQualifiedNameResolver(components: BodyResolveComponents) : BodyResolveC
|
||||
}
|
||||
|
||||
fun tryResolveAsQualifier(source: FirSourceElement?): FirResolvedQualifier? {
|
||||
if (qualifierStack.isEmpty()) {
|
||||
return null
|
||||
}
|
||||
val symbolProvider = session.firSymbolProvider
|
||||
var qualifierParts = qualifierStack.asReversed().map { it.asString() }
|
||||
var resolved: PackageOrClass?
|
||||
|
||||
Reference in New Issue
Block a user