[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))
|
||||
|
||||
val filter = BuiltInDefinitionFile.FILTER_OUT_CLASSES_EXISTING_AS_JVM_CLASS_FILES
|
||||
val ktFilesForBinaries: List<KtFile>
|
||||
try {
|
||||
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(
|
||||
KotlinDeclarationProviderFactory::class.java, KotlinStaticDeclarationProviderFactory(
|
||||
project,
|
||||
allKtFiles,
|
||||
additionalRoots = roots,
|
||||
skipBuiltins = testServices.moduleStructure.allDirectives.contains(NO_RUNTIME),
|
||||
)
|
||||
KotlinDeclarationProviderFactory::class.java, declarationProviderFactory
|
||||
)
|
||||
} finally {
|
||||
BuiltInDefinitionFile.FILTER_OUT_CLASSES_EXISTING_AS_JVM_CLASS_FILES = filter
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
+7
-1
@@ -17,7 +17,6 @@ import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.SingleRootFileViewProvider
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.stubs.StubElement
|
||||
import com.intellij.util.containers.CollectionFactory.createConcurrentWeakValueMap
|
||||
import com.intellij.util.indexing.FileContent
|
||||
import com.intellij.util.indexing.FileContentImpl
|
||||
import com.intellij.util.io.URLUtil
|
||||
@@ -135,6 +134,7 @@ public class KotlinStaticDeclarationProviderFactory(
|
||||
|
||||
private val psiManager = PsiManager.getInstance(project)
|
||||
private val builtInDecompiler = KotlinBuiltInDecompiler()
|
||||
private val createdFakeKtFiles = mutableListOf<KtFile>()
|
||||
|
||||
private fun loadBuiltIns(): Collection<KotlinFileStubImpl> {
|
||||
val classLoader = this::class.java.classLoader
|
||||
@@ -170,6 +170,7 @@ public class KotlinStaticDeclarationProviderFactory(
|
||||
override fun isPhysical() = false
|
||||
}
|
||||
ktFileStub.psi = fakeFile
|
||||
createdFakeKtFiles.add(fakeFile)
|
||||
return ktFileStub
|
||||
}
|
||||
|
||||
@@ -343,6 +344,7 @@ public class KotlinStaticDeclarationProviderFactory(
|
||||
override fun isPhysical() = false
|
||||
}
|
||||
stub.psi = fakeFile
|
||||
createdFakeKtFiles.add(fakeFile)
|
||||
processStub(stub)
|
||||
}
|
||||
}
|
||||
@@ -356,6 +358,10 @@ public class KotlinStaticDeclarationProviderFactory(
|
||||
override fun createDeclarationProvider(scope: GlobalSearchScope, contextualModule: KtModule?): KotlinDeclarationProvider {
|
||||
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(KotlinAnnotationsResolverFactory::class.java, KotlinStaticAnnotationsResolverFactory(ktFiles))
|
||||
registerService(KotlinResolutionScopeProvider::class.java, KotlinByModulesResolutionScopeProvider::class.java)
|
||||
val declarationProviderFactory = KotlinStaticDeclarationProviderFactory(
|
||||
this,
|
||||
ktFiles,
|
||||
kotlinCoreProjectEnvironment.environment.jarFileSystem as CoreJarFileSystem
|
||||
)
|
||||
registerService(
|
||||
KotlinDeclarationProviderFactory::class.java,
|
||||
KotlinStaticDeclarationProviderFactory(
|
||||
this,
|
||||
ktFiles,
|
||||
kotlinCoreProjectEnvironment.environment.jarFileSystem as CoreJarFileSystem
|
||||
)
|
||||
declarationProviderFactory
|
||||
)
|
||||
registerService(KotlinDeclarationProviderMerger::class.java, KotlinStaticDeclarationProviderMerger(this))
|
||||
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(project, ktFiles))
|
||||
registerService(
|
||||
KotlinPackageProviderFactory::class.java,
|
||||
KotlinStaticPackageProviderFactory(project, ktFiles + declarationProviderFactory.getAdditionalCreatedKtFiles())
|
||||
)
|
||||
|
||||
registerService(
|
||||
FirSealedClassInheritorsProcessorFactory::class.java,
|
||||
|
||||
+3
-2
@@ -166,6 +166,7 @@ internal fun configureProjectEnvironment(
|
||||
ProjectStructureProvider::class.java,
|
||||
projectStructureProvider,
|
||||
)
|
||||
val declarationProviderFactory = KotlinStaticDeclarationProviderFactory(project, ktFiles)
|
||||
project.registerService(
|
||||
KotlinModuleDependentsProvider::class.java,
|
||||
KtStaticModuleDependentsProvider(projectStructureProvider.allKtModules),
|
||||
@@ -173,7 +174,7 @@ internal fun configureProjectEnvironment(
|
||||
|
||||
project.registerService(
|
||||
KotlinDeclarationProviderFactory::class.java,
|
||||
KotlinStaticDeclarationProviderFactory(project, ktFiles)
|
||||
declarationProviderFactory
|
||||
)
|
||||
project.registerService(
|
||||
KotlinDeclarationProviderMerger::class.java,
|
||||
@@ -181,7 +182,7 @@ internal fun configureProjectEnvironment(
|
||||
)
|
||||
project.registerService(
|
||||
KotlinPackageProviderFactory::class.java,
|
||||
KotlinStaticPackageProviderFactory(project, ktFiles)
|
||||
KotlinStaticPackageProviderFactory(project, ktFiles + declarationProviderFactory.getAdditionalCreatedKtFiles())
|
||||
)
|
||||
project.registerService(
|
||||
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.providers.KotlinDeclarationProvider
|
||||
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.caches.FirCache
|
||||
import org.jetbrains.kotlin.fir.caches.firCachesFactory
|
||||
@@ -78,6 +79,8 @@ internal open class StubBasedFirDeserializedSymbolProvider(
|
||||
private val functionCache = session.firCachesFactory.createCache(::loadFunctionsByCallableId)
|
||||
private val propertyCache = session.firCachesFactory.createCache(::loadPropertiesByCallableId)
|
||||
|
||||
private val packageProvider = project.createPackageProvider(scope)
|
||||
|
||||
private fun findAndDeserializeTypeAlias(
|
||||
classId: ClassId,
|
||||
context: StubBasedFirDeserializationContext?,
|
||||
@@ -264,10 +267,7 @@ internal open class StubBasedFirDeserializedSymbolProvider(
|
||||
}
|
||||
|
||||
override fun getPackage(fqName: FqName): FqName? =
|
||||
fqName.takeIf {
|
||||
symbolNamesProvider.getTopLevelClassifierNamesInPackage(fqName)?.isNotEmpty() == true ||
|
||||
symbolNamesProvider.getPackageNamesWithTopLevelCallables()?.contains(fqName.asString()) == true
|
||||
}
|
||||
fqName.takeIf { packageProvider.doesKotlinOnlyPackageExist(fqName) }
|
||||
|
||||
override fun getClassLikeSymbolByClassId(classId: ClassId): FirClassLikeSymbol<*>? {
|
||||
if (!symbolNamesProvider.mayHaveTopLevelClassifier(classId)) return null
|
||||
|
||||
+8
-1
@@ -6,13 +6,16 @@
|
||||
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.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.sessions.LLFirBuiltinsAndCloneableSession
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
||||
import org.jetbrains.kotlin.utils.exceptions.ExceptionAttachmentBuilder
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.withClassEntry
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.moduleData
|
||||
import org.jetbrains.kotlin.fir.realPsi
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.*
|
||||
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 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?
|
||||
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 }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user