FirCallResolver: perform completion for var access with ILT receiver
#KT-38473 Fixed
This commit is contained in:
@@ -77,6 +77,7 @@ class FirCallResolver(
|
|||||||
name,
|
name,
|
||||||
result.candidates,
|
result.candidates,
|
||||||
result.applicability,
|
result.applicability,
|
||||||
|
functionCall.explicitReceiver,
|
||||||
)
|
)
|
||||||
|
|
||||||
val resultExpression = functionCall.transformCalleeReference(StoreNameReference, nameReference)
|
val resultExpression = functionCall.transformCalleeReference(StoreNameReference, nameReference)
|
||||||
@@ -168,6 +169,7 @@ class FirCallResolver(
|
|||||||
callee.name,
|
callee.name,
|
||||||
reducedCandidates,
|
reducedCandidates,
|
||||||
result.applicability,
|
result.applicability,
|
||||||
|
qualifiedAccess.explicitReceiver,
|
||||||
)
|
)
|
||||||
|
|
||||||
if (qualifiedAccess.explicitReceiver == null) {
|
if (qualifiedAccess.explicitReceiver == null) {
|
||||||
@@ -353,6 +355,7 @@ class FirCallResolver(
|
|||||||
name: Name,
|
name: Name,
|
||||||
candidates: Collection<Candidate>,
|
candidates: Collection<Candidate>,
|
||||||
applicability: CandidateApplicability,
|
applicability: CandidateApplicability,
|
||||||
|
explicitReceiver: FirExpression? = null,
|
||||||
): FirNamedReference {
|
): FirNamedReference {
|
||||||
val source = reference.source
|
val source = reference.source
|
||||||
return when {
|
return when {
|
||||||
@@ -377,24 +380,26 @@ class FirCallResolver(
|
|||||||
candidates.size == 1 -> {
|
candidates.size == 1 -> {
|
||||||
val candidate = candidates.single()
|
val candidate = candidates.single()
|
||||||
val coneSymbol = candidate.symbol
|
val coneSymbol = candidate.symbol
|
||||||
when {
|
if (coneSymbol is FirBackingFieldSymbol) {
|
||||||
coneSymbol is FirBackingFieldSymbol -> buildBackingFieldReference {
|
return buildBackingFieldReference {
|
||||||
this.source = source
|
this.source = source
|
||||||
resolvedSymbol = coneSymbol
|
resolvedSymbol = coneSymbol
|
||||||
}
|
}
|
||||||
|
|
||||||
coneSymbol is FirVariableSymbol && (
|
|
||||||
coneSymbol !is FirPropertySymbol ||
|
|
||||||
(coneSymbol.phasedFir() as FirMemberDeclaration).typeParameters.isEmpty()
|
|
||||||
)
|
|
||||||
-> buildResolvedNamedReference {
|
|
||||||
this.source = source
|
|
||||||
this.name = name
|
|
||||||
resolvedSymbol = coneSymbol
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> FirNamedReferenceWithCandidate(source, name, candidate)
|
|
||||||
}
|
}
|
||||||
|
if (explicitReceiver?.typeRef?.coneTypeSafe<ConeIntegerLiteralType>() == null) {
|
||||||
|
if (coneSymbol is FirVariableSymbol) {
|
||||||
|
if (coneSymbol !is FirPropertySymbol ||
|
||||||
|
(coneSymbol.phasedFir() as FirMemberDeclaration).typeParameters.isEmpty()
|
||||||
|
) {
|
||||||
|
return buildResolvedNamedReference {
|
||||||
|
this.source = source
|
||||||
|
this.name = name
|
||||||
|
resolvedSymbol = coneSymbol
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FirNamedReferenceWithCandidate(source, name, candidate)
|
||||||
}
|
}
|
||||||
else -> buildErrorNamedReference {
|
else -> buildErrorNamedReference {
|
||||||
this.source = source
|
this.source = source
|
||||||
|
|||||||
Reference in New Issue
Block a user