diff --git a/analysis/analysis-api-fir/build.gradle.kts b/analysis/analysis-api-fir/build.gradle.kts index 9efcbc08f5f..82f0dd3a1e5 100644 --- a/analysis/analysis-api-fir/build.gradle.kts +++ b/analysis/analysis-api-fir/build.gradle.kts @@ -34,6 +34,7 @@ dependencies { testApi(projectTests(":compiler:fir:analysis-tests:legacy-fir-tests")) testApi(projectTests(":analysis:analysis-api-impl-base")) testApi(projectTests(":analysis:decompiled:decompiler-to-file-stubs")) + testApi(project(":analysis:analysis-api-standalone:analysis-api-fir-standalone-base")) testApi(project(":analysis:decompiled:decompiler-to-file-stubs")) testApi(project(":analysis:decompiled:decompiler-to-psi")) testApi(project(":kotlin-test:kotlin-test-junit")) diff --git a/analysis/analysis-api-standalone/analysis-api-fir-standalone-base/build.gradle.kts b/analysis/analysis-api-standalone/analysis-api-fir-standalone-base/build.gradle.kts new file mode 100644 index 00000000000..5fa918bd056 --- /dev/null +++ b/analysis/analysis-api-standalone/analysis-api-fir-standalone-base/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + implementation(intellijCore()) + implementation(kotlinStdlib()) + implementation(project(":compiler:psi")) + implementation(project(":compiler:cli-base")) + implementation(project(":analysis:analysis-api")) + implementation(project(":analysis:analysis-api-impl-base")) + implementation(project(":analysis:analysis-api-fir")) + implementation(project(":analysis:symbol-light-classes")) + implementation(project(":analysis:analysis-api-standalone:analysis-api-standalone-base")) +} + + +sourceSets { + "main" { projectDefault() } + "test" { none() } +} diff --git a/analysis/analysis-api-standalone/analysis-api-fir-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/FirStandaloneServiceRegistrar.kt b/analysis/analysis-api-standalone/analysis-api-fir-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/FirStandaloneServiceRegistrar.kt new file mode 100644 index 00000000000..dc7bca83846 --- /dev/null +++ b/analysis/analysis-api-standalone/analysis-api-fir-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/FirStandaloneServiceRegistrar.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.api.standalone.base.project.structure + +import com.intellij.mock.MockApplication +import com.intellij.mock.MockProject +import com.intellij.openapi.Disposable +import com.intellij.psi.PsiElementFinder +import com.intellij.psi.impl.PsiElementFinderImpl +import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals +import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider +import org.jetbrains.kotlin.analysis.api.fir.references.ReadWriteAccessCheckerFirImpl +import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider +import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents +import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirInternals +import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.JvmFirDeserializedSymbolProviderFactory +import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsSessionFactory +import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionCache +import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionConfigurator +import org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization.JvmStubBasedDeserializedSymbolProviderFactory +import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport +import org.jetbrains.kotlin.asJava.finder.JavaElementFinder +import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension +import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter +import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor +import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor +import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker +import org.jetbrains.kotlin.light.classes.symbol.SymbolKotlinAsJavaSupport + +@OptIn(LLFirInternals::class, KtAnalysisApiInternals::class) +object FirStandaloneServiceRegistrar : AnalysisApiStandaloneServiceRegistrar { + override fun registerApplicationServices(application: MockApplication) { + } + + override fun registerProjectExtensionPoints(project: MockProject) { + IrGenerationExtension.registerExtensionPoint(project) + FirExtensionRegistrarAdapter.registerExtensionPoint(project) + LLFirSessionConfigurator.registerExtensionPoint(project) + } + + override fun registerProjectServices(project: MockProject) { + project.apply { + registerService(KtAnalysisSessionProvider::class.java, KtFirAnalysisSessionProvider(this)) + registerService(LLFirResolveSessionService::class.java) + registerService(LLFirSessionCache::class.java) + registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport::class.java) + registerService(LLFirGlobalResolveComponents::class.java) + registerService(LLFirBuiltinsSessionFactory::class.java) + registerService(JvmFirDeserializedSymbolProviderFactory::class.java, JvmStubBasedDeserializedSymbolProviderFactory::class.java) + registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java) + registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl::class.java ) + } + } + + @Suppress("TestOnlyProblems") + override fun registerProjectModelServices(project: MockProject, disposable: Disposable) { + with(PsiElementFinder.EP.getPoint(project)) { + registerExtension(JavaElementFinder(project), disposable) + registerExtension(PsiElementFinderImpl(project), disposable) + } + } +} \ No newline at end of file diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/AnalysisApiStandaloneServiceRegistrar.kt b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/AnalysisApiStandaloneServiceRegistrar.kt new file mode 100644 index 00000000000..47e2ac678fe --- /dev/null +++ b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/AnalysisApiStandaloneServiceRegistrar.kt @@ -0,0 +1,15 @@ +package org.jetbrains.kotlin.analysis.api.standalone.base.project.structure + +import com.intellij.mock.MockApplication +import com.intellij.mock.MockProject +import com.intellij.openapi.Disposable + +interface AnalysisApiStandaloneServiceRegistrar { + fun registerApplicationServices(application: MockApplication) + + fun registerProjectExtensionPoints(project: MockProject) + + fun registerProjectServices(project: MockProject) + + fun registerProjectModelServices(project: MockProject, disposable: Disposable) +} \ No newline at end of file diff --git a/analysis/analysis-api-standalone/build.gradle.kts b/analysis/analysis-api-standalone/build.gradle.kts index ca41a797a6e..27a1a63b965 100644 --- a/analysis/analysis-api-standalone/build.gradle.kts +++ b/analysis/analysis-api-standalone/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { api(project(":analysis:symbol-light-classes")) api(project(":analysis:decompiled:light-classes-for-decompiled")) api(project(":analysis:analysis-api-standalone:analysis-api-standalone-base")) + implementation(project(":analysis:analysis-api-standalone:analysis-api-fir-standalone-base")) testApi(projectTests(":analysis:analysis-test-framework")) testApi(projectTests(":analysis:analysis-api-impl-base")) testApi(projectTests(":analysis:analysis-api-fir")) diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/RegisterComponentService.java b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/RegisterComponentService.java deleted file mode 100644 index 61bbe399a33..00000000000 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/RegisterComponentService.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.analysis.api.standalone; - -import com.intellij.mock.MockProject; -import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents; -import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService; -import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionCache; - -@SuppressWarnings("KotlinInternalInJava") -class RegisterComponentService { - static void registerLLFirSessionCache(MockProject project) { - project.registerService(LLFirSessionCache.class, new LLFirSessionCache(project)); - } - - static void registerLLFirGlobalResolveComponents(MockProject project) { - project.registerService(LLFirGlobalResolveComponents.class, new LLFirGlobalResolveComponents(project)); - } - - static void registerLLFirResolveSessionService(MockProject project) { - project.registerService(LLFirResolveSessionService.class, new LLFirResolveSessionService(project)); - } -} diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt index b19cbd354c9..f0f4cf14856 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneAnalysisAPISessionBuilder.kt @@ -10,22 +10,13 @@ import com.intellij.openapi.application.Application import com.intellij.openapi.project.Project import com.intellij.openapi.util.Disposer import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem -import com.intellij.psi.PsiElementFinder -import com.intellij.psi.impl.PsiElementFinderImpl import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals -import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider -import org.jetbrains.kotlin.analysis.api.fir.references.ReadWriteAccessCheckerFirImpl -import org.jetbrains.kotlin.analysis.api.impl.base.references.HLApiReferenceProviderService import org.jetbrains.kotlin.analysis.api.lifetime.KtDefaultLifetimeTokenProvider import org.jetbrains.kotlin.analysis.api.lifetime.KtReadActionConfinementDefaultLifetimeTokenProvider -import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider +import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.FirStandaloneServiceRegistrar import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory -import org.jetbrains.kotlin.analysis.decompiled.light.classes.ClsJavaStubByVirtualFileCache import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.JvmFirDeserializedSymbolProviderFactory -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsSessionFactory -import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionConfigurator import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider @@ -37,20 +28,13 @@ import org.jetbrains.kotlin.analysis.project.structure.impl.getPsiFilesFromPaths import org.jetbrains.kotlin.analysis.project.structure.impl.getSourceFilePaths import org.jetbrains.kotlin.analysis.providers.* import org.jetbrains.kotlin.analysis.providers.impl.* -import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport -import org.jetbrains.kotlin.asJava.finder.JavaElementFinder import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.setupIdeaStandaloneExecution import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl -import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor -import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor -import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker -import org.jetbrains.kotlin.light.classes.symbol.SymbolKotlinAsJavaSupport import org.jetbrains.kotlin.load.kotlin.PackagePartProvider -import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService import org.jetbrains.kotlin.psi.KtFile import kotlin.contracts.ExperimentalContracts import kotlin.contracts.InvocationKind @@ -75,6 +59,11 @@ public class StandaloneAnalysisAPISessionBuilder( applicationDisposable, ) + + init { + FirStandaloneServiceRegistrar.registerApplicationServices(kotlinCoreProjectEnvironment.environment.application) + } + public val application: Application = kotlinCoreProjectEnvironment.environment.application public val project: Project = kotlinCoreProjectEnvironment.project @@ -112,10 +101,6 @@ public class StandaloneAnalysisAPISessionBuilder( } } - private fun registerProjectExtensionPoints() { - LLFirSessionConfigurator.registerExtensionPoint(project) - } - public fun registerProjectExtensionPoint(extensionDescriptor: ProjectExtensionDescriptor) { extensionDescriptor.registerExtensionPoint(project) } @@ -127,6 +112,10 @@ public class StandaloneAnalysisAPISessionBuilder( ) { val project = kotlinCoreProjectEnvironment.project project.apply { + FirStandaloneServiceRegistrar.registerProjectServices(project) + FirStandaloneServiceRegistrar.registerProjectExtensionPoints(project) + FirStandaloneServiceRegistrar.registerProjectModelServices(project, kotlinCoreProjectEnvironment.parentDisposable) + registerService(KotlinModificationTrackerFactory::class.java, KotlinStaticModificationTrackerFactory::class.java) registerService(KtDefaultLifetimeTokenProvider::class.java, KtReadActionConfinementDefaultLifetimeTokenProvider::class.java) @@ -144,7 +133,6 @@ public class StandaloneAnalysisAPISessionBuilder( registerService(KotlinDeclarationProviderMerger::class.java, KotlinStaticDeclarationProviderMerger(this)) registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(project, ktFiles)) - registerService(KtAnalysisSessionProvider::class.java, KtFirAnalysisSessionProvider(this)) registerService( FirSealedClassInheritorsProcessorFactory::class.java, object : FirSealedClassInheritorsProcessorFactory() { @@ -153,29 +141,12 @@ public class StandaloneAnalysisAPISessionBuilder( } } ) - registerService(LLFirBuiltinsSessionFactory::class.java, LLFirBuiltinsSessionFactory(this)) - RegisterComponentService.registerLLFirSessionCache(this) - RegisterComponentService.registerLLFirGlobalResolveComponents(this) - registerService(KotlinReferenceProvidersService::class.java, HLApiReferenceProviderService::class.java) - registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java) - - RegisterComponentService.registerLLFirResolveSessionService(this) registerService( PackagePartProviderFactory::class.java, KotlinStaticPackagePartProviderFactory(packagePartProvider) ) - - registerService(ClsJavaStubByVirtualFileCache::class.java, ClsJavaStubByVirtualFileCache()) - registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport(this)) - registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl()) - registerService(JvmFirDeserializedSymbolProviderFactory::class.java, JvmFirDeserializedSymbolProviderFactory()) } - - @Suppress("DEPRECATION") - PsiElementFinder.EP.getPoint(project).registerExtension(JavaElementFinder(project)) - @Suppress("DEPRECATION") - PsiElementFinder.EP.getPoint(project).registerExtension(PsiElementFinderImpl(project)) } private fun registerPsiDeclarationFromBinaryModuleProvider() { @@ -216,8 +187,6 @@ public class StandaloneAnalysisAPISessionBuilder( modules, allSourceFiles, ) - registerProjectExtensionPoints() - val project = kotlinCoreProjectEnvironment.project val ktFiles = allSourceFiles.filterIsInstance() val libraryRoots = StandaloneProjectFactory.getAllBinaryRoots(modules, kotlinCoreProjectEnvironment) diff --git a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt index a95ffab6007..fe3720eb167 100644 --- a/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt +++ b/analysis/analysis-api-standalone/src/org/jetbrains/kotlin/analysis/api/standalone/StandaloneUtils.kt @@ -133,7 +133,6 @@ internal fun configureProjectEnvironment( KotlinFirReferenceContributor::class.java ) - RegisterComponentService.registerLLFirResolveSessionService(project) project.registerService( FirSealedClassInheritorsProcessorFactory::class.java, object : FirSealedClassInheritorsProcessorFactory() { diff --git a/analysis/low-level-api-fir/build.gradle.kts b/analysis/low-level-api-fir/build.gradle.kts index 8e45e9cb930..2cad9cf1f62 100644 --- a/analysis/low-level-api-fir/build.gradle.kts +++ b/analysis/low-level-api-fir/build.gradle.kts @@ -27,6 +27,7 @@ dependencies { implementation(project(":analysis:analysis-api-providers")) implementation(project(":analysis:analysis-api")) implementation(project(":analysis:analysis-internal-utils")) + implementation(project(":analysis:analysis-api-standalone:analysis-api-standalone-base")) implementation(project(":kotlin-scripting-compiler")) implementation(project(":kotlin-scripting-common")) @@ -40,6 +41,7 @@ dependencies { testApi(projectTests(":compiler:tests-common-new")) testImplementation("org.opentest4j:opentest4j:1.2.0") + testImplementation(project(":analysis:analysis-api-standalone:analysis-api-fir-standalone-base")) testApi(toolsJar()) testApi(projectTests(":compiler:tests-common")) testApi(projectTests(":compiler:fir:analysis-tests:legacy-fir-tests")) @@ -73,6 +75,7 @@ allprojects { tasks.withType> { kotlinOptions { freeCompilerArgs += "-opt-in=org.jetbrains.kotlin.fir.symbols.SymbolInternals" + freeCompilerArgs += "-opt-in=org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirInternals" } } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirGlobalResolveComponents.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirGlobalResolveComponents.kt index 554aabbf3fa..db36f17e5b8 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirGlobalResolveComponents.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/LLFirGlobalResolveComponents.kt @@ -11,7 +11,8 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.LLFirLazyRes import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSession import org.jetbrains.kotlin.fir.FirSession -internal class LLFirGlobalResolveComponents(val project: Project) { +@LLFirInternals +class LLFirGlobalResolveComponents(val project: Project) { companion object { fun getInstance(project: Project): LLFirGlobalResolveComponents { return project.getService(LLFirGlobalResolveComponents::class.java) @@ -22,6 +23,6 @@ internal class LLFirGlobalResolveComponents(val project: Project) { } } - val checker: LLFirLazyResolveContractChecker = LLFirLazyResolveContractChecker() - val lockProvider: LLFirLockProvider = LLFirLockProvider(checker) + internal val checker: LLFirLazyResolveContractChecker = LLFirLazyResolveContractChecker() + internal val lockProvider: LLFirLockProvider = LLFirLockProvider(checker) } \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/annotations.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/annotations.kt new file mode 100644 index 00000000000..2e38894d96a --- /dev/null +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/annotations.kt @@ -0,0 +1,9 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.low.level.api.fir + +@RequiresOptIn("Internal Low Level API component which should not be used outside the Low Level API module as it does not have any compatibility guarantees") +annotation class LLFirInternals \ No newline at end of file diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt index 7c32dca9bfb..b47ff247b58 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionCache.kt @@ -10,12 +10,13 @@ import com.intellij.psi.util.CachedValue import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager import com.intellij.util.containers.CollectionFactory +import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirInternals import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled import org.jetbrains.kotlin.analysis.project.structure.* import org.jetbrains.kotlin.fir.FirModuleDataImpl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.PrivateSessionConstructor -import org.jetbrains.kotlin.fir.session.* +import org.jetbrains.kotlin.fir.session.registerModuleData import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.JsPlatform import org.jetbrains.kotlin.platform.jvm.JvmPlatform @@ -24,7 +25,8 @@ import org.jetbrains.kotlin.platform.konan.NativePlatform import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices import java.util.concurrent.ConcurrentMap -internal class LLFirSessionCache(private val project: Project) { +@LLFirInternals +class LLFirSessionCache(private val project: Project) { companion object { fun getInstance(project: Project): LLFirSessionCache { return project.getService(LLFirSessionCache::class.java) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedDeserializedSymbolProviderFactory.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedDeserializedSymbolProviderFactory.kt index d6f9e60652b..ddfbc3f5a80 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedDeserializedSymbolProviderFactory.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/stubBased/deserialization/JvmStubBasedDeserializedSymbolProviderFactory.kt @@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.DelegatingGlobalSearchScope import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirInternals import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.JvmFirDeserializedSymbolProviderFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.createJavaSymbolProvider @@ -21,7 +22,8 @@ import org.jetbrains.kotlin.fir.scopes.FirKotlinScopeProvider import org.jetbrains.kotlin.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol -internal class JvmStubBasedDeserializedSymbolProviderFactory : JvmFirDeserializedSymbolProviderFactory() { +@LLFirInternals +class JvmStubBasedDeserializedSymbolProviderFactory : JvmFirDeserializedSymbolProviderFactory() { override fun createJvmFirDeserializedSymbolProviders( project: Project, session: FirSession, diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt index 0ceb7f2c0cd..69d9a4ae932 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/base/AnalysisApiFirTestServiceRegistrar.kt @@ -7,71 +7,39 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.test.base import com.intellij.mock.MockApplication import com.intellij.mock.MockProject -import com.intellij.psi.PsiElementFinder -import com.intellij.psi.impl.PsiElementFinderImpl -import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals -import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSessionProvider -import org.jetbrains.kotlin.analysis.api.fir.references.ReadWriteAccessCheckerFirImpl -import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider -import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents -import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService +import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.FirStandaloneServiceRegistrar import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.JvmFirDeserializedSymbolProviderFactory -import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirBuiltinsSessionFactory -import org.jetbrains.kotlin.analysis.low.level.api.fir.services.NoOpKtCompilerPluginsProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.services.LLFirSealedClassInheritorsProcessorFactoryForTests +import org.jetbrains.kotlin.analysis.low.level.api.fir.services.NoOpKtCompilerPluginsProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.services.PackagePartProviderTestImpl -import org.jetbrains.kotlin.analysis.low.level.api.fir.stubBased.deserialization.JvmStubBasedDeserializedSymbolProviderFactory -import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionCache -import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionConfigurator import org.jetbrains.kotlin.analysis.project.structure.KtCompilerPluginsProvider import org.jetbrains.kotlin.analysis.providers.PackagePartProviderFactory import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar -import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport -import org.jetbrains.kotlin.asJava.finder.JavaElementFinder -import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension -import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter -import org.jetbrains.kotlin.idea.references.KotlinFirReferenceContributor -import org.jetbrains.kotlin.idea.references.KotlinReferenceProviderContributor -import org.jetbrains.kotlin.idea.references.ReadWriteAccessChecker -import org.jetbrains.kotlin.light.classes.symbol.SymbolKotlinAsJavaSupport import org.jetbrains.kotlin.test.TestInfrastructureInternals import org.jetbrains.kotlin.test.impl.testConfiguration import org.jetbrains.kotlin.test.services.TestServices object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() { override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) { - IrGenerationExtension.registerExtensionPoint(project) - FirExtensionRegistrarAdapter.registerExtensionPoint(project) - LLFirSessionConfigurator.registerExtensionPoint(project) + FirStandaloneServiceRegistrar.registerProjectExtensionPoints(project) } - @OptIn(KtAnalysisApiInternals::class) override fun registerProjectServices(project: MockProject, testServices: TestServices) { project.apply { - registerService(KtAnalysisSessionProvider::class.java, KtFirAnalysisSessionProvider(this)) - registerService(FirSealedClassInheritorsProcessorFactory::class.java, LLFirSealedClassInheritorsProcessorFactoryForTests()) - registerService(LLFirResolveSessionService::class.java) - registerService(LLFirSessionCache::class.java) - registerService(LLFirGlobalResolveComponents::class.java) - registerService(LLFirBuiltinsSessionFactory::class.java) - registerService(PackagePartProviderFactory::class.java, PackagePartProviderTestImpl(testServices)) + FirStandaloneServiceRegistrar.registerProjectServices(project) - registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport(project)) + registerService(FirSealedClassInheritorsProcessorFactory::class.java, LLFirSealedClassInheritorsProcessorFactoryForTests()) + registerService(PackagePartProviderFactory::class.java, PackagePartProviderTestImpl(testServices)) registerService(KtCompilerPluginsProvider::class.java, NoOpKtCompilerPluginsProvider) - registerService(ReadWriteAccessChecker::class.java, ReadWriteAccessCheckerFirImpl()) - registerService(KotlinReferenceProviderContributor::class.java, KotlinFirReferenceContributor::class.java) - registerService(JvmFirDeserializedSymbolProviderFactory::class.java, JvmStubBasedDeserializedSymbolProviderFactory::class.java) } } @OptIn(TestInfrastructureInternals::class) override fun registerProjectModelServices(project: MockProject, testServices: TestServices) { - with(PsiElementFinder.EP.getPoint(project)) { - registerExtension(JavaElementFinder(project), testServices.testConfiguration.rootDisposable) - registerExtension(PsiElementFinderImpl(project), testServices.testConfiguration.rootDisposable) - } + FirStandaloneServiceRegistrar.registerProjectModelServices(project, testServices.testConfiguration.rootDisposable) } - override fun registerApplicationServices(application: MockApplication, testServices: TestServices) {} + override fun registerApplicationServices(application: MockApplication, testServices: TestServices) { + FirStandaloneServiceRegistrar.registerApplicationServices(application) + } } diff --git a/prepare/ide-plugin-dependencies/analysis-api-standalone-for-ide/build.gradle.kts b/prepare/ide-plugin-dependencies/analysis-api-standalone-for-ide/build.gradle.kts index d4189c5b663..2c20480946e 100644 --- a/prepare/ide-plugin-dependencies/analysis-api-standalone-for-ide/build.gradle.kts +++ b/prepare/ide-plugin-dependencies/analysis-api-standalone-for-ide/build.gradle.kts @@ -5,6 +5,7 @@ plugins { publishJarsForIde( listOf( ":analysis:analysis-api-standalone:analysis-api-standalone-base", + ":analysis:analysis-api-standalone:analysis-api-fir-standalone-base", ":analysis:analysis-api-standalone", ) ) diff --git a/settings.gradle b/settings.gradle index 24ec8e1b24d..c25eeab48f4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -552,6 +552,7 @@ include ":generators:analysis-api-generator", ":analysis:project-structure", ":analysis:analysis-api-standalone", ":analysis:analysis-api-standalone:analysis-api-standalone-base", + ":analysis:analysis-api-standalone:analysis-api-fir-standalone-base", ":analysis:analysis-api-fe10", ":analysis:decompiled:decompiler-to-psi", ":analysis:decompiled:decompiler-to-stubs",