AA: add an option to create Application env for production v.s. test mode

...and use production mode by default for AA standalone

^KT-59511 Fixed
This commit is contained in:
Jinseong Jeon
2023-06-19 23:55:42 -07:00
committed by Ilya Kirillov
parent 134b02c754
commit 799aadfacf
3 changed files with 13 additions and 5 deletions
@@ -62,11 +62,15 @@ object StandaloneProjectFactory {
fun createProjectEnvironment( fun createProjectEnvironment(
projectDisposable: Disposable, projectDisposable: Disposable,
applicationDisposable: Disposable, applicationDisposable: Disposable,
unitTestMode: Boolean = false,
compilerConfiguration: CompilerConfiguration = CompilerConfiguration(), compilerConfiguration: CompilerConfiguration = CompilerConfiguration(),
classLoader: ClassLoader = MockProject::class.java.classLoader classLoader: ClassLoader = MockProject::class.java.classLoader
): KotlinCoreProjectEnvironment { ): KotlinCoreProjectEnvironment {
val applicationEnvironment = val applicationEnvironment = if (unitTestMode)
KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForTests(applicationDisposable, compilerConfiguration) KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForTests(applicationDisposable, compilerConfiguration)
else
KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForProduction(applicationDisposable, compilerConfiguration)
registerApplicationExtensionPoints(applicationEnvironment, applicationDisposable) registerApplicationExtensionPoints(applicationEnvironment, applicationDisposable)
registerApplicationServices(applicationEnvironment.application) registerApplicationServices(applicationEnvironment.application)
@@ -12,6 +12,9 @@ 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.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
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
@@ -37,13 +40,11 @@ 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.load.kotlin.PackagePartProvider import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
public class StandaloneAnalysisAPISessionBuilder( public class StandaloneAnalysisAPISessionBuilder(
applicationDisposable: Disposable, applicationDisposable: Disposable,
projectDisposable: Disposable, projectDisposable: Disposable,
unitTestMode: Boolean,
classLoader: ClassLoader = MockProject::class.java.classLoader classLoader: ClassLoader = MockProject::class.java.classLoader
) { ) {
init { init {
@@ -59,10 +60,10 @@ public class StandaloneAnalysisAPISessionBuilder(
StandaloneProjectFactory.createProjectEnvironment( StandaloneProjectFactory.createProjectEnvironment(
projectDisposable, projectDisposable,
applicationDisposable, applicationDisposable,
unitTestMode,
classLoader = classLoader classLoader = classLoader
) )
init { init {
FirStandaloneServiceRegistrar.registerApplicationServices(kotlinCoreProjectEnvironment.environment.application) FirStandaloneServiceRegistrar.registerApplicationServices(kotlinCoreProjectEnvironment.environment.application)
} }
@@ -217,6 +218,7 @@ public class StandaloneAnalysisAPISessionBuilder(
public inline fun buildStandaloneAnalysisAPISession( public inline fun buildStandaloneAnalysisAPISession(
applicationDisposable: Disposable = Disposer.newDisposable("StandaloneAnalysisAPISession.application"), applicationDisposable: Disposable = Disposer.newDisposable("StandaloneAnalysisAPISession.application"),
projectDisposable: Disposable = Disposer.newDisposable("StandaloneAnalysisAPISession.project"), projectDisposable: Disposable = Disposer.newDisposable("StandaloneAnalysisAPISession.project"),
unitTestMode: Boolean = false,
withPsiDeclarationFromBinaryModuleProvider: Boolean = false, withPsiDeclarationFromBinaryModuleProvider: Boolean = false,
classLoader: ClassLoader = MockProject::class.java.classLoader, classLoader: ClassLoader = MockProject::class.java.classLoader,
init: StandaloneAnalysisAPISessionBuilder.() -> Unit init: StandaloneAnalysisAPISessionBuilder.() -> Unit
@@ -227,6 +229,7 @@ public inline fun buildStandaloneAnalysisAPISession(
return StandaloneAnalysisAPISessionBuilder( return StandaloneAnalysisAPISessionBuilder(
applicationDisposable, applicationDisposable,
projectDisposable, projectDisposable,
unitTestMode,
classLoader classLoader
).apply(init).build( ).apply(init).build(
withPsiDeclarationFromBinaryModuleProvider, withPsiDeclarationFromBinaryModuleProvider,
@@ -43,6 +43,7 @@ class AnalysisApiEnvironmentManagerImpl(
StandaloneProjectFactory.createProjectEnvironment( StandaloneProjectFactory.createProjectEnvironment(
testRootDisposable, testRootDisposable,
testServices.applicationDisposableProvider.getApplicationRootDisposable(), testServices.applicationDisposableProvider.getApplicationRootDisposable(),
unitTestMode = true
) )
} }