[Analysis API Standalone] commonize logic for Analysis API FIR service registration between standalone and tests
This commit is contained in:
committed by
Space Team
parent
feaf9acd1d
commit
fbcf73eb42
@@ -34,6 +34,7 @@ dependencies {
|
|||||||
testApi(projectTests(":compiler:fir:analysis-tests:legacy-fir-tests"))
|
testApi(projectTests(":compiler:fir:analysis-tests:legacy-fir-tests"))
|
||||||
testApi(projectTests(":analysis:analysis-api-impl-base"))
|
testApi(projectTests(":analysis:analysis-api-impl-base"))
|
||||||
testApi(projectTests(":analysis:decompiled:decompiler-to-file-stubs"))
|
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-file-stubs"))
|
||||||
testApi(project(":analysis:decompiled:decompiler-to-psi"))
|
testApi(project(":analysis:decompiled:decompiler-to-psi"))
|
||||||
testApi(project(":kotlin-test:kotlin-test-junit"))
|
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() }
|
||||||
|
}
|
||||||
+66
@@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+15
@@ -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:symbol-light-classes"))
|
||||||
api(project(":analysis:decompiled:light-classes-for-decompiled"))
|
api(project(":analysis:decompiled:light-classes-for-decompiled"))
|
||||||
api(project(":analysis:analysis-api-standalone:analysis-api-standalone-base"))
|
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-test-framework"))
|
||||||
testApi(projectTests(":analysis:analysis-api-impl-base"))
|
testApi(projectTests(":analysis:analysis-api-impl-base"))
|
||||||
testApi(projectTests(":analysis:analysis-api-fir"))
|
testApi(projectTests(":analysis:analysis-api-fir"))
|
||||||
|
|||||||
-26
@@ -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
-41
@@ -10,22 +10,13 @@ import com.intellij.openapi.application.Application
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.util.Disposer
|
import com.intellij.openapi.util.Disposer
|
||||||
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
|
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 com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
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.KtDefaultLifetimeTokenProvider
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtReadActionConfinementDefaultLifetimeTokenProvider
|
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.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.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.KtModuleScopeProvider
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl
|
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.ProjectStructureProvider
|
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.project.structure.impl.getSourceFilePaths
|
||||||
import org.jetbrains.kotlin.analysis.providers.*
|
import org.jetbrains.kotlin.analysis.providers.*
|
||||||
import org.jetbrains.kotlin.analysis.providers.impl.*
|
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.KotlinCoreProjectEnvironment
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.setupIdeaStandaloneExecution
|
import org.jetbrains.kotlin.cli.jvm.compiler.setupIdeaStandaloneExecution
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
|
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
|
||||||
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
|
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider
|
||||||
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl
|
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.load.kotlin.PackagePartProvider
|
||||||
import org.jetbrains.kotlin.psi.KotlinReferenceProvidersService
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import kotlin.contracts.ExperimentalContracts
|
import kotlin.contracts.ExperimentalContracts
|
||||||
import kotlin.contracts.InvocationKind
|
import kotlin.contracts.InvocationKind
|
||||||
@@ -75,6 +59,11 @@ public class StandaloneAnalysisAPISessionBuilder(
|
|||||||
applicationDisposable,
|
applicationDisposable,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
init {
|
||||||
|
FirStandaloneServiceRegistrar.registerApplicationServices(kotlinCoreProjectEnvironment.environment.application)
|
||||||
|
}
|
||||||
|
|
||||||
public val application: Application = kotlinCoreProjectEnvironment.environment.application
|
public val application: Application = kotlinCoreProjectEnvironment.environment.application
|
||||||
|
|
||||||
public val project: Project = kotlinCoreProjectEnvironment.project
|
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>) {
|
public fun <T : Any> registerProjectExtensionPoint(extensionDescriptor: ProjectExtensionDescriptor<T>) {
|
||||||
extensionDescriptor.registerExtensionPoint(project)
|
extensionDescriptor.registerExtensionPoint(project)
|
||||||
}
|
}
|
||||||
@@ -127,6 +112,10 @@ public class StandaloneAnalysisAPISessionBuilder(
|
|||||||
) {
|
) {
|
||||||
val project = kotlinCoreProjectEnvironment.project
|
val project = kotlinCoreProjectEnvironment.project
|
||||||
project.apply {
|
project.apply {
|
||||||
|
FirStandaloneServiceRegistrar.registerProjectServices(project)
|
||||||
|
FirStandaloneServiceRegistrar.registerProjectExtensionPoints(project)
|
||||||
|
FirStandaloneServiceRegistrar.registerProjectModelServices(project, kotlinCoreProjectEnvironment.parentDisposable)
|
||||||
|
|
||||||
registerService(KotlinModificationTrackerFactory::class.java, KotlinStaticModificationTrackerFactory::class.java)
|
registerService(KotlinModificationTrackerFactory::class.java, KotlinStaticModificationTrackerFactory::class.java)
|
||||||
registerService(KtDefaultLifetimeTokenProvider::class.java, KtReadActionConfinementDefaultLifetimeTokenProvider::class.java)
|
registerService(KtDefaultLifetimeTokenProvider::class.java, KtReadActionConfinementDefaultLifetimeTokenProvider::class.java)
|
||||||
|
|
||||||
@@ -144,7 +133,6 @@ public class StandaloneAnalysisAPISessionBuilder(
|
|||||||
registerService(KotlinDeclarationProviderMerger::class.java, KotlinStaticDeclarationProviderMerger(this))
|
registerService(KotlinDeclarationProviderMerger::class.java, KotlinStaticDeclarationProviderMerger(this))
|
||||||
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(project, ktFiles))
|
registerService(KotlinPackageProviderFactory::class.java, KotlinStaticPackageProviderFactory(project, ktFiles))
|
||||||
|
|
||||||
registerService(KtAnalysisSessionProvider::class.java, KtFirAnalysisSessionProvider(this))
|
|
||||||
registerService(
|
registerService(
|
||||||
FirSealedClassInheritorsProcessorFactory::class.java,
|
FirSealedClassInheritorsProcessorFactory::class.java,
|
||||||
object : FirSealedClassInheritorsProcessorFactory() {
|
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(
|
registerService(
|
||||||
PackagePartProviderFactory::class.java,
|
PackagePartProviderFactory::class.java,
|
||||||
KotlinStaticPackagePartProviderFactory(packagePartProvider)
|
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() {
|
private fun registerPsiDeclarationFromBinaryModuleProvider() {
|
||||||
@@ -216,8 +187,6 @@ public class StandaloneAnalysisAPISessionBuilder(
|
|||||||
modules,
|
modules,
|
||||||
allSourceFiles,
|
allSourceFiles,
|
||||||
)
|
)
|
||||||
registerProjectExtensionPoints()
|
|
||||||
|
|
||||||
val project = kotlinCoreProjectEnvironment.project
|
val project = kotlinCoreProjectEnvironment.project
|
||||||
val ktFiles = allSourceFiles.filterIsInstance<KtFile>()
|
val ktFiles = allSourceFiles.filterIsInstance<KtFile>()
|
||||||
val libraryRoots = StandaloneProjectFactory.getAllBinaryRoots(modules, kotlinCoreProjectEnvironment)
|
val libraryRoots = StandaloneProjectFactory.getAllBinaryRoots(modules, kotlinCoreProjectEnvironment)
|
||||||
|
|||||||
-1
@@ -133,7 +133,6 @@ internal fun configureProjectEnvironment(
|
|||||||
KotlinFirReferenceContributor::class.java
|
KotlinFirReferenceContributor::class.java
|
||||||
)
|
)
|
||||||
|
|
||||||
RegisterComponentService.registerLLFirResolveSessionService(project)
|
|
||||||
project.registerService(
|
project.registerService(
|
||||||
FirSealedClassInheritorsProcessorFactory::class.java,
|
FirSealedClassInheritorsProcessorFactory::class.java,
|
||||||
object : FirSealedClassInheritorsProcessorFactory() {
|
object : FirSealedClassInheritorsProcessorFactory() {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ dependencies {
|
|||||||
implementation(project(":analysis:analysis-api-providers"))
|
implementation(project(":analysis:analysis-api-providers"))
|
||||||
implementation(project(":analysis:analysis-api"))
|
implementation(project(":analysis:analysis-api"))
|
||||||
implementation(project(":analysis:analysis-internal-utils"))
|
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-compiler"))
|
||||||
implementation(project(":kotlin-scripting-common"))
|
implementation(project(":kotlin-scripting-common"))
|
||||||
|
|
||||||
@@ -40,6 +41,7 @@ dependencies {
|
|||||||
testApi(projectTests(":compiler:tests-common-new"))
|
testApi(projectTests(":compiler:tests-common-new"))
|
||||||
|
|
||||||
testImplementation("org.opentest4j:opentest4j:1.2.0")
|
testImplementation("org.opentest4j:opentest4j:1.2.0")
|
||||||
|
testImplementation(project(":analysis:analysis-api-standalone:analysis-api-fir-standalone-base"))
|
||||||
testApi(toolsJar())
|
testApi(toolsJar())
|
||||||
testApi(projectTests(":compiler:tests-common"))
|
testApi(projectTests(":compiler:tests-common"))
|
||||||
testApi(projectTests(":compiler:fir:analysis-tests:legacy-fir-tests"))
|
testApi(projectTests(":compiler:fir:analysis-tests:legacy-fir-tests"))
|
||||||
@@ -73,6 +75,7 @@ allprojects {
|
|||||||
tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*>> {
|
tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*>> {
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
freeCompilerArgs += "-opt-in=org.jetbrains.kotlin.fir.symbols.SymbolInternals"
|
freeCompilerArgs += "-opt-in=org.jetbrains.kotlin.fir.symbols.SymbolInternals"
|
||||||
|
freeCompilerArgs += "-opt-in=org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirInternals"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -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.analysis.low.level.api.fir.sessions.LLFirSession
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
|
||||||
internal class LLFirGlobalResolveComponents(val project: Project) {
|
@LLFirInternals
|
||||||
|
class LLFirGlobalResolveComponents(val project: Project) {
|
||||||
companion object {
|
companion object {
|
||||||
fun getInstance(project: Project): LLFirGlobalResolveComponents {
|
fun getInstance(project: Project): LLFirGlobalResolveComponents {
|
||||||
return project.getService(LLFirGlobalResolveComponents::class.java)
|
return project.getService(LLFirGlobalResolveComponents::class.java)
|
||||||
@@ -22,6 +23,6 @@ internal class LLFirGlobalResolveComponents(val project: Project) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val checker: LLFirLazyResolveContractChecker = LLFirLazyResolveContractChecker()
|
internal val checker: LLFirLazyResolveContractChecker = LLFirLazyResolveContractChecker()
|
||||||
val lockProvider: LLFirLockProvider = LLFirLockProvider(checker)
|
internal val lockProvider: LLFirLockProvider = LLFirLockProvider(checker)
|
||||||
}
|
}
|
||||||
+9
@@ -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
|
||||||
+4
-2
@@ -10,12 +10,13 @@ import com.intellij.psi.util.CachedValue
|
|||||||
import com.intellij.psi.util.CachedValueProvider
|
import com.intellij.psi.util.CachedValueProvider
|
||||||
import com.intellij.psi.util.CachedValuesManager
|
import com.intellij.psi.util.CachedValuesManager
|
||||||
import com.intellij.util.containers.CollectionFactory
|
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.low.level.api.fir.util.checkCanceled
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.*
|
import org.jetbrains.kotlin.analysis.project.structure.*
|
||||||
import org.jetbrains.kotlin.fir.FirModuleDataImpl
|
import org.jetbrains.kotlin.fir.FirModuleDataImpl
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
|
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.name.Name
|
||||||
import org.jetbrains.kotlin.platform.JsPlatform
|
import org.jetbrains.kotlin.platform.JsPlatform
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatform
|
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 org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||||
import java.util.concurrent.ConcurrentMap
|
import java.util.concurrent.ConcurrentMap
|
||||||
|
|
||||||
internal class LLFirSessionCache(private val project: Project) {
|
@LLFirInternals
|
||||||
|
class LLFirSessionCache(private val project: Project) {
|
||||||
companion object {
|
companion object {
|
||||||
fun getInstance(project: Project): LLFirSessionCache {
|
fun getInstance(project: Project): LLFirSessionCache {
|
||||||
return project.getService(LLFirSessionCache::class.java)
|
return project.getService(LLFirSessionCache::class.java)
|
||||||
|
|||||||
+3
-1
@@ -9,6 +9,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
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.JvmFirDeserializedSymbolProviderFactory
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.LLFirModuleData
|
||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.createJavaSymbolProvider
|
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.load.kotlin.PackagePartProvider
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
|
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
|
||||||
|
|
||||||
internal class JvmStubBasedDeserializedSymbolProviderFactory : JvmFirDeserializedSymbolProviderFactory() {
|
@LLFirInternals
|
||||||
|
class JvmStubBasedDeserializedSymbolProviderFactory : JvmFirDeserializedSymbolProviderFactory() {
|
||||||
override fun createJvmFirDeserializedSymbolProviders(
|
override fun createJvmFirDeserializedSymbolProviders(
|
||||||
project: Project,
|
project: Project,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
|
|||||||
+10
-42
@@ -7,71 +7,39 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.test.base
|
|||||||
|
|
||||||
import com.intellij.mock.MockApplication
|
import com.intellij.mock.MockApplication
|
||||||
import com.intellij.mock.MockProject
|
import com.intellij.mock.MockProject
|
||||||
import com.intellij.psi.PsiElementFinder
|
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.FirStandaloneServiceRegistrar
|
||||||
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.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory
|
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.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.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.project.structure.KtCompilerPluginsProvider
|
||||||
import org.jetbrains.kotlin.analysis.providers.PackagePartProviderFactory
|
import org.jetbrains.kotlin.analysis.providers.PackagePartProviderFactory
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
|
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.TestInfrastructureInternals
|
||||||
import org.jetbrains.kotlin.test.impl.testConfiguration
|
import org.jetbrains.kotlin.test.impl.testConfiguration
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
|
|
||||||
object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() {
|
object AnalysisApiFirTestServiceRegistrar : AnalysisApiTestServiceRegistrar() {
|
||||||
override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) {
|
override fun registerProjectExtensionPoints(project: MockProject, testServices: TestServices) {
|
||||||
IrGenerationExtension.registerExtensionPoint(project)
|
FirStandaloneServiceRegistrar.registerProjectExtensionPoints(project)
|
||||||
FirExtensionRegistrarAdapter.registerExtensionPoint(project)
|
|
||||||
LLFirSessionConfigurator.registerExtensionPoint(project)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(KtAnalysisApiInternals::class)
|
|
||||||
override fun registerProjectServices(project: MockProject, testServices: TestServices) {
|
override fun registerProjectServices(project: MockProject, testServices: TestServices) {
|
||||||
project.apply {
|
project.apply {
|
||||||
registerService(KtAnalysisSessionProvider::class.java, KtFirAnalysisSessionProvider(this))
|
FirStandaloneServiceRegistrar.registerProjectServices(project)
|
||||||
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))
|
|
||||||
|
|
||||||
registerService(KotlinAsJavaSupport::class.java, SymbolKotlinAsJavaSupport(project))
|
registerService(FirSealedClassInheritorsProcessorFactory::class.java, LLFirSealedClassInheritorsProcessorFactoryForTests())
|
||||||
|
registerService(PackagePartProviderFactory::class.java, PackagePartProviderTestImpl(testServices))
|
||||||
registerService(KtCompilerPluginsProvider::class.java, NoOpKtCompilerPluginsProvider)
|
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)
|
@OptIn(TestInfrastructureInternals::class)
|
||||||
override fun registerProjectModelServices(project: MockProject, testServices: TestServices) {
|
override fun registerProjectModelServices(project: MockProject, testServices: TestServices) {
|
||||||
with(PsiElementFinder.EP.getPoint(project)) {
|
FirStandaloneServiceRegistrar.registerProjectModelServices(project, testServices.testConfiguration.rootDisposable)
|
||||||
registerExtension(JavaElementFinder(project), testServices.testConfiguration.rootDisposable)
|
|
||||||
registerExtension(PsiElementFinderImpl(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(
|
publishJarsForIde(
|
||||||
listOf(
|
listOf(
|
||||||
":analysis:analysis-api-standalone:analysis-api-standalone-base",
|
":analysis:analysis-api-standalone:analysis-api-standalone-base",
|
||||||
|
":analysis:analysis-api-standalone:analysis-api-fir-standalone-base",
|
||||||
":analysis:analysis-api-standalone",
|
":analysis:analysis-api-standalone",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -552,6 +552,7 @@ include ":generators:analysis-api-generator",
|
|||||||
":analysis:project-structure",
|
":analysis:project-structure",
|
||||||
":analysis:analysis-api-standalone",
|
":analysis:analysis-api-standalone",
|
||||||
":analysis:analysis-api-standalone:analysis-api-standalone-base",
|
":analysis:analysis-api-standalone:analysis-api-standalone-base",
|
||||||
|
":analysis:analysis-api-standalone:analysis-api-fir-standalone-base",
|
||||||
":analysis:analysis-api-fe10",
|
":analysis:analysis-api-fe10",
|
||||||
":analysis:decompiled:decompiler-to-psi",
|
":analysis:decompiled:decompiler-to-psi",
|
||||||
":analysis:decompiled:decompiler-to-stubs",
|
":analysis:decompiled:decompiler-to-stubs",
|
||||||
|
|||||||
Reference in New Issue
Block a user