FIR: Minor. Extract common parts in FirCallCompletionResultsWriterTransformer
This commit is contained in:
+22
-17
@@ -53,11 +53,7 @@ class FirCallCompletionResultsWriterTransformer(
|
|||||||
FirSimpleDiagnostic("Callee reference to candidate without return type: ${candidateFir.render()}")
|
FirSimpleDiagnostic("Callee reference to candidate without return type: ${candidateFir.render()}")
|
||||||
)
|
)
|
||||||
|
|
||||||
val initialType = calleeReference.candidate.substitutor.substituteOrNull(typeRef.type)
|
qualifiedAccessExpression.replaceTypeRefWithSubstituted(calleeReference, typeRef)
|
||||||
val finalType = finalSubstitutor.substituteOrNull(initialType)
|
|
||||||
|
|
||||||
val resultType = typeRef.withReplacedConeType(finalType)
|
|
||||||
qualifiedAccessExpression.replaceTypeRef(resultType)
|
|
||||||
|
|
||||||
return qualifiedAccessExpression.transformCalleeReference(
|
return qualifiedAccessExpression.transformCalleeReference(
|
||||||
StoreCalleeReference,
|
StoreCalleeReference,
|
||||||
@@ -69,6 +65,24 @@ class FirCallCompletionResultsWriterTransformer(
|
|||||||
).compose()
|
).compose()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun <D : FirExpression> D.replaceTypeRefWithSubstituted(
|
||||||
|
calleeReference: FirNamedReferenceWithCandidate,
|
||||||
|
typeRef: FirResolvedTypeRef
|
||||||
|
): D {
|
||||||
|
val resultTypeRef = typeRef.substituteTypeRef(calleeReference.candidate)
|
||||||
|
replaceTypeRef(resultTypeRef)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun FirResolvedTypeRef.substituteTypeRef(
|
||||||
|
candidate: Candidate
|
||||||
|
): FirResolvedTypeRef {
|
||||||
|
val initialType = candidate.substitutor.substituteOrNull(type)
|
||||||
|
val finalType = finalSubstitutor.substituteOrNull(initialType)
|
||||||
|
|
||||||
|
return withReplacedConeType(finalType)
|
||||||
|
}
|
||||||
|
|
||||||
override fun transformCallableReferenceAccess(
|
override fun transformCallableReferenceAccess(
|
||||||
callableReferenceAccess: FirCallableReferenceAccess,
|
callableReferenceAccess: FirCallableReferenceAccess,
|
||||||
data: Nothing?
|
data: Nothing?
|
||||||
@@ -149,10 +163,7 @@ class FirCallCompletionResultsWriterTransformer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val initialType = subCandidate.substitutor.substituteOrNull(typeRef.type)
|
val resultType = typeRef.substituteTypeRef(subCandidate)
|
||||||
val finalType = finalSubstitutor.substituteOrNull(initialType)
|
|
||||||
|
|
||||||
val resultType = typeRef.withReplacedConeType(finalType)
|
|
||||||
|
|
||||||
return functionCall.copy(
|
return functionCall.copy(
|
||||||
resultType = resultType,
|
resultType = resultType,
|
||||||
@@ -216,10 +227,7 @@ class FirCallCompletionResultsWriterTransformer(
|
|||||||
|
|
||||||
val typeRef = typeCalculator.tryCalculateReturnType(declaration)
|
val typeRef = typeCalculator.tryCalculateReturnType(declaration)
|
||||||
|
|
||||||
val initialType = subCandidate.substitutor.substituteOrNull(typeRef.type)
|
whenExpression.resultType = typeRef.substituteTypeRef(subCandidate)
|
||||||
val finalType = finalSubstitutor.substituteOrNull(initialType)
|
|
||||||
|
|
||||||
whenExpression.resultType = typeRef.withReplacedConeType(finalType)
|
|
||||||
|
|
||||||
return whenExpression.transformCalleeReference(
|
return whenExpression.transformCalleeReference(
|
||||||
StoreCalleeReference,
|
StoreCalleeReference,
|
||||||
@@ -242,10 +250,7 @@ class FirCallCompletionResultsWriterTransformer(
|
|||||||
|
|
||||||
val typeRef = typeCalculator.tryCalculateReturnType(declaration)
|
val typeRef = typeCalculator.tryCalculateReturnType(declaration)
|
||||||
|
|
||||||
val initialType = subCandidate.substitutor.substituteOrNull(typeRef.type)
|
tryExpression.resultType = typeRef.substituteTypeRef(subCandidate)
|
||||||
val finalType = finalSubstitutor.substituteOrNull(initialType)
|
|
||||||
|
|
||||||
tryExpression.resultType = typeRef.withReplacedConeType(finalType)
|
|
||||||
return tryExpression.transformCalleeReference(
|
return tryExpression.transformCalleeReference(
|
||||||
StoreCalleeReference,
|
StoreCalleeReference,
|
||||||
FirResolvedNamedReferenceImpl(
|
FirResolvedNamedReferenceImpl(
|
||||||
|
|||||||
Reference in New Issue
Block a user