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 29c4b2d1fea..a838d315ac2 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 @@ -45,7 +45,12 @@ public abstract class KotlinDeclarationProvider : KotlinComposableProvider { public abstract fun findFilesForScript(scriptFqName: FqName): Collection - public abstract fun computePackageSetWithTopLevelCallableDeclarations(): Set + /** + * Calculates the set of package names which can be provided by this declaration provider and contain callables. + * + * The set may contain false positives. `null` may be returned if the package set is too expensive or impossible to compute. + */ + public abstract fun computePackageSetWithTopLevelCallableDeclarations(): Set? } public abstract class KotlinDeclarationProviderFactory { diff --git a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/declarationProviders/CompositeKotlinDeclarationProvider.kt b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/declarationProviders/CompositeKotlinDeclarationProvider.kt index de023ba7773..af3318e848e 100644 --- a/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/declarationProviders/CompositeKotlinDeclarationProvider.kt +++ b/analysis/analysis-api-providers/src/org/jetbrains/kotlin/analysis/providers/impl/declarationProviders/CompositeKotlinDeclarationProvider.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.utils.flatMapToNullableSet public class CompositeKotlinDeclarationProvider private constructor( override val providers: List @@ -65,8 +66,8 @@ public class CompositeKotlinDeclarationProvider private constructor( return providers.flatMapTo(mutableListOf()) { it.findFilesForScript(scriptFqName) } } - override fun computePackageSetWithTopLevelCallableDeclarations(): Set { - return providers.flatMapTo(mutableSetOf()) { it.computePackageSetWithTopLevelCallableDeclarations() } + override fun computePackageSetWithTopLevelCallableDeclarations(): Set? { + return providers.flatMapToNullableSet { it.computePackageSetWithTopLevelCallableDeclarations() } } public companion object { 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 a60dac80e30..852f3a79a1b 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 @@ -102,10 +102,7 @@ internal class LLFirProviderHelper( val symbolNameCache = FirCompositeCachedSymbolNamesProvider.create( firSession, listOfNotNull( - object : LLFirKotlinSymbolNamesProvider(declarationProvider, allowKotlinPackage) { - // This is a temporary workaround for KTIJ-25536. - override fun getPackageNamesWithTopLevelCallables(): Set? = null - }, + LLFirKotlinSymbolNamesProvider(declarationProvider, allowKotlinPackage), extensionTool?.symbolNamesProvider, ) ) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/LLFirKotlinSymbolNamesProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/LLFirKotlinSymbolNamesProvider.kt index 1d128061b3e..50f11ba928f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/LLFirKotlinSymbolNamesProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/LLFirKotlinSymbolNamesProvider.kt @@ -31,7 +31,7 @@ internal open class LLFirKotlinSymbolNamesProvider( } override fun getPackageNamesWithTopLevelCallables(): Set? { - val packageNames = declarationProvider.computePackageSetWithTopLevelCallableDeclarations() + val packageNames = declarationProvider.computePackageSetWithTopLevelCallableDeclarations() ?: return null if (allowKotlinPackage == false && packageNames.any { it.isKotlinPackage() }) { return packageNames.filterToSetOrEmpty { !it.isKotlinPackage() }