diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt index ec727161566..6d00653b0cb 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionFactory.kt @@ -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()) diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt index 7ae996181fd..0c91ca6be60 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/session/ComponentsContainers.kt @@ -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)