diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt index 0e68b773a0a..f68673f50cf 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/KtFirAnalysisSession.kt @@ -169,7 +169,7 @@ private constructor( } useSiteScopeDeclarationProvider = CompositeKotlinDeclarationProvider.create( buildList { - add(project.createDeclarationProvider(useSiteAnalysisScope)) + add(project.createDeclarationProvider(useSiteAnalysisScope, useSiteModule)) extensionTools.mapTo(this) { it.declarationProvider } } ) @@ -182,7 +182,6 @@ private constructor( ) } - fun getScopeSessionFor(session: FirSession): ScopeSession = withValidityAssertion { firResolveSession.getScopeSessionFor(session) } companion object { 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 86e82a62dd8..ce54e73d44b 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 @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.providers import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName @@ -47,9 +48,10 @@ public abstract class KotlinDeclarationProvider { } public abstract class KotlinDeclarationProviderFactory { - public abstract fun createDeclarationProvider(searchScope: GlobalSearchScope): KotlinDeclarationProvider + public abstract fun createDeclarationProvider(scope: GlobalSearchScope, contextualModule: KtModule?): KotlinDeclarationProvider } -public fun Project.createDeclarationProvider(searchScope: GlobalSearchScope): KotlinDeclarationProvider = - this.getService(KotlinDeclarationProviderFactory::class.java) - .createDeclarationProvider(searchScope) \ No newline at end of file +public fun Project.createDeclarationProvider(scope: GlobalSearchScope, module: KtModule?): KotlinDeclarationProvider { + return getService(KotlinDeclarationProviderFactory::class.java) + .createDeclarationProvider(scope, module) +} \ No newline at end of file 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 3e1010b7dd7..315d07058e8 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 @@ -25,6 +25,7 @@ import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.analysis.decompiler.psi.KotlinBuiltInDecompiler import org.jetbrains.kotlin.analysis.decompiler.stub.file.ClsKotlinBinaryClassCache import org.jetbrains.kotlin.analysis.decompiler.stub.file.KotlinClsStubBuilder +import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProviderFactory import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName @@ -342,8 +343,8 @@ public class KotlinStaticDeclarationProviderFactory( } } - override fun createDeclarationProvider(searchScope: GlobalSearchScope): KotlinDeclarationProvider { - return KotlinStaticDeclarationProvider(index, searchScope) + override fun createDeclarationProvider(scope: GlobalSearchScope, contextualModule: KtModule?): KotlinDeclarationProvider { + return KotlinStaticDeclarationProvider(index, scope) } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt index e3c4f978724..5889958932f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/sessionFactoryHelpers.kt @@ -88,7 +88,7 @@ internal fun LLFirSourcesSession.registerCompilerPluginServices( register(FirRegisteredPluginAnnotations::class, LLFirIdeRegisteredPluginAnnotations(this, annotationsResolver)) register( FirPredicateBasedProvider::class, - LLFirIdePredicateBasedProvider(this, annotationsResolver, project.createDeclarationProvider(projectWithDependenciesScope)) + LLFirIdePredicateBasedProvider(this, annotationsResolver, project.createDeclarationProvider(projectWithDependenciesScope, module)) ) } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirCombinedKotlinSymbolProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirCombinedKotlinSymbolProvider.kt index 1e4ed94d87d..987c98aeb23 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirCombinedKotlinSymbolProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/providers/LLFirCombinedKotlinSymbolProvider.kt @@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analysis.low.level.api.fir.caches.NullableCaffeineCache import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData +import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirSymbolProviderNameCacheBase import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider @@ -125,10 +126,10 @@ internal class LLFirCombinedKotlinSymbolProvider private constructor( symbolNameCache.getTopLevelCallableNamesInPackage(packageFqName) companion object { - fun merge(session: FirSession, project: Project, providers: List): FirSymbolProvider? = + fun merge(session: LLFirSession, project: Project, providers: List): FirSymbolProvider? = if (providers.size > 1) { val combinedScope = GlobalSearchScope.union(providers.map { it.session.llFirModuleData.ktModule.contentScope }) - val declarationProvider = project.createDeclarationProvider(combinedScope) + val declarationProvider = project.createDeclarationProvider(combinedScope, session.ktModule) LLFirCombinedKotlinSymbolProvider(session, project, providers, declarationProvider) } else providers.singleOrNull() } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt index 6d24a4a8e87..ad13cef84e9 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt @@ -143,7 +143,7 @@ internal class LLFirSessionCache(private val project: Project) { val provider = LLFirProvider( this, components, - project.createDeclarationProvider(contentScope), + project.createDeclarationProvider(contentScope, module), project.createPackageProvider(contentScope), /* Source modules can contain `kotlin` package only if `-Xallow-kotlin-package` is specified, this is handled in LLFirProvider */ canContainKotlinPackage = false, @@ -230,7 +230,7 @@ internal class LLFirSessionCache(private val project: Project) { val provider = LLFirProvider( this, components, - project.createDeclarationProvider(contentScope), + project.createDeclarationProvider(contentScope, module), project.createPackageProvider(contentScope), canContainKotlinPackage = true, ) @@ -535,7 +535,7 @@ internal class LLFirSessionCache(private val project: Project) { * create a combined symbol provider. */ private fun List.mergeDependencySymbolProvidersInto( - session: FirSession, + session: LLFirSession, destination: MutableList, ) { SymbolProviderMerger(this, destination).apply { diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt index 49aec125c50..ea5d5d8afa3 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedFirDeserializedSymbolProvider.kt @@ -50,7 +50,7 @@ internal open class JvmStubBasedFirDeserializedSymbolProvider( scope: GlobalSearchScope, private val initialOrigin: FirDeclarationOrigin ) : FirSymbolProvider(session) { - private val declarationProvider by lazy(LazyThreadSafetyMode.PUBLICATION) { project.createDeclarationProvider(scope) } + private val declarationProvider by lazy(LazyThreadSafetyMode.PUBLICATION) { project.createDeclarationProvider(scope, module = null) } private val moduleData = moduleDataProvider.getModuleData(null) private val packageSetWithTopLevelCallableDeclarations: Set by lazy(LazyThreadSafetyMode.PUBLICATION) { declarationProvider.computePackageSetWithTopLevelCallableDeclarations() 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 f3e81d9d3e8..acafe39a22d 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 @@ -40,25 +40,25 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase = project.createDeclarationProvider(searchScope).run { + ): Collection = project.createDeclarationProvider(searchScope, module = null).run { getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName).flatMap { getAllClassesByClassId(ClassId.topLevel(packageFqName.child(it))) } } override fun findFilesForPackage(packageFqName: FqName, searchScope: GlobalSearchScope): Collection = buildSet { - addAll(project.createDeclarationProvider(searchScope).findFilesForFacadeByPackage(packageFqName)) + addAll(project.createDeclarationProvider(searchScope, module = null).findFilesForFacadeByPackage(packageFqName)) findClassOrObjectDeclarationsInPackage(packageFqName, searchScope).mapTo(this) { it.containingKtFile } } override fun findFilesForFacadeByPackage(packageFqName: FqName, searchScope: GlobalSearchScope): Collection { - return project.createDeclarationProvider(searchScope).findFilesForFacadeByPackage(packageFqName) + return project.createDeclarationProvider(searchScope, module = null).findFilesForFacadeByPackage(packageFqName) } override fun findFilesForScript(scriptFqName: FqName, searchScope: GlobalSearchScope): Collection { - return project.createDeclarationProvider(searchScope).findFilesForScript(scriptFqName) + return project.createDeclarationProvider(searchScope, module = null).findFilesForScript(scriptFqName) } private fun FqName.toClassIdSequence(): Sequence { @@ -80,9 +80,9 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase = fqName.toClassIdSequence().flatMap { - project.createDeclarationProvider(searchScope).getAllClassesByClassId(it) + project.createDeclarationProvider(searchScope, module = null).getAllClassesByClassId(it) } - .filter { it.isFromSourceOrLibraryBinary(project) } + .filter { it.isFromSourceOrLibraryBinary() } .toSet() override fun packageExists(fqName: FqName, scope: GlobalSearchScope): Boolean = @@ -146,7 +146,7 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase { - val facadeKtFiles = project.createDeclarationProvider(scope).findInternalFilesForFacade(fqName) + val facadeKtFiles = project.createDeclarationProvider(scope, null).findInternalFilesForFacade(fqName) if (facadeKtFiles.isEmpty()) return emptyList() val partShortName = fqName.shortName().asString() @@ -171,7 +171,7 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase { - return project.createDeclarationProvider(searchScope).findFilesForFacade(facadeFqName) + return project.createDeclarationProvider(searchScope, module = null).findFilesForFacade(facadeFqName) } override fun getFakeLightClass(classOrObject: KtClassOrObject): KtFakeLightClass = SymbolBasedFakeLightClass(classOrObject)