K2. Drop PostponedVariablesInitializerResolutionStage

It would be unnecessary after PCLA approach would be implemented

^KT-59791 In progress
This commit is contained in:
Denis.Zharkov
2023-08-09 18:34:39 +02:00
committed by Space Team
parent bb8ff9e299
commit 3b2bc49c4d
2 changed files with 0 additions and 57 deletions
@@ -19,7 +19,6 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
CheckContextReceivers,
CheckDslScopeViolation,
CheckLowPriorityInOverloadResolution,
PostponedVariablesInitializerResolutionStage,
ProcessDynamicExtensionAnnotation,
LowerPriorityIfDynamic,
ConstraintSystemForks,
@@ -55,7 +54,6 @@ sealed class CallKind(vararg resolutionSequence: ResolutionStage) {
CheckCallModifiers,
EagerResolveOfCallableReferences,
CheckLowPriorityInOverloadResolution,
PostponedVariablesInitializerResolutionStage,
ProcessDynamicExtensionAnnotation,
LowerPriorityIfDynamic,
ConstraintSystemForks,
@@ -126,7 +124,6 @@ class ResolutionSequenceBuilder(
var checkExtensionReceiver: Boolean = false,
var checkArguments: Boolean = false,
var checkLowPriorityInOverloadResolution: Boolean = false,
var initializePostponedVariables: Boolean = false,
var mapTypeArguments: Boolean = false,
var resolveCallableReferenceArguments: Boolean = false,
var checkCallableReferenceExpectedType: Boolean = false,
@@ -146,7 +143,6 @@ class ResolutionSequenceBuilder(
if (checkContextReceivers) add(CheckContextReceivers)
if (resolveCallableReferenceArguments) add(EagerResolveOfCallableReferences)
if (checkLowPriorityInOverloadResolution) add(CheckLowPriorityInOverloadResolution)
if (initializePostponedVariables) add(PostponedVariablesInitializerResolutionStage)
if (checkCallableReferenceExpectedType) add(CheckCallableReferenceExpectedType)
}.toTypedArray()
return CallKind.CustomForIde(*stages)
@@ -695,59 +695,6 @@ internal object CheckIncompatibleTypeVariableUpperBounds : ResolutionStage() {
}
}
internal object PostponedVariablesInitializerResolutionStage : ResolutionStage() {
override suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext) {
val argumentMapping = candidate.argumentMapping ?: return
if (candidate.typeArgumentMapping is TypeArgumentMapping.Mapped) return
val atomsToMark = mutableSetOf<FirAnonymousFunction>()
for ((argument, parameter) in argumentMapping) {
if (!parameter.hasBuilderInferenceAnnotation(context.session)) continue
val unwrapped = argument.unwrapArgument()
if (unwrapped is FirAnonymousFunctionExpression) {
atomsToMark.add(unwrapped.anonymousFunction)
}
// TODO (KT-63958): This is effectively dead-code, since UseBuilderInferenceOnlyIfNeeded is always enabled
val type = parameter.returnTypeRef.coneType
val receiverType = type.receiverType(callInfo.session) ?: continue
val dontUseBuilderInferenceIfPossible =
context.session.languageVersionSettings.supportsFeature(LanguageFeature.UseBuilderInferenceOnlyIfNeeded)
if (dontUseBuilderInferenceIfPossible) continue
for (freshVariable in candidate.freshVariables) {
if (candidate.csBuilder.isPostponedTypeVariable(freshVariable)) continue
if (freshVariable !is ConeTypeParameterBasedTypeVariable) continue
val typeParameterSymbol = freshVariable.typeParameterSymbol
val typeHasVariable = receiverType.contains {
(it as? ConeTypeParameterType)?.lookupTag?.typeParameterSymbol == typeParameterSymbol
}
if (typeHasVariable) {
candidate.csBuilder.markPostponedVariable(freshVariable)
}
}
}
candidate.postponedAtoms.forEach { postponedAtomContainer ->
when (postponedAtomContainer) {
is ResolvedLambdaAtom -> {
if (postponedAtomContainer.atom in atomsToMark) {
postponedAtomContainer.isCorrespondingParameterAnnotatedWithBuilderInference = true
}
}
is LambdaWithTypeVariableAsExpectedTypeAtom -> {
// Although, one may annotate fun foo(@BuilderInference t: T)
// it makes little sense
}
is ResolvedCallableReferenceAtom -> {
// Builder inference doesn't apply to such atoms.
}
}
}
}
}
internal object CheckCallModifiers : CheckerStage() {
override suspend fun check(candidate: Candidate, callInfo: CallInfo, sink: CheckerSink, context: ResolutionContext) {
if (callInfo.callSite is FirFunctionCall) {