[LL API] Replace 'FirScript.containingFileSymbol' with 'FirProvider' API

This commit is contained in:
Yan Zhulanow
2023-01-31 16:50:25 +09:00
committed by Space Team
parent f352f7d5ba
commit e8570826e6
12 changed files with 26 additions and 12 deletions
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -22,6 +23,7 @@ internal class LLFirBuiltinsAndCloneableSessionProvider(override val symbolProvi
override fun getFirClassifierContainerFileIfAny(fqName: ClassId): FirFile? = null
override fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile? = null
override fun getFirScriptContainerFile(symbol: FirScriptSymbol): FirFile? = null
override fun getFirFilesByPackage(fqName: FqName): List<FirFile> = emptyList()
override fun getClassNamesInPackage(fqName: FqName): Set<Name> = shouldNotBeCalled()
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -27,6 +28,7 @@ internal class LLFirLibrarySessionProvider(
override fun getFirClassifierContainerFileIfAny(fqName: ClassId): FirFile? = null
override fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile? = null
override fun getFirScriptContainerFile(symbol: FirScriptSymbol): FirFile? = null
override fun getFirFilesByPackage(fqName: FqName): List<FirFile> = emptyList()
override fun getClassNamesInPackage(fqName: FqName): Set<Name> = shouldNotBeCalled()
@@ -92,6 +92,10 @@ internal class LLFirProvider(
}
}
override fun getFirScriptContainerFile(symbol: FirScriptSymbol): FirFile? {
return moduleComponents.cache.getContainerFirFile(symbol.fir)
}
override fun getFirFilesByPackage(fqName: FqName): List<FirFile> = error("Should not be called in FIR IDE")
@@ -17,7 +17,7 @@ fun FirElementWithResolvePhase.getContainingFile(): FirFile? {
val provider = moduleData.session.firProvider
return when (this) {
is FirFile -> this
is FirScript -> containingFileSymbol.fir
is FirScript -> provider.getFirScriptContainerFile(symbol)
is FirFileAnnotationsContainer -> containingFileSymbol.fir
is FirTypeParameter -> containingDeclarationSymbol.fir.getContainingFile()
is FirPropertyAccessor -> propertySymbol.fir.getContainingFile()
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -39,6 +40,8 @@ abstract class FirProvider : FirSessionComponent {
abstract fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile?
abstract fun getFirScriptContainerFile(symbol: FirScriptSymbol): FirFile?
abstract fun getFirFilesByPackage(fqName: FqName): List<FirFile>
abstract fun getClassNamesInPackage(fqName: FqName): Set<Name>
@@ -1079,7 +1079,6 @@ open class RawFirBuilder(
origin = FirDeclarationOrigin.Source
name = Name.special("<script-${containingFile.name}>")
symbol = FirScriptSymbol(context.packageFqName.child(name))
containingFileSymbol = containingFile.symbol
for (declaration in script.declarations) {
when (declaration) {
is KtScriptInitializer -> {
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.resolve.providers.FirProvider
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -24,6 +25,7 @@ class FirLibrarySessionProvider(
override fun getFirClassifierContainerFileIfAny(fqName: ClassId): FirFile? = null
override fun getFirCallableContainerFile(symbol: FirCallableSymbol<*>): FirFile? = null
override fun getFirScriptContainerFile(symbol: FirScriptSymbol): FirFile? = null
override fun getFirFilesByPackage(fqName: FqName): List<FirFile> = emptyList()
override fun getClassNamesInPackage(fqName: FqName): Set<Name> = shouldNotBeCalled()
@@ -38,6 +38,10 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
return state.callableContainerMap[symbol]
}
override fun getFirScriptContainerFile(symbol: FirScriptSymbol): FirFile? {
return state.scriptContainerMap[symbol]
}
override fun getFirClassifierContainerFile(fqName: ClassId): FirFile {
return state.classifierContainerFileMap[fqName] ?: error("Couldn't find container for $fqName")
}
@@ -184,6 +188,11 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
val symbol = enumEntry.symbol
data.state.callableContainerMap[symbol] = data.file
}
override fun visitScript(script: FirScript, data: FirRecorderData) {
val symbol = script.symbol
data.state.scriptContainerMap[symbol] = data.file
}
}
private val state = State()
@@ -199,6 +208,7 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
val propertyMap = mutableMapOf<CallableId, List<FirPropertySymbol>>()
val constructorMap = mutableMapOf<CallableId, List<FirConstructorSymbol>>()
val callableContainerMap = mutableMapOf<FirCallableSymbol<*>, FirFile>()
val scriptContainerMap = mutableMapOf<FirScriptSymbol, FirFile>()
fun setFrom(other: State) {
fileMap.clear()
@@ -209,6 +219,7 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
propertyMap.clear()
constructorMap.clear()
callableContainerMap.clear()
scriptContainerMap.clear()
fileMap.putAll(other.fileMap)
allSubPackages.addAll(other.allSubPackages)
@@ -218,6 +229,7 @@ class FirProviderImpl(val session: FirSession, val kotlinScopeProvider: FirKotli
propertyMap.putAll(other.propertyMap)
constructorMap.putAll(other.constructorMap)
callableContainerMap.putAll(other.callableContainerMap)
scriptContainerMap.putAll(other.scriptContainerMap)
classesInPackage.putAll(other.classesInPackage)
classifierInPackage.putAll(other.classifierInPackage)
}
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -30,7 +29,6 @@ abstract class FirScript : FirDeclaration() {
abstract val name: Name
abstract val statements: List<FirStatement>
abstract override val symbol: FirScriptSymbol
abstract val containingFileSymbol: FirFileSymbol
abstract val parameters: List<FirVariable>
abstract val contextReceivers: List<FirContextReceiver>
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.declarations.impl.FirScriptImpl
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.Name
@@ -43,7 +42,6 @@ class FirScriptBuilder : FirAnnotationContainerBuilder {
lateinit var name: Name
val statements: MutableList<FirStatement> = mutableListOf()
lateinit var symbol: FirScriptSymbol
lateinit var containingFileSymbol: FirFileSymbol
val parameters: MutableList<FirVariable> = mutableListOf()
val contextReceivers: MutableList<FirContextReceiver> = mutableListOf()
@@ -58,7 +56,6 @@ class FirScriptBuilder : FirAnnotationContainerBuilder {
name,
statements,
symbol,
containingFileSymbol,
parameters,
contextReceivers.toMutableOrEmpty(),
)
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.declarations.FirScript
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.symbols.impl.FirFileSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
@@ -40,7 +39,6 @@ internal class FirScriptImpl(
override val name: Name,
override val statements: MutableList<FirStatement>,
override val symbol: FirScriptSymbol,
override val containingFileSymbol: FirFileSymbol,
override val parameters: MutableList<FirVariable>,
override var contextReceivers: MutableOrEmptyList<FirContextReceiver>,
) : FirScript() {
@@ -475,9 +475,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+name
+fieldList(statement).withTransform()
+symbol("FirScriptSymbol")
+field("containingFileSymbol", type("fir.symbols.impl", "FirFileSymbol"), argument = null).apply {
withBindThis = false
}
+FieldList("parameters", variable, withReplace = false)
+fieldList(contextReceiver, useMutableOrEmpty = true)
}