diff --git a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinDeclarationProvider.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinDeclarationProvider.kt index f08b33f5d01..feb8a02c6fc 100644 --- a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinDeclarationProvider.kt +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/KotlinDeclarationProvider.kt @@ -29,6 +29,8 @@ public abstract class KotlinDeclarationProvider { public abstract fun getTopLevelProperties(callableId: CallableId): Collection public abstract fun getTopLevelFunctions(callableId: CallableId): Collection + public abstract fun getTopLevelCallableFiles(callableId: CallableId): Collection + public abstract fun getTopLevelCallableNamesInPackage(packageFqName: FqName): Set public abstract fun findFilesForFacadeByPackage(packageFqName: FqName): Collection diff --git a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt index 32fee2e3cd5..263e7f01341 100644 --- a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/KotlinStaticDeclarationProvider.kt @@ -97,6 +97,11 @@ public class KotlinStaticDeclarationProvider internal constructor( } ?: emptyList() + override fun getTopLevelCallableFiles(callableId: CallableId): Collection = buildSet { + getTopLevelProperties(callableId).mapTo(this) { it.containingKtFile } + getTopLevelFunctions(callableId).mapTo(this) { it.containingKtFile } + } + } public class KotlinStaticDeclarationProviderFactory( diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirNonUnderContentRootSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirNonUnderContentRootSessionFactory.kt index 26e6be5e0f9..6933dbdec41 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirNonUnderContentRootSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/LLFirNonUnderContentRootSessionFactory.kt @@ -74,7 +74,7 @@ internal class LLFirNonUnderContentRootSessionFactory(private val project: Proje components, project.createDeclarationProvider(contentScope), project.createPackageProvider(contentScope), - cabContainKotlinPackage = true, + canContainKotlinPackage = true, ) register(FirProvider::class, provider) 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 f7b2b8e0eca..5f0b04bc759 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 @@ -29,7 +29,7 @@ internal class LLFirProvider( private val moduleComponents: LLFirModuleResolveComponents, private val declarationProvider: KotlinDeclarationProvider, packageProvider: KotlinPackageProvider, - cabContainKotlinPackage: Boolean, + canContainKotlinPackage: Boolean, ) : FirProvider() { override val symbolProvider: FirSymbolProvider = SymbolProvider() @@ -38,7 +38,7 @@ internal class LLFirProvider( moduleComponents.firFileBuilder, declarationProvider, packageProvider, - cabContainKotlinPackage, + canContainKotlinPackage, ) override val isPhasedFirAllowed: Boolean get() = true diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProviderHelper.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProviderHelper.kt index 6f9f9e9215c..630c49812cf 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProviderHelper.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirProviderHelper.kt @@ -52,10 +52,7 @@ internal class LLFirProviderHelper( private val callablesByCallableId = firSession.firCachesFactory.createCache>> { callableId -> - val files = Sets.newIdentityHashSet().apply { - declarationProvider.getTopLevelFunctions(callableId).mapTo(this) { it.containingKtFile } - declarationProvider.getTopLevelProperties(callableId).mapTo(this) { it.containingKtFile } - } + val files = declarationProvider.getTopLevelCallableFiles(callableId).ifEmpty { return@createCache emptyList() } buildList { files.forEach { ktFile -> val firFile = firFileBuilder.buildRawFirFileWithCaching(ktFile) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt index 89761ce4495..84be618660b 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt @@ -98,7 +98,8 @@ internal object LLFirSessionFactory { components, project.createDeclarationProvider(contentScope), project.createPackageProvider(contentScope), - cabContainKotlinPackage = true, + /* Source modules can contain `kotlin` package only if `-Xallow-kotlin-package` is specified, this is handled in LLFirProvider */ + canContainKotlinPackage = false, ) register(FirProvider::class, provider) @@ -203,7 +204,7 @@ internal object LLFirSessionFactory { components, project.createDeclarationProvider(contentScope), project.createPackageProvider(contentScope), - cabContainKotlinPackage = true, + canContainKotlinPackage = true, ) register(FirProvider::class, provider)