[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(
|
useSiteScopeDeclarationProvider = CompositeKotlinDeclarationProvider.create(
|
||||||
buildList {
|
buildList {
|
||||||
add(project.createDeclarationProvider(useSiteAnalysisScope))
|
add(project.createDeclarationProvider(useSiteAnalysisScope, useSiteModule))
|
||||||
extensionTools.mapTo(this) { it.declarationProvider }
|
extensionTools.mapTo(this) { it.declarationProvider }
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -182,7 +182,6 @@ private constructor(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun getScopeSessionFor(session: FirSession): ScopeSession = withValidityAssertion { firResolveSession.getScopeSessionFor(session) }
|
fun getScopeSessionFor(session: FirSession): ScopeSession = withValidityAssertion { firResolveSession.getScopeSessionFor(session) }
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
+6
-4
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.providers
|
|||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
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.CallableId
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -47,9 +48,10 @@ public abstract class KotlinDeclarationProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public abstract class KotlinDeclarationProviderFactory {
|
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 =
|
public fun Project.createDeclarationProvider(scope: GlobalSearchScope, module: KtModule?): KotlinDeclarationProvider {
|
||||||
this.getService(KotlinDeclarationProviderFactory::class.java)
|
return getService(KotlinDeclarationProviderFactory::class.java)
|
||||||
.createDeclarationProvider(searchScope)
|
.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.psi.KotlinBuiltInDecompiler
|
||||||
import org.jetbrains.kotlin.analysis.decompiler.stub.file.ClsKotlinBinaryClassCache
|
import org.jetbrains.kotlin.analysis.decompiler.stub.file.ClsKotlinBinaryClassCache
|
||||||
import org.jetbrains.kotlin.analysis.decompiler.stub.file.KotlinClsStubBuilder
|
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.KotlinDeclarationProvider
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProviderFactory
|
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProviderFactory
|
||||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||||
@@ -342,8 +343,8 @@ public class KotlinStaticDeclarationProviderFactory(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createDeclarationProvider(searchScope: GlobalSearchScope): KotlinDeclarationProvider {
|
override fun createDeclarationProvider(scope: GlobalSearchScope, contextualModule: KtModule?): KotlinDeclarationProvider {
|
||||||
return KotlinStaticDeclarationProvider(index, searchScope)
|
return KotlinStaticDeclarationProvider(index, scope)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -88,7 +88,7 @@ internal fun LLFirSourcesSession.registerCompilerPluginServices(
|
|||||||
register(FirRegisteredPluginAnnotations::class, LLFirIdeRegisteredPluginAnnotations(this, annotationsResolver))
|
register(FirRegisteredPluginAnnotations::class, LLFirIdeRegisteredPluginAnnotations(this, annotationsResolver))
|
||||||
register(
|
register(
|
||||||
FirPredicateBasedProvider::class,
|
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 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.caches.NullableCaffeineCache
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData
|
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.low.level.api.fir.util.LLFirSymbolProviderNameCacheBase
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
||||||
@@ -125,10 +126,10 @@ internal class LLFirCombinedKotlinSymbolProvider private constructor(
|
|||||||
symbolNameCache.getTopLevelCallableNamesInPackage(packageFqName)
|
symbolNameCache.getTopLevelCallableNamesInPackage(packageFqName)
|
||||||
|
|
||||||
companion object {
|
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) {
|
if (providers.size > 1) {
|
||||||
val combinedScope = GlobalSearchScope.union(providers.map { it.session.llFirModuleData.ktModule.contentScope })
|
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)
|
LLFirCombinedKotlinSymbolProvider(session, project, providers, declarationProvider)
|
||||||
} else providers.singleOrNull()
|
} else providers.singleOrNull()
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -143,7 +143,7 @@ internal class LLFirSessionCache(private val project: Project) {
|
|||||||
val provider = LLFirProvider(
|
val provider = LLFirProvider(
|
||||||
this,
|
this,
|
||||||
components,
|
components,
|
||||||
project.createDeclarationProvider(contentScope),
|
project.createDeclarationProvider(contentScope, module),
|
||||||
project.createPackageProvider(contentScope),
|
project.createPackageProvider(contentScope),
|
||||||
/* Source modules can contain `kotlin` package only if `-Xallow-kotlin-package` is specified, this is handled in LLFirProvider */
|
/* Source modules can contain `kotlin` package only if `-Xallow-kotlin-package` is specified, this is handled in LLFirProvider */
|
||||||
canContainKotlinPackage = false,
|
canContainKotlinPackage = false,
|
||||||
@@ -230,7 +230,7 @@ internal class LLFirSessionCache(private val project: Project) {
|
|||||||
val provider = LLFirProvider(
|
val provider = LLFirProvider(
|
||||||
this,
|
this,
|
||||||
components,
|
components,
|
||||||
project.createDeclarationProvider(contentScope),
|
project.createDeclarationProvider(contentScope, module),
|
||||||
project.createPackageProvider(contentScope),
|
project.createPackageProvider(contentScope),
|
||||||
canContainKotlinPackage = true,
|
canContainKotlinPackage = true,
|
||||||
)
|
)
|
||||||
@@ -535,7 +535,7 @@ internal class LLFirSessionCache(private val project: Project) {
|
|||||||
* create a combined symbol provider.
|
* create a combined symbol provider.
|
||||||
*/
|
*/
|
||||||
private fun List<FirSymbolProvider>.mergeDependencySymbolProvidersInto(
|
private fun List<FirSymbolProvider>.mergeDependencySymbolProvidersInto(
|
||||||
session: FirSession,
|
session: LLFirSession,
|
||||||
destination: MutableList<FirSymbolProvider>,
|
destination: MutableList<FirSymbolProvider>,
|
||||||
) {
|
) {
|
||||||
SymbolProviderMerger(this, destination).apply {
|
SymbolProviderMerger(this, destination).apply {
|
||||||
|
|||||||
+1
-1
@@ -50,7 +50,7 @@ internal open class JvmStubBasedFirDeserializedSymbolProvider(
|
|||||||
scope: GlobalSearchScope,
|
scope: GlobalSearchScope,
|
||||||
private val initialOrigin: FirDeclarationOrigin
|
private val initialOrigin: FirDeclarationOrigin
|
||||||
) : FirSymbolProvider(session) {
|
) : 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 moduleData = moduleDataProvider.getModuleData(null)
|
||||||
private val packageSetWithTopLevelCallableDeclarations: Set<String> by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
private val packageSetWithTopLevelCallableDeclarations: Set<String> by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
declarationProvider.computePackageSetWithTopLevelCallableDeclarations()
|
declarationProvider.computePackageSetWithTopLevelCallableDeclarations()
|
||||||
|
|||||||
+8
-8
@@ -40,25 +40,25 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase<KtMo
|
|||||||
override fun findClassOrObjectDeclarationsInPackage(
|
override fun findClassOrObjectDeclarationsInPackage(
|
||||||
packageFqName: FqName,
|
packageFqName: FqName,
|
||||||
searchScope: GlobalSearchScope
|
searchScope: GlobalSearchScope
|
||||||
): Collection<KtClassOrObject> = project.createDeclarationProvider(searchScope).run {
|
): Collection<KtClassOrObject> = project.createDeclarationProvider(searchScope, module = null).run {
|
||||||
getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName).flatMap {
|
getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName).flatMap {
|
||||||
getAllClassesByClassId(ClassId.topLevel(packageFqName.child(it)))
|
getAllClassesByClassId(ClassId.topLevel(packageFqName.child(it)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun findFilesForPackage(packageFqName: FqName, searchScope: GlobalSearchScope): Collection<KtFile> = buildSet {
|
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) {
|
findClassOrObjectDeclarationsInPackage(packageFqName, searchScope).mapTo(this) {
|
||||||
it.containingKtFile
|
it.containingKtFile
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun findFilesForFacadeByPackage(packageFqName: FqName, searchScope: GlobalSearchScope): Collection<KtFile> {
|
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> {
|
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> {
|
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> =
|
override fun findClassOrObjectDeclarations(fqName: FqName, searchScope: GlobalSearchScope): Collection<KtClassOrObject> =
|
||||||
fqName.toClassIdSequence().flatMap {
|
fqName.toClassIdSequence().flatMap {
|
||||||
project.createDeclarationProvider(searchScope).getAllClassesByClassId(it)
|
project.createDeclarationProvider(searchScope, module = null).getAllClassesByClassId(it)
|
||||||
}
|
}
|
||||||
.filter { it.isFromSourceOrLibraryBinary(project) }
|
.filter { it.isFromSourceOrLibraryBinary() }
|
||||||
.toSet()
|
.toSet()
|
||||||
|
|
||||||
override fun packageExists(fqName: FqName, scope: GlobalSearchScope): Boolean =
|
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 facadeIsApplicable(module: KtModule, file: KtFile): Boolean = module.isFromSourceOrLibraryBinary()
|
||||||
|
|
||||||
override fun getKotlinInternalClasses(fqName: FqName, scope: GlobalSearchScope): Collection<PsiClass> {
|
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()
|
if (facadeKtFiles.isEmpty()) return emptyList()
|
||||||
|
|
||||||
val partShortName = fqName.shortName().asString()
|
val partShortName = fqName.shortName().asString()
|
||||||
@@ -171,7 +171,7 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase<KtMo
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun findFilesForFacade(facadeFqName: FqName, searchScope: GlobalSearchScope): Collection<KtFile> {
|
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)
|
override fun getFakeLightClass(classOrObject: KtClassOrObject): KtFakeLightClass = SymbolBasedFakeLightClass(classOrObject)
|
||||||
|
|||||||
Reference in New Issue
Block a user