[Test/AA] Pass project disposable to getOrCreateApplicationEnvironment instead of application disposable

- The disposable passed to `getOrCreateApplicationEnvironment` should
  not actually be the application environment's disposable, which is
  created inside the function. Instead, it should be the project's
  disposable, which is used to track how many projects still rely on the
  shared application environment.
- This issue wasn't apparent before because there is no visible
  consequence when an application isn't disposed after all projects have
  been disposed (during tests). However, the solution for KT-63650
  relies on application environments being disposed after all projects
  are disposed, so that a new application environment with a different
  configuration can be created. (Only one shared application environment
  may be active at the same time.)

^KT-63650
This commit is contained in:
Marco Pennekamp
2023-11-28 19:23:33 +01:00
committed by Space Team
parent 85c4d6b67b
commit bba5447b12
10 changed files with 36 additions and 40 deletions
@@ -69,18 +69,17 @@ import java.nio.file.Paths
object StandaloneProjectFactory {
fun createProjectEnvironment(
projectDisposable: Disposable,
applicationDisposable: Disposable,
applicationEnvironmentMode: KotlinCoreApplicationEnvironmentMode,
compilerConfiguration: CompilerConfiguration = CompilerConfiguration(),
classLoader: ClassLoader = MockProject::class.java.classLoader,
): KotlinCoreProjectEnvironment {
val applicationEnvironment = KotlinCoreEnvironment.getOrCreateApplicationEnvironment(
applicationDisposable,
projectDisposable = projectDisposable,
compilerConfiguration,
applicationEnvironmentMode,
)
registerApplicationExtensionPoints(applicationEnvironment, applicationDisposable)
registerApplicationExtensionPoints(applicationEnvironment)
registerApplicationServices(applicationEnvironment)
@@ -138,10 +137,7 @@ object StandaloneProjectFactory {
}
}
private fun registerApplicationExtensionPoints(
applicationEnvironment: KotlinCoreApplicationEnvironment,
applicationDisposable: Disposable,
) {
private fun registerApplicationExtensionPoints(applicationEnvironment: KotlinCoreApplicationEnvironment) {
val applicationArea = applicationEnvironment.application.extensionArea
if (!applicationArea.hasExtensionPoint(AdditionalKDocResolutionProvider.EP_NAME)) {
@@ -162,7 +158,7 @@ object StandaloneProjectFactory {
ClassTypePointerFactory::class.java
)
applicationArea.getExtensionPoint(ClassTypePointerFactory.EP_NAME)
.registerExtension(PsiClassReferenceTypePointerFactory(), applicationDisposable)
.registerExtension(PsiClassReferenceTypePointerFactory(), applicationEnvironment.application)
}
}
}