From 145876a2354873b7e55b525e06eb3c7bfb6a2863 Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Thu, 7 Dec 2023 20:51:24 +0100 Subject: [PATCH] [K/N] Fix disposable leak in `ExtTestCaseGroupProvider.isIgnoredTarget` - `isIgnoredTarget` creates a new `ExtTestDataFileStructureFactory`, which requests a shared application environment via `createPsiFactory`. ^KT-64099 --- .../support/group/ExtTestCaseGroupProvider.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/group/ExtTestCaseGroupProvider.kt b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/group/ExtTestCaseGroupProvider.kt index af557e8893e..efd381e521b 100644 --- a/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/group/ExtTestCaseGroupProvider.kt +++ b/native/native.tests/tests/org/jetbrains/kotlin/konan/test/blackbox/support/group/ExtTestCaseGroupProvider.kt @@ -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 {