From e975eedbfb3eeceac46802762d5434081aafac8d Mon Sep 17 00:00:00 2001 From: Mikhail Bogdanov Date: Tue, 24 Mar 2020 17:28:18 +0100 Subject: [PATCH] Fix project leak through child test case disposable --- .../GradleMultiplatformHighlightingTest.kt | 27 ++++++++++++++----- .../gradle/ImportAndCheckHighlighting.kt | 3 ++- ...TestRunConfigurationAndHighlightingTest.kt | 7 ++++- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/GradleMultiplatformHighlightingTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/GradleMultiplatformHighlightingTest.kt index 3ef924c71d5..00b354940c5 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/GradleMultiplatformHighlightingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/GradleMultiplatformHighlightingTest.kt @@ -11,6 +11,7 @@ import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl import com.intellij.codeInsight.daemon.impl.HighlightInfo import com.intellij.lang.annotation.HighlightSeverity +import com.intellij.openapi.Disposable import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.impl.EditorImpl @@ -55,7 +56,12 @@ class GradleMultiplatformHighlightingTest : GradleImportingTestCase() { checkFiles( files.filter { it.extension == "kt" }, project, - object : GradleDaemonAnalyzerTestCase(testLineMarkers = true, checkWarnings = true, checkInfos = false) {} + object : GradleDaemonAnalyzerTestCase( + testLineMarkers = true, + checkWarnings = true, + checkInfos = false, + rootDisposable = testRootDisposable + ) {} ) } @@ -67,16 +73,21 @@ class GradleMultiplatformHighlightingTest : GradleImportingTestCase() { abstract class GradleDaemonAnalyzerTestCase( val testLineMarkers: Boolean, val checkWarnings: Boolean, - val checkInfos: Boolean + val checkInfos: Boolean, + private val rootDisposable: Disposable ) : DaemonAnalyzerTestCase() { override fun doTestLineMarkers() = testLineMarkers fun checkHighlighting(project: Project, editor: Editor) { myProject = project - runInEdtAndWait { - // This will prepare ExpectedHighlightingData, clear current editor from testing tags, and then - // call doCheckResult, which we override - checkHighlighting(editor, checkWarnings, checkInfos) + try { + runInEdtAndWait { + // This will prepare ExpectedHighlightingData, clear current editor from testing tags, and then + // call doCheckResult, which we override + checkHighlighting(editor, checkWarnings, checkInfos) + } + } finally { + myProject = null } } @@ -117,6 +128,10 @@ abstract class GradleDaemonAnalyzerTestCase( protected open fun performAdditionalChecksAfterHighlighting(editor: Editor) { } protected open fun renderAdditionalAttributeForTag(tag: TagInfo<*>): String? = null + + override fun getTestRootDisposable(): Disposable { + return rootDisposable; + } } internal fun checkFiles( diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/ImportAndCheckHighlighting.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/ImportAndCheckHighlighting.kt index 8850093e556..770599fdcf6 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/ImportAndCheckHighlighting.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/ImportAndCheckHighlighting.kt @@ -34,7 +34,8 @@ class ImportAndCheckHighlighting : MultiplePluginVersionGradleImportingTestCase( object : GradleDaemonAnalyzerTestCase( testLineMarkers = testLineMarkers, checkWarnings = checkWarnings, - checkInfos = false + checkInfos = false, + rootDisposable = testRootDisposable ) {} ) } diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleTestRunConfigurationAndHighlightingTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleTestRunConfigurationAndHighlightingTest.kt index 8fc91f8dd72..c2d3254f084 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleTestRunConfigurationAndHighlightingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleTestRunConfigurationAndHighlightingTest.kt @@ -49,7 +49,12 @@ class GradleTestRunConfigurationAndHighlightingTest : GradleImportingTestCase() checkFiles( files.filter { it.extension == "kt" }, project, - object : GradleDaemonAnalyzerTestCase(testLineMarkers = true, checkWarnings = true, checkInfos = false) { + object : GradleDaemonAnalyzerTestCase( + testLineMarkers = true, + checkWarnings = true, + checkInfos = false, + rootDisposable = testRootDisposable + ) { override fun renderAdditionalAttributeForTag(tag: TagsTestDataUtil.TagInfo<*>): String? { val lineMarkerInfo = tag.data as? LineMarkerInfo<*> ?: return null