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.util.checkCanceled
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.createPackageProvider
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.deserialization.ModuleDataProvider
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.JavaSymbolProvider
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 {
if (isRootModule) {
registerExtendedCommonCheckers()
@@ -145,14 +163,22 @@ internal object LLFirSessionFactory {
}
}.configure()
val switchableExtensionDeclarationsSymbolProvider =
FirSwitchableExtensionDeclarationsSymbolProvider.create(session)
switchableExtensionDeclarationsSymbolProvider?.let {
register(FirSwitchableExtensionDeclarationsSymbolProvider::class, it)
}
val dependencyProvider = DependentModuleProviders(this, dependentProviders)
register(
FirSymbolProvider::class,
LLFirModuleWithDependenciesSymbolProvider(
this,
providers = listOf(
providers = listOfNotNull(
provider.symbolProvider,
switchableExtensionDeclarationsSymbolProvider,
JavaSymbolProvider(
this,
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 {
for (extensionRegistrar in FirExtensionRegistrar.getInstances(project)) {
registerExtensions(extensionRegistrar.configure())
@@ -56,8 +56,6 @@ fun FirSession.registerCommonComponents(languageVersionSettings: LanguageVersion
register(FirDefaultParametersResolver::class, FirDefaultParametersResolver())
register(FirExtensionService::class, FirExtensionService(this))
register(FirRegisteredPluginAnnotations::class, FirRegisteredPluginAnnotationsImpl(this))
register(FirPredicateBasedProvider::class, FirPredicateBasedProviderImpl(this))
register(GeneratedClassIndex::class, GeneratedClassIndex.create())
register(FirSubstitutionOverrideStorage::class, FirSubstitutionOverrideStorage(this))
@@ -70,6 +68,9 @@ fun FirSession.registerCliCompilerOnlyComponents() {
register(FirCachesFactory::class, FirThreadUnsafeCachesFactory)
register(SealedClassInheritorsProvider::class, SealedClassInheritorsProviderImpl)
register(FirPhaseManager::class, FirPhaseCheckingPhaseManager)
register(FirRegisteredPluginAnnotations::class, FirRegisteredPluginAnnotationsImpl(this))
register(FirPredicateBasedProvider::class, FirPredicateBasedProviderImpl(this))
}
@OptIn(SessionConfiguration::class)