diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/singleCandidate/builderInference.descriptors.txt b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/singleCandidate/builderInference.descriptors.txt deleted file mode 100644 index 94ba6ec2718..00000000000 --- a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/singleCandidate/builderInference.descriptors.txt +++ /dev/null @@ -1,43 +0,0 @@ -KtApplicableCallCandidateInfo: - candidate = KtSimpleFunctionCall: - isImplicitInvoke = false - partiallyAppliedSymbol = KtPartiallyAppliedSymbol: - dispatchReceiver = KtImplicitReceiverValue: - symbol = KtReceiverParameterSymbol: - annotationsList: [] - origin: SOURCE - owningCallableSymbol: KtAnonymousFunctionSymbol(/) - type: KtUsualClassType: - annotationsList: [] - ownTypeArguments: [ - KtUsualClassType: - annotationsList: [] - ownTypeArguments: [] - type: kotlin/String - ] - type: test/Target - type = test.Target - extensionReceiver = null - signature = KtFunctionLikeSignature: - receiverType = null - returnType = kotlin.Unit - symbol = test/Target.add(: test.Target, t: T): kotlin.Unit - valueParameters = [ - KtVariableLikeSignature: - name = t - receiverType = null - returnType = kotlin.String - symbol = t: T - callableIdIfNonLocal = null - ] - callableIdIfNonLocal = test/Target.add - typeArgumentsMapping = {} - argumentMapping = { - s -> (KtVariableLikeSignature: - name = t - receiverType = null - returnType = kotlin.String - symbol = t: T - callableIdIfNonLocal = null) - } - isInBestCandidates = true \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/singleCandidate/builderInference.txt b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/singleCandidate/builderInference.txt index a6cde1eee69..94ba6ec2718 100644 --- a/analysis/analysis-api/testData/components/callResolver/resolveCandidates/singleCandidate/builderInference.txt +++ b/analysis/analysis-api/testData/components/callResolver/resolveCandidates/singleCandidate/builderInference.txt @@ -16,7 +16,7 @@ KtApplicableCallCandidateInfo: type: kotlin/String ] type: test/Target - type = test.Target + type = test.Target extensionReceiver = null signature = KtFunctionLikeSignature: receiverType = null @@ -26,7 +26,7 @@ KtApplicableCallCandidateInfo: KtVariableLikeSignature: name = t receiverType = null - returnType = T + returnType = kotlin.String symbol = t: T callableIdIfNonLocal = null ] @@ -36,7 +36,7 @@ KtApplicableCallCandidateInfo: s -> (KtVariableLikeSignature: name = t receiverType = null - returnType = T + returnType = kotlin.String symbol = t: T callableIdIfNonLocal = null) } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/resolver/AllCandidatesResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/resolver/AllCandidatesResolver.kt index 9f725f72ace..b6729ecdd93 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/resolver/AllCandidatesResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/resolver/AllCandidatesResolver.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.resolver import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile import org.jetbrains.kotlin.analysis.low.level.api.fir.api.resolveToFirSymbol +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.ContextCollector import org.jetbrains.kotlin.analysis.utils.printer.parentsOfType import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.FirResolvePhase @@ -16,6 +17,7 @@ import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.calleeReference import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.resolve.SessionHolderImpl import org.jetbrains.kotlin.fir.resolve.calls.InapplicableCandidate import org.jetbrains.kotlin.fir.resolve.calls.ResolutionContext import org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolver @@ -95,8 +97,10 @@ class AllCandidatesResolver(private val firSession: FirSession) { @OptIn(PrivateForInline::class, SymbolInternals::class) private fun initializeBodyResolveContext(firResolveSession: LLFirResolveSession, element: KtElement) { + val firFile = element.containingKtFile.getOrBuildFirFile(firResolveSession) + // Set up needed context to get all candidates. - val towerContext = firResolveSession.getTowerContextProvider(element.containingKtFile).getClosestAvailableParentContext(element) + val towerContext = ContextCollector.process(firFile, bodyResolveComponents, element)?.towerDataContext towerContext?.let { bodyResolveComponents.context.replaceTowerDataContext(it) } val containingDeclarations = element.parentsOfType().map { it.resolveToFirSymbol(firResolveSession).fir }.toList().asReversed() @@ -104,7 +108,6 @@ class AllCandidatesResolver(private val firSession: FirSession) { // `towerContext` from above should already contain all the scopes for the file, // so we just set it manually without calling `withFile` - val firFile = element.containingKtFile.getOrBuildFirFile(firResolveSession) bodyResolveComponents.context.file = firFile }