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 8fd660dc5f8..16dcd8f8928 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 @@ -74,8 +74,16 @@ public abstract class KotlinDeclarationProviderMerger : KotlinComposableProvider } } -public fun Project.createDeclarationProvider(scope: GlobalSearchScope, module: KtModule?): KotlinDeclarationProvider = - KotlinDeclarationProviderFactory.getInstance(this).createDeclarationProvider(scope, module) +/** + * Creates a [KotlinDeclarationProvider] providing symbols within the given [scope] in the context of the given [contextualModule]. + * + * The contextual module is the [KtModule] + * + * TODO (marco): Document that `contextualModule` may also be used as a base for calculating the "package name set", in addition to outsider + * module stuff. (Not sure how deep into detail we should go here, since it's an implementation detail.) + */ +public fun Project.createDeclarationProvider(scope: GlobalSearchScope, contextualModule: KtModule?): KotlinDeclarationProvider = + KotlinDeclarationProviderFactory.getInstance(this).createDeclarationProvider(scope, contextualModule) public fun Project.mergeDeclarationProviders(declarationProviders: List): KotlinDeclarationProvider = KotlinDeclarationProviderMerger.getInstance(this).merge(declarationProviders) 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 f8efbfa2c57..f6642490ffc 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 @@ -378,7 +378,7 @@ public class KotlinStaticDeclarationProviderMerger(private val project: Project) override fun merge(providers: List): KotlinDeclarationProvider = providers.mergeSpecificProviders<_, KotlinStaticDeclarationProvider>(CompositeKotlinDeclarationProvider.factory) { targetProviders -> val combinedScope = GlobalSearchScope.union(targetProviders.map { it.scope }) - project.createDeclarationProvider(combinedScope, module = null).apply { + project.createDeclarationProvider(combinedScope, contextualModule = null).apply { check(this is KotlinStaticDeclarationProvider) { "`KotlinStaticDeclarationProvider` can only be merged into a combined declaration provider of the same type." } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/SymbolKotlinAsJavaSupport.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/SymbolKotlinAsJavaSupport.kt index d36125ed1dd..8a6fc302c9a 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/SymbolKotlinAsJavaSupport.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/SymbolKotlinAsJavaSupport.kt @@ -47,25 +47,25 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase = project.createDeclarationProvider(searchScope, module = null).run { + ): Collection = project.createDeclarationProvider(searchScope, contextualModule = null).run { getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName).flatMap { getAllClassesByClassId(ClassId.topLevel(packageFqName.child(it))) } } override fun findFilesForPackage(packageFqName: FqName, searchScope: GlobalSearchScope): Collection = buildSet { - addAll(project.createDeclarationProvider(searchScope, module = null).findFilesForFacadeByPackage(packageFqName)) + addAll(project.createDeclarationProvider(searchScope, contextualModule = null).findFilesForFacadeByPackage(packageFqName)) findClassOrObjectDeclarationsInPackage(packageFqName, searchScope).mapTo(this) { it.containingKtFile } } override fun findFilesForFacadeByPackage(packageFqName: FqName, searchScope: GlobalSearchScope): Collection { - return project.createDeclarationProvider(searchScope, module = null).findFilesForFacadeByPackage(packageFqName) + return project.createDeclarationProvider(searchScope, contextualModule = null).findFilesForFacadeByPackage(packageFqName) } override fun findFilesForScript(scriptFqName: FqName, searchScope: GlobalSearchScope): Collection { - return project.createDeclarationProvider(searchScope, module = null).findFilesForScript(scriptFqName) + return project.createDeclarationProvider(searchScope, contextualModule = null).findFilesForScript(scriptFqName) } private fun FqName.toClassIdSequence(): Sequence { @@ -87,7 +87,7 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase = fqName.toClassIdSequence().flatMap { - project.createDeclarationProvider(searchScope, module = null).getAllClassesByClassId(it) + project.createDeclarationProvider(searchScope, contextualModule = null).getAllClassesByClassId(it) } .filter { it.isFromSourceOrLibraryBinary() } .toSet() @@ -175,7 +175,7 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase { - return project.createDeclarationProvider(searchScope, module = null).findFilesForFacade(facadeFqName) + return project.createDeclarationProvider(searchScope, contextualModule = null).findFilesForFacade(facadeFqName) } override fun getFakeLightClass(classOrObject: KtClassOrObject): KtFakeLightClass = SymbolBasedFakeLightClass(classOrObject)