FIR [optimization]: eliminate some unnecessary ScopeSessions
This commit is contained in:
@@ -224,7 +224,7 @@ class QualifiedReceiverTowerLevel(session: FirSession) : SessionBasedTowerLevel(
|
||||
qualifiedReceiver.packageFqName,
|
||||
qualifiedReceiver.relativeClassFqName
|
||||
)
|
||||
), session
|
||||
), session, ScopeSession()
|
||||
)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
|
||||
+2
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-1
@@ -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<FirDeclaration> {
|
||||
|
||||
+3
-1
@@ -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<FirFile> {
|
||||
session = file.fileSession
|
||||
val scopeSession = ScopeSession()
|
||||
return withScopeCleanup {
|
||||
towerScope.addImportingScopes(file, session)
|
||||
towerScope.addImportingScopes(file, session, scopeSession)
|
||||
super.transformFile(file, data)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<FirScope>.addImportingScopes(file: FirFile, session: FirSession) {
|
||||
fun MutableList<FirScope>.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? {
|
||||
|
||||
+7
-7
@@ -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()
|
||||
) {
|
||||
|
||||
+5
-1
@@ -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<Name, List<FirResolvedImportImpl>>
|
||||
|
||||
|
||||
+5
-2
@@ -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<FirResolvedImport>
|
||||
|
||||
|
||||
+6
-1
@@ -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
|
||||
|
||||
+7
-2
@@ -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 {
|
||||
|
||||
+4
-2
@@ -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<FirImport>,
|
||||
session: FirSession
|
||||
) : FirAbstractSimpleImportingScope(session) {
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession
|
||||
) : FirAbstractSimpleImportingScope(session, scopeSession) {
|
||||
|
||||
override val simpleImports =
|
||||
imports.filterIsInstance<FirResolvedImportImpl>()
|
||||
|
||||
+6
-1
@@ -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<FirImport>, session: FirSession) : FirAbstractStarImportingScope(session) {
|
||||
class FirExplicitStarImportingScope(
|
||||
imports: List<FirImport>,
|
||||
session: FirSession,
|
||||
scopeSession: ScopeSession
|
||||
) : FirAbstractStarImportingScope(session, scopeSession) {
|
||||
override val starImports = imports.filterIsInstance<FirResolvedImport>().filter { it.isAllUnder }
|
||||
}
|
||||
+2
-1
@@ -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()
|
||||
) {
|
||||
|
||||
@@ -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<*> ->
|
||||
|
||||
Reference in New Issue
Block a user