[LL API] Pass contextual modules to 'KotlinDeclarationProvider' factory
^KT-57559 Fixed
This commit is contained in:
+1
-2
@@ -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 {
|
||||
|
||||
+6
-4
@@ -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)
|
||||
public fun Project.createDeclarationProvider(scope: GlobalSearchScope, module: KtModule?): KotlinDeclarationProvider {
|
||||
return getService(KotlinDeclarationProviderFactory::class.java)
|
||||
.createDeclarationProvider(scope, module)
|
||||
}
|
||||
+3
-2
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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))
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
+3
-2
@@ -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<LLFirProvider.SymbolProvider>): FirSymbolProvider? =
|
||||
fun merge(session: LLFirSession, project: Project, providers: List<LLFirProvider.SymbolProvider>): 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()
|
||||
}
|
||||
|
||||
+3
-3
@@ -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<FirSymbolProvider>.mergeDependencySymbolProvidersInto(
|
||||
session: FirSession,
|
||||
session: LLFirSession,
|
||||
destination: MutableList<FirSymbolProvider>,
|
||||
) {
|
||||
SymbolProviderMerger(this, destination).apply {
|
||||
|
||||
+1
-1
@@ -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<String> by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||
declarationProvider.computePackageSetWithTopLevelCallableDeclarations()
|
||||
|
||||
+8
-8
@@ -40,25 +40,25 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase<KtMo
|
||||
override fun findClassOrObjectDeclarationsInPackage(
|
||||
packageFqName: FqName,
|
||||
searchScope: GlobalSearchScope
|
||||
): Collection<KtClassOrObject> = project.createDeclarationProvider(searchScope).run {
|
||||
): Collection<KtClassOrObject> = project.createDeclarationProvider(searchScope, module = null).run {
|
||||
getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName).flatMap {
|
||||
getAllClassesByClassId(ClassId.topLevel(packageFqName.child(it)))
|
||||
}
|
||||
}
|
||||
|
||||
override fun findFilesForPackage(packageFqName: FqName, searchScope: GlobalSearchScope): Collection<KtFile> = 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<KtFile> {
|
||||
return project.createDeclarationProvider(searchScope).findFilesForFacadeByPackage(packageFqName)
|
||||
return project.createDeclarationProvider(searchScope, module = null).findFilesForFacadeByPackage(packageFqName)
|
||||
}
|
||||
|
||||
override fun findFilesForScript(scriptFqName: FqName, searchScope: GlobalSearchScope): Collection<KtScript> {
|
||||
return project.createDeclarationProvider(searchScope).findFilesForScript(scriptFqName)
|
||||
return project.createDeclarationProvider(searchScope, module = null).findFilesForScript(scriptFqName)
|
||||
}
|
||||
|
||||
private fun FqName.toClassIdSequence(): Sequence<ClassId> {
|
||||
@@ -80,9 +80,9 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase<KtMo
|
||||
|
||||
override fun findClassOrObjectDeclarations(fqName: FqName, searchScope: GlobalSearchScope): Collection<KtClassOrObject> =
|
||||
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<KtMo
|
||||
override fun facadeIsApplicable(module: KtModule, file: KtFile): Boolean = module.isFromSourceOrLibraryBinary()
|
||||
|
||||
override fun getKotlinInternalClasses(fqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> {
|
||||
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<KtMo
|
||||
}
|
||||
|
||||
override fun findFilesForFacade(facadeFqName: FqName, searchScope: GlobalSearchScope): Collection<KtFile> {
|
||||
return project.createDeclarationProvider(searchScope).findFilesForFacade(facadeFqName)
|
||||
return project.createDeclarationProvider(searchScope, module = null).findFilesForFacade(facadeFqName)
|
||||
}
|
||||
|
||||
override fun getFakeLightClass(classOrObject: KtClassOrObject): KtFakeLightClass = SymbolBasedFakeLightClass(classOrObject)
|
||||
|
||||
Reference in New Issue
Block a user