[Analysis API Standalone] commonize logic for Analysis API FIR service registration between standalone and tests

This commit is contained in:
Ilya Kirillov
2023-05-11 22:56:20 +02:00
committed by Space Team
parent feaf9acd1d
commit fbcf73eb42
16 changed files with 150 additions and 116 deletions
@@ -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"))
@@ -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() }
}
@@ -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)
}
}
}
@@ -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)
}
@@ -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"))
@@ -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));
}
}
@@ -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 <T : Any> registerProjectExtensionPoint(extensionDescriptor: ProjectExtensionDescriptor<T>) {
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<KtFile>()
val libraryRoots = StandaloneProjectFactory.getAllBinaryRoots(modules, kotlinCoreProjectEnvironment)
@@ -133,7 +133,6 @@ internal fun configureProjectEnvironment(
KotlinFirReferenceContributor::class.java
)
RegisterComponentService.registerLLFirResolveSessionService(project)
project.registerService(
FirSealedClassInheritorsProcessorFactory::class.java,
object : FirSealedClassInheritorsProcessorFactory() {
@@ -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<org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*>> {
kotlinOptions {
freeCompilerArgs += "-opt-in=org.jetbrains.kotlin.fir.symbols.SymbolInternals"
freeCompilerArgs += "-opt-in=org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirInternals"
}
}
}
@@ -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)
}
@@ -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
@@ -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)
@@ -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,
@@ -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)
}
}
@@ -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",
)
)
+1
View File
@@ -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",