[LL] Use package provider to check for existing package
KT-59793
This commit is contained in:
committed by
teamcity
parent
7884b5fecf
commit
ef6375f627
+13
-7
@@ -78,21 +78,27 @@ object AnalysisApiBaseTestServiceRegistrar: AnalysisApiTestServiceRegistrar() {
|
|||||||
registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(allKtFiles))
|
registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(allKtFiles))
|
||||||
|
|
||||||
val filter = BuiltInDefinitionFile.FILTER_OUT_CLASSES_EXISTING_AS_JVM_CLASS_FILES
|
val filter = BuiltInDefinitionFile.FILTER_OUT_CLASSES_EXISTING_AS_JVM_CLASS_FILES
|
||||||
|
val ktFilesForBinaries: List<KtFile>
|
||||||
try {
|
try {
|
||||||
BuiltInDefinitionFile.FILTER_OUT_CLASSES_EXISTING_AS_JVM_CLASS_FILES = false
|
BuiltInDefinitionFile.FILTER_OUT_CLASSES_EXISTING_AS_JVM_CLASS_FILES = false
|
||||||
|
val declarationProviderFactory = KotlinStaticDeclarationProviderFactory(
|
||||||
|
project,
|
||||||
|
allKtFiles,
|
||||||
|
additionalRoots = roots,
|
||||||
|
skipBuiltins = testServices.moduleStructure.allDirectives.contains(NO_RUNTIME),
|
||||||
|
)
|
||||||
|
ktFilesForBinaries = declarationProviderFactory.getAdditionalCreatedKtFiles()
|
||||||
registerService(
|
registerService(
|
||||||
KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(
|
KotlinDeclarationProviderFactory::class.java, declarationProviderFactory
|
||||||
project,
|
|
||||||
allKtFiles,
|
|
||||||
additionalRoots = roots,
|
|
||||||
skipBuiltins = testServices.moduleStructure.allDirectives.contains(NO_RUNTIME),
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
} finally {
|
} finally {
|
||||||
BuiltInDefinitionFile.FILTER_OUT_CLASSES_EXISTING_AS_JVM_CLASS_FILES = filter
|
BuiltInDefinitionFile.FILTER_OUT_CLASSES_EXISTING_AS_JVM_CLASS_FILES = filter
|
||||||
}
|
}
|
||||||
registerService(KotlinDeclarationProviderMerger::class.java, KotlinStaticDeclarationProviderMerger(project))
|
registerService(KotlinDeclarationProviderMerger::class.java, KotlinStaticDeclarationProviderMerger(project))
|
||||||
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(project, allKtFiles))
|
registerService(
|
||||||
|
KotlinPackageProviderFactory::class.java,
|
||||||
|
KotlinStaticPackageProviderFactory(project, allKtFiles + ktFilesForBinaries)
|
||||||
|
)
|
||||||
registerService(KotlinResolutionScopeProvider::class.java, KotlinByModulesResolutionScopeProvider::class.java)
|
registerService(KotlinResolutionScopeProvider::class.java, KotlinByModulesResolutionScopeProvider::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -17,7 +17,6 @@ import com.intellij.psi.PsiManager
|
|||||||
import com.intellij.psi.SingleRootFileViewProvider
|
import com.intellij.psi.SingleRootFileViewProvider
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.psi.stubs.StubElement
|
import com.intellij.psi.stubs.StubElement
|
||||||
import com.intellij.util.containers.CollectionFactory.createConcurrentWeakValueMap
|
|
||||||
import com.intellij.util.indexing.FileContent
|
import com.intellij.util.indexing.FileContent
|
||||||
import com.intellij.util.indexing.FileContentImpl
|
import com.intellij.util.indexing.FileContentImpl
|
||||||
import com.intellij.util.io.URLUtil
|
import com.intellij.util.io.URLUtil
|
||||||
@@ -135,6 +134,7 @@ public class KotlinStaticDeclarationProviderFactory(
|
|||||||
|
|
||||||
private val psiManager = PsiManager.getInstance(project)
|
private val psiManager = PsiManager.getInstance(project)
|
||||||
private val builtInDecompiler = KotlinBuiltInDecompiler()
|
private val builtInDecompiler = KotlinBuiltInDecompiler()
|
||||||
|
private val createdFakeKtFiles = mutableListOf<KtFile>()
|
||||||
|
|
||||||
private fun loadBuiltIns(): Collection<KotlinFileStubImpl> {
|
private fun loadBuiltIns(): Collection<KotlinFileStubImpl> {
|
||||||
val classLoader = this::class.java.classLoader
|
val classLoader = this::class.java.classLoader
|
||||||
@@ -170,6 +170,7 @@ public class KotlinStaticDeclarationProviderFactory(
|
|||||||
override fun isPhysical() = false
|
override fun isPhysical() = false
|
||||||
}
|
}
|
||||||
ktFileStub.psi = fakeFile
|
ktFileStub.psi = fakeFile
|
||||||
|
createdFakeKtFiles.add(fakeFile)
|
||||||
return ktFileStub
|
return ktFileStub
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,6 +344,7 @@ public class KotlinStaticDeclarationProviderFactory(
|
|||||||
override fun isPhysical() = false
|
override fun isPhysical() = false
|
||||||
}
|
}
|
||||||
stub.psi = fakeFile
|
stub.psi = fakeFile
|
||||||
|
createdFakeKtFiles.add(fakeFile)
|
||||||
processStub(stub)
|
processStub(stub)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -356,6 +358,10 @@ public class KotlinStaticDeclarationProviderFactory(
|
|||||||
override fun createDeclarationProvider(scope: GlobalSearchScope, contextualModule: KtModule?): KotlinDeclarationProvider {
|
override fun createDeclarationProvider(scope: GlobalSearchScope, contextualModule: KtModule?): KotlinDeclarationProvider {
|
||||||
return KotlinStaticDeclarationProvider(index, scope)
|
return KotlinStaticDeclarationProvider(index, scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public fun getAdditionalCreatedKtFiles(): List<KtFile> {
|
||||||
|
return createdFakeKtFiles
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+10
-6
@@ -128,16 +128,20 @@ public class StandaloneAnalysisAPISessionBuilder(
|
|||||||
registerService(KtModuleScopeProvider::class.java, KtModuleScopeProviderImpl())
|
registerService(KtModuleScopeProvider::class.java, KtModuleScopeProviderImpl())
|
||||||
registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(ktFiles))
|
registerService(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(ktFiles))
|
||||||
registerService(KotlinResolutionScopeProvider::class.java, KotlinByModulesResolutionScopeProvider::class.java)
|
registerService(KotlinResolutionScopeProvider::class.java, KotlinByModulesResolutionScopeProvider::class.java)
|
||||||
|
val declarationProviderFactory = KotlinStaticDeclarationProviderFactory(
|
||||||
|
this,
|
||||||
|
ktFiles,
|
||||||
|
kotlinCoreProjectEnvironment.environment.jarFileSystem as CoreJarFileSystem
|
||||||
|
)
|
||||||
registerService(
|
registerService(
|
||||||
KotlinDeclarationProviderFactory::class.java,
|
KotlinDeclarationProviderFactory::class.java,
|
||||||
KotlinStaticDeclarationProviderFactory(
|
declarationProviderFactory
|
||||||
this,
|
|
||||||
ktFiles,
|
|
||||||
kotlinCoreProjectEnvironment.environment.jarFileSystem as CoreJarFileSystem
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
registerService(KotlinDeclarationProviderMerger::class.java, KotlinStaticDeclarationProviderMerger(this))
|
registerService(KotlinDeclarationProviderMerger::class.java, KotlinStaticDeclarationProviderMerger(this))
|
||||||
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(project, ktFiles))
|
registerService(
|
||||||
|
KotlinPackageProviderFactory::class.java,
|
||||||
|
KotlinStaticPackageProviderFactory(project, ktFiles + declarationProviderFactory.getAdditionalCreatedKtFiles())
|
||||||
|
)
|
||||||
|
|
||||||
registerService(
|
registerService(
|
||||||
FirSealedClassInheritorsProcessorFactory::class.java,
|
FirSealedClassInheritorsProcessorFactory::class.java,
|
||||||
|
|||||||
+3
-2
@@ -166,6 +166,7 @@ internal fun configureProjectEnvironment(
|
|||||||
ProjectStructureProvider::class.java,
|
ProjectStructureProvider::class.java,
|
||||||
projectStructureProvider,
|
projectStructureProvider,
|
||||||
)
|
)
|
||||||
|
val declarationProviderFactory = KotlinStaticDeclarationProviderFactory(project, ktFiles)
|
||||||
project.registerService(
|
project.registerService(
|
||||||
KotlinModuleDependentsProvider::class.java,
|
KotlinModuleDependentsProvider::class.java,
|
||||||
KtStaticModuleDependentsProvider(projectStructureProvider.allKtModules),
|
KtStaticModuleDependentsProvider(projectStructureProvider.allKtModules),
|
||||||
@@ -173,7 +174,7 @@ internal fun configureProjectEnvironment(
|
|||||||
|
|
||||||
project.registerService(
|
project.registerService(
|
||||||
KotlinDeclarationProviderFactory::class.java,
|
KotlinDeclarationProviderFactory::class.java,
|
||||||
KotlinStaticDeclarationProviderFactory(project, ktFiles)
|
declarationProviderFactory
|
||||||
)
|
)
|
||||||
project.registerService(
|
project.registerService(
|
||||||
KotlinDeclarationProviderMerger::class.java,
|
KotlinDeclarationProviderMerger::class.java,
|
||||||
@@ -181,7 +182,7 @@ internal fun configureProjectEnvironment(
|
|||||||
)
|
)
|
||||||
project.registerService(
|
project.registerService(
|
||||||
KotlinPackageProviderFactory::class.java,
|
KotlinPackageProviderFactory::class.java,
|
||||||
KotlinStaticPackageProviderFactory(project, ktFiles)
|
KotlinStaticPackageProviderFactory(project, ktFiles + declarationProviderFactory.getAdditionalCreatedKtFiles())
|
||||||
)
|
)
|
||||||
project.registerService(
|
project.registerService(
|
||||||
PackagePartProviderFactory::class.java,
|
PackagePartProviderFactory::class.java,
|
||||||
|
|||||||
+4
-4
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirKotlinSymb
|
|||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirKotlinSymbolNamesProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.LLFirKotlinSymbolNamesProvider
|
||||||
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
import org.jetbrains.kotlin.analysis.providers.KotlinDeclarationProvider
|
||||||
import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider
|
import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider
|
||||||
|
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.caches.FirCache
|
import org.jetbrains.kotlin.fir.caches.FirCache
|
||||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||||
@@ -78,6 +79,8 @@ internal open class StubBasedFirDeserializedSymbolProvider(
|
|||||||
private val functionCache = session.firCachesFactory.createCache(::loadFunctionsByCallableId)
|
private val functionCache = session.firCachesFactory.createCache(::loadFunctionsByCallableId)
|
||||||
private val propertyCache = session.firCachesFactory.createCache(::loadPropertiesByCallableId)
|
private val propertyCache = session.firCachesFactory.createCache(::loadPropertiesByCallableId)
|
||||||
|
|
||||||
|
private val packageProvider = project.createPackageProvider(scope)
|
||||||
|
|
||||||
private fun findAndDeserializeTypeAlias(
|
private fun findAndDeserializeTypeAlias(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
context: StubBasedFirDeserializationContext?,
|
context: StubBasedFirDeserializationContext?,
|
||||||
@@ -264,10 +267,7 @@ internal open class StubBasedFirDeserializedSymbolProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getPackage(fqName: FqName): FqName? =
|
override fun getPackage(fqName: FqName): FqName? =
|
||||||
fqName.takeIf {
|
fqName.takeIf { packageProvider.doesKotlinOnlyPackageExist(fqName) }
|
||||||
symbolNamesProvider.getTopLevelClassifierNamesInPackage(fqName)?.isNotEmpty() == true ||
|
|
||||||
symbolNamesProvider.getPackageNamesWithTopLevelCallables()?.contains(fqName.asString()) == true
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getClassLikeSymbolByClassId(classId: ClassId): FirClassLikeSymbol<*>? {
|
override fun getClassLikeSymbolByClassId(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||||
if (!symbolNamesProvider.mayHaveTopLevelClassifier(classId)) return null
|
if (!symbolNamesProvider.mayHaveTopLevelClassifier(classId)) return null
|
||||||
|
|||||||
+8
-1
@@ -6,13 +6,16 @@
|
|||||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.util
|
package org.jetbrains.kotlin.analysis.low.level.api.fir.util
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.containingDeclaration
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.containingDeclaration
|
||||||
|
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.project.structure.llFirModuleData
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirModuleWithDependenciesSymbolProvider
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.LLFirModuleWithDependenciesSymbolProvider
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirBuiltinsAndCloneableSession
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirBuiltinsAndCloneableSession
|
||||||
|
import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
||||||
import org.jetbrains.kotlin.utils.exceptions.ExceptionAttachmentBuilder
|
import org.jetbrains.kotlin.utils.exceptions.ExceptionAttachmentBuilder
|
||||||
import org.jetbrains.kotlin.analysis.utils.errors.withClassEntry
|
import org.jetbrains.kotlin.analysis.utils.errors.withClassEntry
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.fir.moduleData
|
||||||
import org.jetbrains.kotlin.fir.realPsi
|
import org.jetbrains.kotlin.fir.realPsi
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.*
|
import org.jetbrains.kotlin.fir.resolve.providers.*
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
@@ -165,9 +168,13 @@ internal class FirDeclarationForCompiledElementSearcher(private val symbolProvid
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Returns a built-in provider for a Kotlin standard library, as built-in declarations are its logical part.
|
// Returns a built-in provider for a Kotlin standard library, as built-in declarations are its logical part.
|
||||||
|
// Returns one for built-ins modules as well, as these modules have empty scope and their content comes from the dependency provider.
|
||||||
private val LLFirModuleWithDependenciesSymbolProvider.friendBuiltinsProvider: FirSymbolProvider?
|
private val LLFirModuleWithDependenciesSymbolProvider.friendBuiltinsProvider: FirSymbolProvider?
|
||||||
get() {
|
get() {
|
||||||
if (getPackageWithoutDependencies(StandardClassIds.BASE_KOTLIN_PACKAGE) != null) {
|
val moduleData = this.session.moduleData
|
||||||
|
if (getPackageWithoutDependencies(StandardClassIds.BASE_KOTLIN_PACKAGE) != null
|
||||||
|
|| moduleData is LLFirModuleData && moduleData.ktModule is KtBuiltinsModule
|
||||||
|
) {
|
||||||
return dependencyProvider.providers.find { it.session is LLFirBuiltinsAndCloneableSession }
|
return dependencyProvider.providers.find { it.session is LLFirBuiltinsAndCloneableSession }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user