[FIR] Get rid of candidateSymbol in FirNamedReference

`candidateSymbol` has any reasonable meaning only for references with
  not completed candidate, so this property is moved from FirNamedReference
  to new node FirNamedReferenceWithCandidateSymbol, which has real
  implementation only in :resolve module (`FirNamedReferenceWithCandidate`)
This commit is contained in:
Dmitriy Novozhilov
2022-12-15 11:11:03 +02:00
committed by Space Team
parent 366edcfe3c
commit 4bddb27ca3
40 changed files with 113 additions and 107 deletions
@@ -24,8 +24,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.diagnostics.toFirDiagnostics
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutorByMap
import org.jetbrains.kotlin.fir.resolve.substitution.substitutorByMap
@@ -89,11 +88,7 @@ internal interface KtFirAnalysisSessionComponent {
}
fun FirQualifiedAccess.createConeSubstitutorFromTypeArguments(): ConeSubstitutor? {
val symbol = when (val calleeReference = calleeReference) {
is FirResolvedNamedReference -> calleeReference.resolvedSymbol as? FirCallableSymbol<*>
is FirErrorNamedReference -> calleeReference.candidateSymbol as? FirCallableSymbol<*>
else -> null
} ?: return null
val symbol = calleeReference.toResolvedCallableSymbol() ?: return null
return createConeSubstitutorFromTypeArguments(symbol)
}
@@ -336,8 +336,7 @@ internal class KtFirCallResolver(
resolveFragmentOfCall: Boolean
): KtCall? {
val targetSymbol = candidate?.symbol
?: (fir.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol
?: (fir.calleeReference as? FirNamedReference)?.candidateSymbol
?: fir.calleeReference.toResolvedBaseSymbol()
?: return null
if (targetSymbol !is FirCallableSymbol<*>) return null
if (targetSymbol is FirErrorFunctionSymbol || targetSymbol is FirErrorPropertySymbol) return null
@@ -267,7 +267,6 @@ private val FirPropertyAccessExpression.propertyReferenceName: Name?
private val FirQualifiedAccessExpression.referencedCallableSymbol: FirCallableSymbol<*>?
get() {
return toResolvedCallableSymbol()
?: (calleeReference as? FirNamedReference)?.candidateSymbol as? FirCallableSymbol<*>
}
/**
@@ -544,14 +544,7 @@ private class ElementsToShortenCollector(
private fun findUnambiguousReferencedCallableId(namedReference: FirNamedReference): FirCallableSymbol<*>? {
val unambiguousSymbol = when (namedReference) {
is FirResolvedNamedReference -> namedReference.resolvedSymbol
is FirErrorNamedReference -> {
val candidateSymbol = namedReference.candidateSymbol
if (candidateSymbol !is FirErrorFunctionSymbol) {
candidateSymbol
} else {
getSingleUnambiguousCandidate(namedReference)
}
}
is FirErrorNamedReference -> getSingleUnambiguousCandidate(namedReference)
else -> null
}