diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index fbdd47b56ab..061e8e125e3 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -543,7 +543,14 @@ class KotlinCoreEnvironment private constructor( ): KotlinCoreApplicationEnvironment { synchronized(APPLICATION_LOCK) { if (ourApplicationEnvironment == null) { - val disposable = Disposer.newDisposable() + val disposable = if (unitTestMode) { + parentDisposable + } else { + // TODO this is a memory leak in the compiler, as this Disposable is not registered and thus is never disposed + // but using parentDisposable as disposable in compiler, causes access to application extension points after + // they was disposed, this needs to be fixed + Disposer.newDisposable("Disposable for the KotlinCoreApplicationEnvironment") + } ourApplicationEnvironment = createApplicationEnvironment(disposable, configuration, unitTestMode) ourProjectCount = 0 Disposer.register(disposable, Disposable { diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/AbstractLowLevelApiTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/AbstractLowLevelApiTest.kt index aa8f7fe64c2..972deab237f 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/AbstractLowLevelApiTest.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/AbstractLowLevelApiTest.kt @@ -76,6 +76,7 @@ abstract class AbstractLowLevelApiTest : TestWithDisposable() { protected fun runTest(path: String) { testDataPath = Paths.get(path) val testConfiguration = testConfiguration(path, configure) + Disposer.register(disposable, testConfiguration.rootDisposable) val testServices = testConfiguration.testServices val moduleStructure = testConfiguration.moduleStructureExtractor.splitTestDataByModules( path,