[FIR] Get rid of StoreNameReference and StoreCalleeReference
All usages of it are replaced with `replaceCalleeReference`
This commit is contained in:
committed by
Space Team
parent
3f8beb0b52
commit
f8ef55ad16
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.fir.resolve.diagnostics.*
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.ResolvedCallableReferenceAtom
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.inferenceComponents
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.StoreNameReference
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
|
||||
@@ -90,7 +89,7 @@ class FirCallResolver(
|
||||
expectedCandidates = forceCandidates
|
||||
)
|
||||
|
||||
val resultExpression = functionCall.transformCalleeReference(StoreNameReference, nameReference)
|
||||
functionCall.replaceCalleeReference(nameReference)
|
||||
val candidate = (nameReference as? FirNamedReferenceWithCandidate)?.candidate
|
||||
val resolvedReceiver = functionCall.explicitReceiver
|
||||
if (candidate != null && resolvedReceiver is FirResolvedQualifier) {
|
||||
@@ -107,7 +106,7 @@ class FirCallResolver(
|
||||
contextReceiverArguments.addAll(candidate.contextReceiverArguments())
|
||||
}
|
||||
} else {
|
||||
resultExpression
|
||||
functionCall
|
||||
}
|
||||
val typeRef = components.typeFromCallee(resultFunctionCall)
|
||||
if (typeRef.type is ConeErrorType) {
|
||||
@@ -319,17 +318,17 @@ class FirCallResolver(
|
||||
}
|
||||
}
|
||||
|
||||
val resultExpression = qualifiedAccess.transformCalleeReference(StoreNameReference, nameReference)
|
||||
qualifiedAccess.replaceCalleeReference(nameReference)
|
||||
if (reducedCandidates.size == 1) {
|
||||
val candidate = reducedCandidates.single()
|
||||
resultExpression.apply {
|
||||
qualifiedAccess.apply {
|
||||
replaceDispatchReceiver(candidate.dispatchReceiverExpression())
|
||||
replaceExtensionReceiver(candidate.chosenExtensionReceiverExpression())
|
||||
replaceContextReceiverArguments(candidate.contextReceiverArguments())
|
||||
}
|
||||
}
|
||||
if (resultExpression is FirExpression) transformer.storeTypeFromCallee(resultExpression)
|
||||
return resultExpression
|
||||
if (qualifiedAccess is FirExpression) transformer.storeTypeFromCallee(qualifiedAccess)
|
||||
return qualifiedAccess
|
||||
}
|
||||
|
||||
fun resolveCallableReference(
|
||||
@@ -468,7 +467,9 @@ class FirCallResolver(
|
||||
transformer.resolutionContext,
|
||||
components.resolutionStageRunner
|
||||
)
|
||||
return delegatedConstructorCall.transformCalleeReference(StoreNameReference, errorReference)
|
||||
return delegatedConstructorCall.apply {
|
||||
replaceCalleeReference(errorReference)
|
||||
}
|
||||
}
|
||||
|
||||
val result = towerResolver.runResolverForDelegatingConstructor(
|
||||
@@ -541,7 +542,9 @@ class FirCallResolver(
|
||||
)
|
||||
}
|
||||
|
||||
return annotation.transformCalleeReference(StoreNameReference, resolvedReference)
|
||||
return annotation.apply {
|
||||
replaceCalleeReference(resolvedReference)
|
||||
}
|
||||
}
|
||||
|
||||
private fun createCandidateForAnnotationCall(
|
||||
@@ -588,7 +591,8 @@ class FirCallResolver(
|
||||
result.currentApplicability,
|
||||
)
|
||||
|
||||
return call.transformCalleeReference(StoreNameReference, nameReference).apply {
|
||||
return call.apply {
|
||||
call.replaceCalleeReference(nameReference)
|
||||
val singleCandidate = reducedCandidates.singleOrNull()
|
||||
if (singleCandidate != null) {
|
||||
val symbol = singleCandidate.symbol
|
||||
|
||||
+2
-5
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.resolve.calls.*
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedReferenceError
|
||||
import org.jetbrains.kotlin.fir.resolve.inference.model.ConeLambdaArgumentConstraintPosition
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.StoreNameReference
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.ConeTypeVariable
|
||||
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
|
||||
@@ -86,10 +85,8 @@ class PostponedArgumentsAnalyzer(
|
||||
diagnostic = ConeUnresolvedReferenceError(callableReferenceAccess.calleeReference.name)
|
||||
}
|
||||
|
||||
callableReferenceAccess.transformCalleeReference(
|
||||
StoreNameReference,
|
||||
namedReference
|
||||
).apply {
|
||||
callableReferenceAccess.apply {
|
||||
replaceCalleeReference(namedReference)
|
||||
val typeForCallableReference = atom.resultingTypeForCallableReference
|
||||
val resolvedTypeRef = when {
|
||||
typeForCallableReference != null -> buildResolvedTypeRef {
|
||||
|
||||
+29
-42
@@ -130,33 +130,29 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
extensionReceiver = extensionReceiver.transformSingle(integerOperatorApproximator, expectedExtensionReceiverType)
|
||||
}
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val result = qualifiedAccessExpression
|
||||
.transformCalleeReference(
|
||||
StoreCalleeReference,
|
||||
calleeReference.toResolvedReference(),
|
||||
).apply {
|
||||
replaceDispatchReceiver(dispatchReceiver)
|
||||
replaceExtensionReceiver(extensionReceiver)
|
||||
} as T
|
||||
|
||||
result.replaceContextReceiverArguments(subCandidate.contextReceiverArguments())
|
||||
|
||||
if (result is FirPropertyAccessExpressionImpl && calleeReference.candidate.currentApplicability == CandidateApplicability.K2_PROPERTY_AS_OPERATOR) {
|
||||
result.nonFatalDiagnostics.add(ConePropertyAsOperator(calleeReference.candidate.symbol as FirPropertySymbol))
|
||||
qualifiedAccessExpression.apply {
|
||||
replaceCalleeReference(calleeReference.toResolvedReference())
|
||||
replaceDispatchReceiver(dispatchReceiver)
|
||||
replaceExtensionReceiver(extensionReceiver)
|
||||
}
|
||||
|
||||
if (result is FirQualifiedAccessExpression) {
|
||||
result.replaceTypeRef(typeRef)
|
||||
} else if (result is FirVariableAssignment) {
|
||||
result.replaceLValueTypeRef(typeRef)
|
||||
qualifiedAccessExpression.replaceContextReceiverArguments(subCandidate.contextReceiverArguments())
|
||||
|
||||
if (qualifiedAccessExpression is FirPropertyAccessExpressionImpl && calleeReference.candidate.currentApplicability == CandidateApplicability.K2_PROPERTY_AS_OPERATOR) {
|
||||
qualifiedAccessExpression.nonFatalDiagnostics.add(ConePropertyAsOperator(calleeReference.candidate.symbol as FirPropertySymbol))
|
||||
}
|
||||
|
||||
if (qualifiedAccessExpression is FirQualifiedAccessExpression) {
|
||||
qualifiedAccessExpression.replaceTypeRef(typeRef)
|
||||
} else if (qualifiedAccessExpression is FirVariableAssignment) {
|
||||
qualifiedAccessExpression.replaceLValueTypeRef(typeRef)
|
||||
}
|
||||
|
||||
if (declaration !is FirErrorFunction) {
|
||||
result.replaceTypeArguments(typeArguments)
|
||||
qualifiedAccessExpression.replaceTypeArguments(typeArguments)
|
||||
}
|
||||
session.lookupTracker?.recordTypeResolveAsLookup(typeRef, qualifiedAccessExpression.source, context.file.source)
|
||||
return result
|
||||
return qualifiedAccessExpression
|
||||
}
|
||||
|
||||
override fun transformQualifiedAccessExpression(
|
||||
@@ -256,12 +252,8 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
annotationCall: FirAnnotationCall,
|
||||
data: ExpectedArgumentType?
|
||||
): FirStatement {
|
||||
val calleeReference = annotationCall.calleeReference as? FirNamedReferenceWithCandidate
|
||||
?: return annotationCall
|
||||
annotationCall.transformCalleeReference(
|
||||
StoreCalleeReference,
|
||||
calleeReference.toResolvedReference(),
|
||||
)
|
||||
val calleeReference = annotationCall.calleeReference as? FirNamedReferenceWithCandidate ?: return annotationCall
|
||||
annotationCall.replaceCalleeReference(calleeReference.toResolvedReference())
|
||||
val subCandidate = calleeReference.candidate
|
||||
val expectedArgumentsTypeMapping = runIf(!calleeReference.isError) { subCandidate.createArgumentsMapping() }
|
||||
withFirArrayOfCallTransformer {
|
||||
@@ -386,10 +378,8 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
}
|
||||
}
|
||||
|
||||
return callableReferenceAccess.transformCalleeReference(
|
||||
StoreCalleeReference,
|
||||
resolvedReference,
|
||||
).apply {
|
||||
return callableReferenceAccess.apply {
|
||||
replaceCalleeReference(resolvedReference)
|
||||
replaceDispatchReceiver(subCandidate.dispatchReceiverExpression())
|
||||
replaceExtensionReceiver(subCandidate.chosenExtensionReceiverExpression())
|
||||
}
|
||||
@@ -425,10 +415,9 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
variableAssignment.replaceLValueTypeRef(resultLValueType)
|
||||
session.lookupTracker?.recordTypeResolveAsLookup(resultLValueType, variableAssignment.lValue.source, context.file.source)
|
||||
|
||||
return variableAssignment.transformCalleeReference(
|
||||
StoreCalleeReference,
|
||||
calleeReference.toResolvedReference(),
|
||||
)
|
||||
return variableAssignment.apply {
|
||||
replaceCalleeReference(calleeReference.toResolvedReference())
|
||||
}
|
||||
}
|
||||
|
||||
override fun transformSmartCastExpression(smartCastExpression: FirSmartCastExpression, data: ExpectedArgumentType?): FirStatement {
|
||||
@@ -510,10 +499,9 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
delegatedConstructorCall.replaceArgumentList(buildResolvedArgumentList(it, delegatedConstructorCall.argumentList.source))
|
||||
}
|
||||
}
|
||||
return delegatedConstructorCall.transformCalleeReference(
|
||||
StoreCalleeReference,
|
||||
calleeReference.toResolvedReference(),
|
||||
)
|
||||
return delegatedConstructorCall.apply {
|
||||
replaceCalleeReference(calleeReference.toResolvedReference())
|
||||
}
|
||||
}
|
||||
|
||||
private fun computeTypeArguments(
|
||||
@@ -782,10 +770,9 @@ class FirCallCompletionResultsWriterTransformer(
|
||||
syntheticCall.replaceTypeRefWithSubstituted(calleeReference, typeRef)
|
||||
transformSyntheticCallChildren(syntheticCall, data)
|
||||
|
||||
return (syntheticCall.transformCalleeReference(
|
||||
StoreCalleeReference,
|
||||
calleeReference.toResolvedReference(),
|
||||
) as D)
|
||||
return syntheticCall.apply {
|
||||
replaceCalleeReference(calleeReference.toResolvedReference())
|
||||
}
|
||||
}
|
||||
|
||||
private inline fun <reified D> transformSyntheticCallChildren(
|
||||
|
||||
-59
@@ -41,65 +41,6 @@ internal object TransformImplicitType : FirDefaultTransformer<FirTypeRef>() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
internal object StoreNameReference : FirDefaultTransformer<FirNamedReference>() {
|
||||
override fun <E : FirElement> transformElement(element: E, data: FirNamedReference): E {
|
||||
return element
|
||||
}
|
||||
|
||||
override fun transformNamedReference(
|
||||
namedReference: FirNamedReference,
|
||||
data: FirNamedReference
|
||||
): FirNamedReference {
|
||||
return data
|
||||
}
|
||||
|
||||
override fun transformNamedReferenceWithCandidateSymbol(
|
||||
namedReferenceWithCandidateSymbol: FirNamedReferenceWithCandidateSymbol,
|
||||
data: FirNamedReference
|
||||
): FirReference {
|
||||
return data
|
||||
}
|
||||
|
||||
override fun transformThisReference(thisReference: FirThisReference, data: FirNamedReference): FirReference {
|
||||
return data
|
||||
}
|
||||
|
||||
override fun transformSuperReference(
|
||||
superReference: FirSuperReference,
|
||||
data: FirNamedReference
|
||||
): FirReference {
|
||||
return data
|
||||
}
|
||||
}
|
||||
|
||||
internal object StoreCalleeReference : FirTransformer<FirNamedReference>() {
|
||||
override fun <E : FirElement> transformElement(element: E, data: FirNamedReference): E {
|
||||
return element
|
||||
}
|
||||
|
||||
override fun transformNamedReference(
|
||||
namedReference: FirNamedReference,
|
||||
data: FirNamedReference
|
||||
): FirNamedReference {
|
||||
return data
|
||||
}
|
||||
|
||||
override fun transformNamedReferenceWithCandidateSymbol(
|
||||
namedReferenceWithCandidateSymbol: FirNamedReferenceWithCandidateSymbol,
|
||||
data: FirNamedReference
|
||||
): FirReference {
|
||||
return data
|
||||
}
|
||||
|
||||
override fun transformResolvedNamedReference(
|
||||
resolvedNamedReference: FirResolvedNamedReference,
|
||||
data: FirNamedReference
|
||||
): FirNamedReference {
|
||||
return data
|
||||
}
|
||||
}
|
||||
|
||||
internal fun FirValueParameter.transformVarargTypeToArrayType() {
|
||||
if (isVararg) {
|
||||
this.transformTypeToArrayType()
|
||||
|
||||
Reference in New Issue
Block a user