From d05e947d25349304664f7533890d1b00342e0b9d Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 27 Aug 2020 18:07:18 +0300 Subject: [PATCH] FIR: Ensure resolved callable symbols came out of the declared scopes Otherwise, we need to add `ensureResolved` to almost any usage of process*: - Call resolution need fully resolved callables - UseSiteScope when binding overrides should ensure resolved for callables from supertypes - checkers have to make sure they use correct overridden - SAM resolver --- .../kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt | 2 -- .../kotlin/fir/scopes/impl/FirAbstractImportingScope.kt | 2 ++ .../kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt | 2 ++ .../jetbrains/kotlin/fir/scopes/impl/FirPackageMemberScope.kt | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt index 50722b4e52f..0213dafae42 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/tower/TowerLevelHandler.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.resolve.calls.tower import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.resolve.calls.* -import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolvedForCalls import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol @@ -149,7 +148,6 @@ private class TowerScopeLevelProcessor( implicitExtensionReceiverValue: ImplicitReceiverValue<*>?, builtInExtensionFunctionReceiverValue: ReceiverValue? ) { - symbol.ensureResolvedForCalls(candidateFactory.bodyResolveComponents.session) // Check explicit extension receiver for default package members if (symbol is FirNamedFunctionSymbol && dispatchReceiverValue == null && (implicitExtensionReceiverValue == null) != (explicitReceiver == null) && diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractImportingScope.kt index 38a7f5b8b90..4b837b826e6 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractImportingScope.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.declarations.expandedConeType import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.calls.tower.TowerScopeLevel import org.jetbrains.kotlin.fir.resolve.toSymbol +import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolvedForCalls import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope import org.jetbrains.kotlin.fir.symbols.CallableId @@ -74,6 +75,7 @@ abstract class FirAbstractImportingScope( } for (symbol in symbols) { + symbol.ensureResolvedForCalls(session) processor(symbol) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt index f4830e52bf9..2a9e5615f14 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassDeclaredMemberScope.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor +import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolvedForCalls import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.scopes.getContainingClassifierNamesIfPresent @@ -64,6 +65,7 @@ class FirClassDeclaredMemberScope( val symbols = callablesIndex[name] ?: emptyList() for (symbol in symbols) { if (symbol is D) { + symbol.ensureResolvedForCalls(symbol.fir.session) processor(symbol) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirPackageMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirPackageMemberScope.kt index d0fac39f303..ddef6bc15f2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirPackageMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirPackageMemberScope.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor +import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolvedForCalls import org.jetbrains.kotlin.fir.scopes.FirScope import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol @@ -55,6 +56,7 @@ class FirPackageMemberScope(val fqName: FqName, val session: FirSession) : FirSc } for (symbol in symbols) { if (symbol is D) { + symbol.ensureResolvedForCalls(session) processor(symbol) } }