diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt index 3469e3c12a5..dc231ee7c0c 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevels.kt @@ -224,7 +224,7 @@ class QualifiedReceiverTowerLevel(session: FirSession) : SessionBasedTowerLevel( qualifiedReceiver.packageFqName, qualifiedReceiver.relativeClassFqName ) - ), session + ), session, ScopeSession() ) @Suppress("UNCHECKED_CAST") diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt index def311324ff..48658d342c9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirBodyResolveTransformer.kt @@ -97,8 +97,8 @@ open class FirBodyResolveTransformer( packageFqName = file.packageFqName this.file = file return withScopeCleanup(topLevelScopes) { - topLevelScopes.addImportingScopes(file, session) - topLevelScopes += FirTopLevelDeclaredMemberScope(file, session) + topLevelScopes.addImportingScopes(file, session, scopeSession) + topLevelScopes += FirTopLevelDeclaredMemberScope(file, session, scopeSession) super.transformFile(file, data) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt index f43bfe9eab5..28c8e8cf3e1 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypeResolverTransformer.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes import org.jetbrains.kotlin.fir.scopes.FirPosition import org.jetbrains.kotlin.fir.scopes.addImportingScopes @@ -83,7 +84,8 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe lateinit var resultingClass: FirDeclaration init { - towerScope.addImportingScopes(file, session) + val scopeSession = ScopeSession() + towerScope.addImportingScopes(file, session, scopeSession) } override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt index 6b8edbe089a..f25d2cf2522 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.resolve.FirProvider import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.lookupSuperTypes import org.jetbrains.kotlin.fir.scopes.FirPosition import org.jetbrains.kotlin.fir.scopes.addImportingScopes @@ -26,8 +27,9 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes( override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult { session = file.fileSession + val scopeSession = ScopeSession() return withScopeCleanup { - towerScope.addImportingScopes(file, session) + towerScope.addImportingScopes(file, session, scopeSession) super.transformFile(file, data) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/Scopes.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/Scopes.kt index e2ac11a4caf..df139b2ddd6 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/Scopes.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/Scopes.kt @@ -21,22 +21,22 @@ import org.jetbrains.kotlin.fir.types.coneTypeUnsafe import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.addToStdlib.safeAs -fun MutableList.addImportingScopes(file: FirFile, session: FirSession) { +fun MutableList.addImportingScopes(file: FirFile, session: FirSession, scopeSession: ScopeSession) { this += listOf( // from low priority to high priority - FirDefaultStarImportingScope(session, priority = DefaultImportPriority.LOW), - FirDefaultStarImportingScope(session, priority = DefaultImportPriority.HIGH), - FirExplicitStarImportingScope(file.imports, session), - FirDefaultSimpleImportingScope(session, priority = DefaultImportPriority.LOW), - FirDefaultSimpleImportingScope(session, priority = DefaultImportPriority.HIGH), + FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW), + FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH), + FirExplicitStarImportingScope(file.imports, session, scopeSession), + FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW), + FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH), FirSelfImportingScope(file.packageFqName, session), // TODO: explicit simple importing scope should have highest priority (higher than inner scopes added in process) - FirExplicitSimpleImportingScope(file.imports, session) + FirExplicitSimpleImportingScope(file.imports, session, scopeSession) ) } -fun FirCompositeScope.addImportingScopes(file: FirFile, session: FirSession) { - scopes.addImportingScopes(file, session) +fun FirCompositeScope.addImportingScopes(file: FirFile, session: FirSession, scopeSession: ScopeSession) { + scopes.addImportingScopes(file, session, scopeSession) } private fun finalExpansionName(symbol: FirTypeAliasSymbol, session: FirSession): Name? { 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 9fea74b9daa..fb27d087771 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 @@ -22,14 +22,14 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.utils.addToStdlib.cast -abstract class FirAbstractImportingScope(session: FirSession, lookupInFir: Boolean) : FirAbstractProviderBasedScope(session, lookupInFir) { - - - protected val scopeCache = ScopeSession() - +abstract class FirAbstractImportingScope( + session: FirSession, + protected val scopeSession: ScopeSession, + lookupInFir: Boolean +) : FirAbstractProviderBasedScope(session, lookupInFir) { private fun getStaticsScope(classId: ClassId): FirScope? { - provider.getClassUseSiteMemberScope(classId, session, scopeCache)?.let { return it } + provider.getClassUseSiteMemberScope(classId, session, scopeSession)?.let { return it } val symbol = provider.getClassLikeSymbolByFqName(classId) ?: error("No scope/symbol for $classId") @@ -76,7 +76,7 @@ abstract class FirAbstractImportingScope(session: FirSession, lookupInFir: Boole matchedClass, processor, session, - scopeCache, + scopeSession, name ).stop() ) { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractSimpleImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractSimpleImportingScope.kt index 5e3905fabea..f2ab05d8a71 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractSimpleImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractSimpleImportingScope.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel import org.jetbrains.kotlin.fir.scopes.FirPosition import org.jetbrains.kotlin.fir.scopes.ProcessorAction @@ -16,7 +17,10 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name -abstract class FirAbstractSimpleImportingScope(session: FirSession) : FirAbstractImportingScope(session, lookupInFir = true) { +abstract class FirAbstractSimpleImportingScope( + session: FirSession, + scopeSession: ScopeSession +) : FirAbstractImportingScope(session, scopeSession, lookupInFir = true) { protected abstract val simpleImports: Map> diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractStarImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractStarImportingScope.kt index 4cf87657cc6..52c655715fe 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractStarImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirAbstractStarImportingScope.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirResolvedImport +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.calls.TowerScopeLevel import org.jetbrains.kotlin.fir.scopes.FirPosition import org.jetbrains.kotlin.fir.scopes.ProcessorAction @@ -16,8 +17,10 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name abstract class FirAbstractStarImportingScope( - session: FirSession, lookupInFir: Boolean = true -) : FirAbstractImportingScope(session, lookupInFir) { + session: FirSession, + scopeSession: ScopeSession, + lookupInFir: Boolean = true +) : FirAbstractImportingScope(session, scopeSession, lookupInFir) { protected abstract val starImports: List diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultSimpleImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultSimpleImportingScope.kt index 0ed6f9b5070..6cf71faf693 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultSimpleImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultSimpleImportingScope.kt @@ -9,9 +9,14 @@ import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer -class FirDefaultSimpleImportingScope(session: FirSession, priority: DefaultImportPriority) : FirAbstractSimpleImportingScope(session) { +class FirDefaultSimpleImportingScope( + session: FirSession, + scopeSession: ScopeSession, + priority: DefaultImportPriority +) : FirAbstractSimpleImportingScope(session, scopeSession) { private fun FirImportImpl.resolve(importResolveTransformer: FirImportResolveTransformer) = importResolveTransformer.transformImport(this, null).single as FirResolvedImportImpl diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt index 94fcd53d85b..4ec14edca16 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirDefaultStarImportingScope.kt @@ -9,9 +9,14 @@ import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl +import org.jetbrains.kotlin.fir.resolve.ScopeSession -class FirDefaultStarImportingScope(session: FirSession, priority: DefaultImportPriority, lookupInFir: Boolean = false) : - FirAbstractStarImportingScope(session, lookupInFir) { +class FirDefaultStarImportingScope( + session: FirSession, + scopeSession: ScopeSession, + priority: DefaultImportPriority, + lookupInFir: Boolean = false +) : FirAbstractStarImportingScope(session, scopeSession, lookupInFir) { // TODO: put languageVersionSettings into FirSession? override val starImports = run { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirExplicitSimpleImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirExplicitSimpleImportingScope.kt index 7d5e94398c4..ca45b7583c3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirExplicitSimpleImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirExplicitSimpleImportingScope.kt @@ -8,11 +8,13 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl +import org.jetbrains.kotlin.fir.resolve.ScopeSession class FirExplicitSimpleImportingScope( imports: List, - session: FirSession -) : FirAbstractSimpleImportingScope(session) { + session: FirSession, + scopeSession: ScopeSession +) : FirAbstractSimpleImportingScope(session, scopeSession) { override val simpleImports = imports.filterIsInstance() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirExplicitStarImportingScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirExplicitStarImportingScope.kt index ee2a8c9ceaf..a76bb479743 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirExplicitStarImportingScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirExplicitStarImportingScope.kt @@ -8,7 +8,12 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirImport import org.jetbrains.kotlin.fir.declarations.FirResolvedImport +import org.jetbrains.kotlin.fir.resolve.ScopeSession -class FirExplicitStarImportingScope(imports: List, session: FirSession) : FirAbstractStarImportingScope(session) { +class FirExplicitStarImportingScope( + imports: List, + session: FirSession, + scopeSession: ScopeSession +) : FirAbstractStarImportingScope(session, scopeSession) { override val starImports = imports.filterIsInstance().filter { it.isAllUnder } } \ No newline at end of file diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTopLevelDeclaredMemberScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTopLevelDeclaredMemberScope.kt index 180925b22bc..be6868c24b3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTopLevelDeclaredMemberScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirTopLevelDeclaredMemberScope.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.name.Name class FirTopLevelDeclaredMemberScope( file: FirFile, session: FirSession, + private val scopeSession: ScopeSession, lookupInFir: Boolean = true ) : FirAbstractProviderBasedScope(session, lookupInFir) { private val packageFqName = file.packageFqName @@ -32,7 +33,7 @@ class FirTopLevelDeclaredMemberScope( matchedClass, processor, session, - ScopeSession(), + scopeSession, name ).stop() ) { diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt index 79a76a153aa..0219bb8e3bc 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/fir/FirResolutionApi.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.FirProvider +import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.* import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.impl.FirTopLevelDeclaredMemberScope @@ -39,7 +40,7 @@ private fun FirFile.findCallableMember( packageFqName: FqName, klassFqName: FqName?, declName: Name ): FirCallableDeclaration<*> { val memberScope = - if (klassFqName == null) FirTopLevelDeclaredMemberScope(this, session) + if (klassFqName == null) FirTopLevelDeclaredMemberScope(this, session, ScopeSession()) else provider.getClassDeclaredMemberScope(ClassId(packageFqName, klassFqName, false))!! var result: FirCallableDeclaration<*>? = null val processor = { symbol: FirCallableSymbol<*> ->