FIR IDE: Register plugins-related session components in IDE session

Move registering CLI-specific plugin-related components to
`registerCliCompilerOnlyComponents`
This commit is contained in:
Roman Golyshev
2022-02-11 10:01:45 +03:00
parent 8d9d46dae3
commit 765af5f18a
2 changed files with 34 additions and 3 deletions
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.FirLazyDecla
import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.* import org.jetbrains.kotlin.analysis.low.level.api.fir.providers.*
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled
import org.jetbrains.kotlin.analysis.project.structure.* import org.jetbrains.kotlin.analysis.project.structure.*
import org.jetbrains.kotlin.analysis.providers.createAnnotationResolver
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.analysis.providers.createPackageProvider
import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettings
@@ -31,6 +32,9 @@ import org.jetbrains.kotlin.fir.checkers.registerExtendedCommonCheckers
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.fir.extensions.FirPredicateBasedProvider
import org.jetbrains.kotlin.fir.extensions.FirRegisteredPluginAnnotations
import org.jetbrains.kotlin.fir.extensions.FirSwitchableExtensionDeclarationsSymbolProvider
import org.jetbrains.kotlin.fir.java.FirJavaFacade import org.jetbrains.kotlin.fir.java.FirJavaFacade
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider import org.jetbrains.kotlin.fir.java.deserialization.JvmClassFileBasedSymbolProvider
@@ -136,6 +140,20 @@ internal object LLFirSessionFactory {
} }
} }
val projectWithDependenciesScope = contentScope.uniteWith(project.moduleScopeProvider.getModuleLibrariesScope(module))
val annotationsResolver = project.createAnnotationResolver(projectWithDependenciesScope)
// We need FirRegisteredPluginAnnotations and FirPredicateBasedProvider during extensions' registration process
register(FirRegisteredPluginAnnotations::class, LLFirIdeRegisteredPluginAnnotations(this@session, annotationsResolver))
register(
FirPredicateBasedProvider::class,
LLFirIdePredicateBasedProvider(
this@session,
annotationsResolver,
project.createDeclarationProvider(projectWithDependenciesScope)
)
)
FirSessionFactory.FirSessionConfigurator(this).apply { FirSessionFactory.FirSessionConfigurator(this).apply {
if (isRootModule) { if (isRootModule) {
registerExtendedCommonCheckers() registerExtendedCommonCheckers()
@@ -145,14 +163,22 @@ internal object LLFirSessionFactory {
} }
}.configure() }.configure()
val switchableExtensionDeclarationsSymbolProvider =
FirSwitchableExtensionDeclarationsSymbolProvider.create(session)
switchableExtensionDeclarationsSymbolProvider?.let {
register(FirSwitchableExtensionDeclarationsSymbolProvider::class, it)
}
val dependencyProvider = DependentModuleProviders(this, dependentProviders) val dependencyProvider = DependentModuleProviders(this, dependentProviders)
register( register(
FirSymbolProvider::class, FirSymbolProvider::class,
LLFirModuleWithDependenciesSymbolProvider( LLFirModuleWithDependenciesSymbolProvider(
this, this,
providers = listOf( providers = listOfNotNull(
provider.symbolProvider, provider.symbolProvider,
switchableExtensionDeclarationsSymbolProvider,
JavaSymbolProvider( JavaSymbolProvider(
this, this,
FirJavaFacade( FirJavaFacade(
@@ -341,6 +367,10 @@ internal object LLFirSessionFactory {
) )
} }
// We need FirRegisteredPluginAnnotations during extensions' registration process
val annotationsResolver = project.createAnnotationResolver(contentScope)
register(FirRegisteredPluginAnnotations::class, LLFirIdeRegisteredPluginAnnotations(this@session, annotationsResolver))
FirSessionFactory.FirSessionConfigurator(this).apply { FirSessionFactory.FirSessionConfigurator(this).apply {
for (extensionRegistrar in FirExtensionRegistrar.getInstances(project)) { for (extensionRegistrar in FirExtensionRegistrar.getInstances(project)) {
registerExtensions(extensionRegistrar.configure()) registerExtensions(extensionRegistrar.configure())
@@ -56,8 +56,6 @@ fun FirSession.registerCommonComponents(languageVersionSettings: LanguageVersion
register(FirDefaultParametersResolver::class, FirDefaultParametersResolver()) register(FirDefaultParametersResolver::class, FirDefaultParametersResolver())
register(FirExtensionService::class, FirExtensionService(this)) register(FirExtensionService::class, FirExtensionService(this))
register(FirRegisteredPluginAnnotations::class, FirRegisteredPluginAnnotationsImpl(this))
register(FirPredicateBasedProvider::class, FirPredicateBasedProviderImpl(this))
register(GeneratedClassIndex::class, GeneratedClassIndex.create()) register(GeneratedClassIndex::class, GeneratedClassIndex.create())
register(FirSubstitutionOverrideStorage::class, FirSubstitutionOverrideStorage(this)) register(FirSubstitutionOverrideStorage::class, FirSubstitutionOverrideStorage(this))
@@ -70,6 +68,9 @@ fun FirSession.registerCliCompilerOnlyComponents() {
register(FirCachesFactory::class, FirThreadUnsafeCachesFactory) register(FirCachesFactory::class, FirThreadUnsafeCachesFactory)
register(SealedClassInheritorsProvider::class, SealedClassInheritorsProviderImpl) register(SealedClassInheritorsProvider::class, SealedClassInheritorsProviderImpl)
register(FirPhaseManager::class, FirPhaseCheckingPhaseManager) register(FirPhaseManager::class, FirPhaseCheckingPhaseManager)
register(FirRegisteredPluginAnnotations::class, FirRegisteredPluginAnnotationsImpl(this))
register(FirPredicateBasedProvider::class, FirPredicateBasedProviderImpl(this))
} }
@OptIn(SessionConfiguration::class) @OptIn(SessionConfiguration::class)