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
diff --git a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt
index 4ea19a8..1bcaf74 100644
--- a/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt
+++ b/analysis/analysis-api-standalone/analysis-api-standalone-base/src/org/jetbrains/kotlin/analysis/api/standalone/base/project/structure/StandaloneProjectFactory.kt
@@ -60,10 +60,14 @@
fun createProjectEnvironment(
projectDisposable: Disposable,
applicationDisposable: Disposable,
+ unitTestMode: Boolean = false,
compilerConfiguration: CompilerConfiguration = CompilerConfiguration(),
): KotlinCoreProjectEnvironment {
- val applicationEnvironment =
+ val applicationEnvironment = if (unitTestMode)
KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForTests(applicationDisposable, compilerConfiguration)
+ else
+ KotlinCoreEnvironment.getOrCreateApplicationEnvironmentForProduction(applicationDisposable, compilerConfiguration)
+
registerApplicationExtensionPoints(applicationEnvironment, applicationDisposable)
registerApplicationServices(applicationEnvironment.application)
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 f0f4cf1..5c25f9b 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
@@ -11,6 +11,9 @@
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
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.lifetime.KtDefaultLifetimeTokenProvider
import org.jetbrains.kotlin.analysis.api.lifetime.KtReadActionConfinementDefaultLifetimeTokenProvider
@@ -36,13 +39,11 @@
import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProviderImpl
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
import org.jetbrains.kotlin.psi.KtFile
-import kotlin.contracts.ExperimentalContracts
-import kotlin.contracts.InvocationKind
-import kotlin.contracts.contract
public class StandaloneAnalysisAPISessionBuilder(
applicationDisposable: Disposable,
projectDisposable: Disposable,
+ unitTestMode: Boolean,
) {
init {
// We depend on swing (indirectly through PSI or something), so we want to declare headless mode,
@@ -57,9 +58,9 @@
StandaloneProjectFactory.createProjectEnvironment(
projectDisposable,
applicationDisposable,
+ unitTestMode,
)
-
init {
FirStandaloneServiceRegistrar.registerApplicationServices(kotlinCoreProjectEnvironment.environment.application)
}
@@ -214,6 +215,7 @@
public inline fun buildStandaloneAnalysisAPISession(
applicationDisposable: Disposable = Disposer.newDisposable("StandaloneAnalysisAPISession.application"),
projectDisposable: Disposable = Disposer.newDisposable("StandaloneAnalysisAPISession.project"),
+ unitTestMode: Boolean = false,
withPsiDeclarationFromBinaryModuleProvider: Boolean = false,
init: StandaloneAnalysisAPISessionBuilder.() -> Unit
): StandaloneAnalysisAPISession {
@@ -223,6 +225,7 @@
return StandaloneAnalysisAPISessionBuilder(
applicationDisposable,
projectDisposable,
+ unitTestMode,
).apply(init).build(
withPsiDeclarationFromBinaryModuleProvider,
)
diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/AnalysisApiEnvironmentManager.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/AnalysisApiEnvironmentManager.kt
index 792be49..0f520fa 100644
--- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/AnalysisApiEnvironmentManager.kt
+++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/AnalysisApiEnvironmentManager.kt
@@ -43,6 +43,7 @@
StandaloneProjectFactory.createProjectEnvironment(
testRootDisposable,
testServices.applicationDisposableProvider.getApplicationRootDisposable(),
+ unitTestMode = true
)
}