FIR [optimization]: eliminate some unnecessary ScopeSessions
This commit is contained in:
@@ -224,7 +224,7 @@ class QualifiedReceiverTowerLevel(session: FirSession) : SessionBasedTowerLevel(
|
|||||||
qualifiedReceiver.packageFqName,
|
qualifiedReceiver.packageFqName,
|
||||||
qualifiedReceiver.relativeClassFqName
|
qualifiedReceiver.relativeClassFqName
|
||||||
)
|
)
|
||||||
), session
|
), session, ScopeSession()
|
||||||
)
|
)
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
|||||||
+2
-2
@@ -97,8 +97,8 @@ open class FirBodyResolveTransformer(
|
|||||||
packageFqName = file.packageFqName
|
packageFqName = file.packageFqName
|
||||||
this.file = file
|
this.file = file
|
||||||
return withScopeCleanup(topLevelScopes) {
|
return withScopeCleanup(topLevelScopes) {
|
||||||
topLevelScopes.addImportingScopes(file, session)
|
topLevelScopes.addImportingScopes(file, session, scopeSession)
|
||||||
topLevelScopes += FirTopLevelDeclaredMemberScope(file, session)
|
topLevelScopes += FirTopLevelDeclaredMemberScope(file, session, scopeSession)
|
||||||
super.transformFile(file, data)
|
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.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
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.resolve.lookupSuperTypes
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||||
import org.jetbrains.kotlin.fir.scopes.addImportingScopes
|
import org.jetbrains.kotlin.fir.scopes.addImportingScopes
|
||||||
@@ -83,7 +84,8 @@ class FirSupertypeResolverTransformer : FirAbstractTreeTransformer(phase = FirRe
|
|||||||
lateinit var resultingClass: FirDeclaration
|
lateinit var resultingClass: FirDeclaration
|
||||||
|
|
||||||
init {
|
init {
|
||||||
towerScope.addImportingScopes(file, session)
|
val scopeSession = ScopeSession()
|
||||||
|
towerScope.addImportingScopes(file, session, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun transformRegularClass(regularClass: FirRegularClass, data: Nothing?): CompositeTransformResult<FirDeclaration> {
|
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.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
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.resolve.lookupSuperTypes
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||||
import org.jetbrains.kotlin.fir.scopes.addImportingScopes
|
import org.jetbrains.kotlin.fir.scopes.addImportingScopes
|
||||||
@@ -26,8 +27,9 @@ open class FirTypeResolveTransformer : FirAbstractTreeTransformerWithSuperTypes(
|
|||||||
|
|
||||||
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
||||||
session = file.fileSession
|
session = file.fileSession
|
||||||
|
val scopeSession = ScopeSession()
|
||||||
return withScopeCleanup {
|
return withScopeCleanup {
|
||||||
towerScope.addImportingScopes(file, session)
|
towerScope.addImportingScopes(file, session, scopeSession)
|
||||||
super.transformFile(file, data)
|
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.name.Name
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
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(
|
this += listOf(
|
||||||
// from low priority to high priority
|
// from low priority to high priority
|
||||||
FirDefaultStarImportingScope(session, priority = DefaultImportPriority.LOW),
|
FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW),
|
||||||
FirDefaultStarImportingScope(session, priority = DefaultImportPriority.HIGH),
|
FirDefaultStarImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH),
|
||||||
FirExplicitStarImportingScope(file.imports, session),
|
FirExplicitStarImportingScope(file.imports, session, scopeSession),
|
||||||
FirDefaultSimpleImportingScope(session, priority = DefaultImportPriority.LOW),
|
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.LOW),
|
||||||
FirDefaultSimpleImportingScope(session, priority = DefaultImportPriority.HIGH),
|
FirDefaultSimpleImportingScope(session, scopeSession, priority = DefaultImportPriority.HIGH),
|
||||||
FirSelfImportingScope(file.packageFqName, session),
|
FirSelfImportingScope(file.packageFqName, session),
|
||||||
// TODO: explicit simple importing scope should have highest priority (higher than inner scopes added in process)
|
// 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) {
|
fun FirCompositeScope.addImportingScopes(file: FirFile, session: FirSession, scopeSession: ScopeSession) {
|
||||||
scopes.addImportingScopes(file, session)
|
scopes.addImportingScopes(file, session, scopeSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun finalExpansionName(symbol: FirTypeAliasSymbol, session: FirSession): Name? {
|
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.name.Name
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||||
|
|
||||||
abstract class FirAbstractImportingScope(session: FirSession, lookupInFir: Boolean) : FirAbstractProviderBasedScope(session, lookupInFir) {
|
abstract class FirAbstractImportingScope(
|
||||||
|
session: FirSession,
|
||||||
|
protected val scopeSession: ScopeSession,
|
||||||
protected val scopeCache = ScopeSession()
|
lookupInFir: Boolean
|
||||||
|
) : FirAbstractProviderBasedScope(session, lookupInFir) {
|
||||||
|
|
||||||
private fun getStaticsScope(classId: ClassId): FirScope? {
|
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")
|
val symbol = provider.getClassLikeSymbolByFqName(classId) ?: error("No scope/symbol for $classId")
|
||||||
@@ -76,7 +76,7 @@ abstract class FirAbstractImportingScope(session: FirSession, lookupInFir: Boole
|
|||||||
matchedClass,
|
matchedClass,
|
||||||
processor,
|
processor,
|
||||||
session,
|
session,
|
||||||
scopeCache,
|
scopeSession,
|
||||||
name
|
name
|
||||||
).stop()
|
).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.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
|
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.resolve.calls.TowerScopeLevel
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
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.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
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>>
|
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.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
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.resolve.calls.TowerScopeLevel
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
import org.jetbrains.kotlin.fir.scopes.FirPosition
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
@@ -16,8 +17,10 @@ import org.jetbrains.kotlin.name.ClassId
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
|
||||||
abstract class FirAbstractStarImportingScope(
|
abstract class FirAbstractStarImportingScope(
|
||||||
session: FirSession, lookupInFir: Boolean = true
|
session: FirSession,
|
||||||
) : FirAbstractImportingScope(session, lookupInFir) {
|
scopeSession: ScopeSession,
|
||||||
|
lookupInFir: Boolean = true
|
||||||
|
) : FirAbstractImportingScope(session, scopeSession, lookupInFir) {
|
||||||
|
|
||||||
protected abstract val starImports: List<FirResolvedImport>
|
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.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer
|
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) =
|
private fun FirImportImpl.resolve(importResolveTransformer: FirImportResolveTransformer) =
|
||||||
importResolveTransformer.transformImport(this, null).single as FirResolvedImportImpl
|
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.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirImportImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
|
|
||||||
class FirDefaultStarImportingScope(session: FirSession, priority: DefaultImportPriority, lookupInFir: Boolean = false) :
|
class FirDefaultStarImportingScope(
|
||||||
FirAbstractStarImportingScope(session, lookupInFir) {
|
session: FirSession,
|
||||||
|
scopeSession: ScopeSession,
|
||||||
|
priority: DefaultImportPriority,
|
||||||
|
lookupInFir: Boolean = false
|
||||||
|
) : FirAbstractStarImportingScope(session, scopeSession, lookupInFir) {
|
||||||
|
|
||||||
// TODO: put languageVersionSettings into FirSession?
|
// TODO: put languageVersionSettings into FirSession?
|
||||||
override val starImports = run {
|
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.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirImport
|
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedImportImpl
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
|
|
||||||
class FirExplicitSimpleImportingScope(
|
class FirExplicitSimpleImportingScope(
|
||||||
imports: List<FirImport>,
|
imports: List<FirImport>,
|
||||||
session: FirSession
|
session: FirSession,
|
||||||
) : FirAbstractSimpleImportingScope(session) {
|
scopeSession: ScopeSession
|
||||||
|
) : FirAbstractSimpleImportingScope(session, scopeSession) {
|
||||||
|
|
||||||
override val simpleImports =
|
override val simpleImports =
|
||||||
imports.filterIsInstance<FirResolvedImportImpl>()
|
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.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirImport
|
import org.jetbrains.kotlin.fir.declarations.FirImport
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
|
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 }
|
override val starImports = imports.filterIsInstance<FirResolvedImport>().filter { it.isAllUnder }
|
||||||
}
|
}
|
||||||
+2
-1
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
class FirTopLevelDeclaredMemberScope(
|
class FirTopLevelDeclaredMemberScope(
|
||||||
file: FirFile,
|
file: FirFile,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
private val scopeSession: ScopeSession,
|
||||||
lookupInFir: Boolean = true
|
lookupInFir: Boolean = true
|
||||||
) : FirAbstractProviderBasedScope(session, lookupInFir) {
|
) : FirAbstractProviderBasedScope(session, lookupInFir) {
|
||||||
private val packageFqName = file.packageFqName
|
private val packageFqName = file.packageFqName
|
||||||
@@ -32,7 +33,7 @@ class FirTopLevelDeclaredMemberScope(
|
|||||||
matchedClass,
|
matchedClass,
|
||||||
processor,
|
processor,
|
||||||
session,
|
session,
|
||||||
ScopeSession(),
|
scopeSession,
|
||||||
name
|
name
|
||||||
).stop()
|
).stop()
|
||||||
) {
|
) {
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.FirReference
|
|||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
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.resolve.transformers.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirTopLevelDeclaredMemberScope
|
import org.jetbrains.kotlin.fir.scopes.impl.FirTopLevelDeclaredMemberScope
|
||||||
@@ -39,7 +40,7 @@ private fun FirFile.findCallableMember(
|
|||||||
packageFqName: FqName, klassFqName: FqName?, declName: Name
|
packageFqName: FqName, klassFqName: FqName?, declName: Name
|
||||||
): FirCallableDeclaration<*> {
|
): FirCallableDeclaration<*> {
|
||||||
val memberScope =
|
val memberScope =
|
||||||
if (klassFqName == null) FirTopLevelDeclaredMemberScope(this, session)
|
if (klassFqName == null) FirTopLevelDeclaredMemberScope(this, session, ScopeSession())
|
||||||
else provider.getClassDeclaredMemberScope(ClassId(packageFqName, klassFqName, false))!!
|
else provider.getClassDeclaredMemberScope(ClassId(packageFqName, klassFqName, false))!!
|
||||||
var result: FirCallableDeclaration<*>? = null
|
var result: FirCallableDeclaration<*>? = null
|
||||||
val processor = { symbol: FirCallableSymbol<*> ->
|
val processor = { symbol: FirCallableSymbol<*> ->
|
||||||
|
|||||||
Reference in New Issue
Block a user