[K/N] Fix disposable leak in ExtTestCaseGroupProvider.isIgnoredTarget

- `isIgnoredTarget` creates a new `ExtTestDataFileStructureFactory`,
  which requests a shared application environment via
  `createPsiFactory`.

^KT-64099
This commit is contained in:
Marco Pennekamp
2023-12-07 20:51:24 +01:00
committed by Space Team
parent 24a2f72a6b
commit 145876a235
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.konan.test.blackbox.support.group
import com.intellij.core.CoreApplicationEnvironment
import com.intellij.mock.MockProject
import com.intellij.openapi.Disposable
import com.intellij.openapi.util.Disposer
import com.intellij.pom.PomModel
import com.intellij.pom.core.impl.PomModelImpl
import com.intellij.pom.tree.TreeAspect
@@ -608,7 +609,7 @@ private class ExtTestDataFileSettings(
private typealias SharedModuleGenerator = (sharedModulesDir: File) -> TestModule.Shared?
private typealias SharedModuleCache = (moduleName: String, generator: SharedModuleGenerator) -> TestModule.Shared?
private class ExtTestDataFileStructureFactory(parentDisposable: Disposable?) : TestDisposable(parentDisposable) {
private class ExtTestDataFileStructureFactory(parentDisposable: Disposable) : TestDisposable(parentDisposable) {
private val psiFactory = createPsiFactory(parentDisposable = this)
inner class ExtTestDataFileStructure(originalTestDataFile: File, sourceTransformers: ExternalSourceTransformers) {
@@ -890,9 +891,13 @@ internal fun isDisabledNative(pipelineType: PipelineType, directives: Directives
}
internal fun Settings.isIgnoredTarget(testDataFile: File): Boolean {
val extTestDataFileStructure =
ExtTestDataFileStructureFactory(parentDisposable = null).ExtTestDataFileStructure(testDataFile, emptyList())
return isIgnoredTarget(extTestDataFileStructure.directives)
val disposable = Disposer.newDisposable("Disposable for ExtTestCaseGroupProvider.isIgnoredTarget")
try {
val extTestDataFileStructure = ExtTestDataFileStructureFactory(disposable).ExtTestDataFileStructure(testDataFile, emptyList())
return isIgnoredTarget(extTestDataFileStructure.directives)
} finally {
Disposer.dispose(disposable)
}
}
internal fun Settings.isIgnoredTarget(directives: Directives): Boolean {