diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index a4f740ade2f..4c4821fd24b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -249,12 +249,18 @@ class FirCallResolver( ) // No reset here! val localCollector = CandidateCollector(components, components.resolutionStageRunner) - val result = towerResolver.runResolver( - info, - transformer.resolutionContext, - collector = localCollector, - manager = TowerResolveManager(localCollector), - ) + + val towerDataContext = + transformer.context.towerDataContextForCallableReferences[callableReferenceAccess] ?: transformer.context.towerDataContext + + val result = transformer.context.withTowerDataContext(towerDataContext) { + towerResolver.runResolver( + info, + transformer.resolutionContext, + collector = localCollector, + manager = TowerResolveManager(localCollector), + ) + } val bestCandidates = result.bestCandidates() val noSuccessfulCandidates = !result.currentApplicability.isSuccess val reducedCandidates = if (noSuccessfulCandidates) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/PostponedArgumentsAnalyzer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/PostponedArgumentsAnalyzer.kt index ec55504908f..6b3ff053b84 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/PostponedArgumentsAnalyzer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/PostponedArgumentsAnalyzer.kt @@ -74,6 +74,9 @@ class PostponedArgumentsAnalyzer( val callableReferenceAccess = atom.reference atom.analyzed = true + + resolutionContext.bodyResolveContext.towerDataContextForCallableReferences.remove(callableReferenceAccess) + val (resultingCandidate, applicability) = atom.resultingCandidate ?: Pair(null, CandidateApplicability.INAPPLICABLE) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt index 8246c99fbc5..ff6c54ebcc8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/BodyResolveContext.kt @@ -9,6 +9,7 @@ import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.persistentListOf import org.jetbrains.kotlin.fir.PrivateForInline import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.resolve.FirTowerDataContext import org.jetbrains.kotlin.fir.resolve.FirTowerDataContextsForClassParts import org.jetbrains.kotlin.fir.resolve.FirTowerDataElement @@ -53,6 +54,7 @@ class BodyResolveContext( var containers: PersistentList = persistentListOf() val towerDataContextForAnonymousFunctions: MutableMap = mutableMapOf() + val towerDataContextForCallableReferences: MutableMap = mutableMapOf() @set:PrivateForInline var inferenceSession: FirInferenceSession = FirInferenceSession.DEFAULT @@ -200,6 +202,7 @@ class BodyResolveContext( ): BodyResolveContext = BodyResolveContext(returnTypeCalculator, dataFlowAnalyzerContext, targetedLocalClasses, outerLocalClassForNested).apply { file = this@BodyResolveContext.file towerDataContextForAnonymousFunctions.putAll(this@BodyResolveContext.towerDataContextForAnonymousFunctions) + towerDataContextForCallableReferences.putAll(this@BodyResolveContext.towerDataContextForCallableReferences) containers = this@BodyResolveContext.containers towerDataContext = this@BodyResolveContext.towerDataContext anonymousFunctionsAnalyzedInDependentContext.addAll(this@BodyResolveContext.anonymousFunctionsAnalyzedInDependentContext) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt index ea09b540c33..d127e062ea9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt @@ -51,6 +51,7 @@ open class FirBodyResolveTransformer( override fun transformFile(file: FirFile, data: ResolutionMode): CompositeTransformResult { checkSessionConsistency(file) context.cleanContextForAnonymousFunction() + context.towerDataContextForCallableReferences.clear() context.cleanDataFlowContext() @OptIn(PrivateForInline::class) context.file = file diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 88f497176af..786b7c061d2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -664,6 +664,8 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform return resolvedReference.compose() } + context.towerDataContextForCallableReferences[callableReferenceAccess] = context.towerDataContext + dataFlowAnalyzer.exitCallableReference(callableReferenceAccessWithTransformedLHS) return callableReferenceAccessWithTransformedLHS.compose() } diff --git a/compiler/testData/codegen/box/javaInterop/notNullAssertions/localEntities.kt b/compiler/testData/codegen/box/javaInterop/notNullAssertions/localEntities.kt index 0788277d7b0..95de17765a3 100644 --- a/compiler/testData/codegen/box/javaInterop/notNullAssertions/localEntities.kt +++ b/compiler/testData/codegen/box/javaInterop/notNullAssertions/localEntities.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // SKIP_JDK6 // TARGET_BACKEND: JVM // WITH_RUNTIME