FIR IDE: Register plugins-related session components in IDE session
Move registering CLI-specific plugin-related components to `registerCliCompilerOnlyComponents`
This commit is contained in:
+31
-1
@@ -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())
|
||||||
|
|||||||
+3
-2
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user