diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirBuiltinsAndCloneableSessionProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirBuiltinsAndCloneableSessionProvider.kt index c81dcdefaec..53bc8ac57ba 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirBuiltinsAndCloneableSessionProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirBuiltinsAndCloneableSessionProvider.kt @@ -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 = emptyList() override fun getClassNamesInPackage(fqName: FqName): Set = shouldNotBeCalled() diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirLibrarySessionProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirLibrarySessionProvider.kt index a16f1e18b3c..e90fd0e1269 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirLibrarySessionProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirLibrarySessionProvider.kt @@ -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 = emptyList() override fun getClassNamesInPackage(fqName: FqName): Set = shouldNotBeCalled() diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProvider.kt index 8bb6b3ae8ff..22e9f3ab421 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProvider.kt @@ -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 = error("Should not be called in FIR IDE") diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/contrainingFileUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/contrainingFileUtils.kt index 425bb322bd8..d99965daefc 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/contrainingFileUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/contrainingFileUtils.kt @@ -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() diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt index a51c7e11928..efb04b1b545 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/providers/FirProvider.kt @@ -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 abstract fun getClassNamesInPackage(fqName: FqName): Set diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 5c98ca8114f..1a8bb91c8f4 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1079,7 +1079,6 @@ open class RawFirBuilder( origin = FirDeclarationOrigin.Source name = Name.special("") symbol = FirScriptSymbol(context.packageFqName.child(name)) - containingFileSymbol = containingFile.symbol for (declaration in script.declarations) { when (declaration) { is KtScriptInitializer -> { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirLibrarySessionProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirLibrarySessionProvider.kt index 8463f894bc2..1a87cc12a2e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirLibrarySessionProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirLibrarySessionProvider.kt @@ -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 = emptyList() override fun getClassNamesInPackage(fqName: FqName): Set = shouldNotBeCalled() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt index f91b57a4708..a0495997b3b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirProviderImpl.kt @@ -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>() val constructorMap = mutableMapOf>() val callableContainerMap = mutableMapOf, FirFile>() + val scriptContainerMap = mutableMapOf() 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) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirScript.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirScript.kt index 2175648624e..e6cb4211e72 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirScript.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/FirScript.kt @@ -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 abstract override val symbol: FirScriptSymbol - abstract val containingFileSymbol: FirFileSymbol abstract val parameters: List abstract val contextReceivers: List diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirScriptBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirScriptBuilder.kt index a8a99b68963..4440698eb26 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirScriptBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirScriptBuilder.kt @@ -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 = mutableListOf() lateinit var symbol: FirScriptSymbol - lateinit var containingFileSymbol: FirFileSymbol val parameters: MutableList = mutableListOf() val contextReceivers: MutableList = mutableListOf() @@ -58,7 +56,6 @@ class FirScriptBuilder : FirAnnotationContainerBuilder { name, statements, symbol, - containingFileSymbol, parameters, contextReceivers.toMutableOrEmpty(), ) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirScriptImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirScriptImpl.kt index 742766ed825..80f4f414063 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirScriptImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirScriptImpl.kt @@ -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, override val symbol: FirScriptSymbol, - override val containingFileSymbol: FirFileSymbol, override val parameters: MutableList, override var contextReceivers: MutableOrEmptyList, ) : FirScript() { diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index f0ac3cfe25d..ddcdb7af929 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -475,9 +475,6 @@ object NodeConfigurator : AbstractFieldConfigurator(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) }