From 520e187e46f3acfffa7fa86f0e4face918c99841 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 23 Sep 2016 16:41:12 +0300 Subject: [PATCH] Clean application after test in compiler tests It's disposed after Disposer.dispose(myTestRootDisposable) in tearDown and mixing compiler tests with non-compiler tests may ruin classes initialization with "com.intellij.util.IncorrectOperationException: Sorry but parent: com.intellij.mock.MockApplicationEx@52439591 has already been disposed" (cherry picked from commit f3badb6) --- .../test/KotlinTestWithEnvironment.java | 25 ------------------- .../test/testFramework/KtUsefulTestCase.java | 24 ++++++++++++++++++ 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java index 1d7f53c0f2d..bb7bc83e6e3 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java +++ b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java @@ -16,23 +16,15 @@ package org.jetbrains.kotlin.test; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; -import org.jetbrains.kotlin.utils.ExceptionUtilsKt; - -import java.lang.reflect.Field; public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmentManagement { private KotlinCoreEnvironment environment; - private Application application; @Override protected void setUp() throws Exception { - application = ApplicationManager.getApplication(); - super.setUp(); environment = createEnvironment(); } @@ -42,23 +34,6 @@ public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmen removeEnvironment(); environment = null; super.tearDown(); - - if (application == null) { - resetApplicationToNull(); - } - - application = null; - } - - protected void resetApplicationToNull() { - try { - Field ourApplicationField = ApplicationManager.class.getDeclaredField("ourApplication"); - ourApplicationField.setAccessible(true); - ourApplicationField.set(null, null); - } - catch (Exception e) { - throw ExceptionUtilsKt.rethrow(e); - } } protected abstract KotlinCoreEnvironment createEnvironment() throws Exception; diff --git a/compiler/tests-common/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java b/compiler/tests-common/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java index 64f1dcf30ca..7ae4be7a88e 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java +++ b/compiler/tests-common/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java @@ -17,6 +17,8 @@ package org.jetbrains.kotlin.test.testFramework; import com.intellij.openapi.Disposable; +import com.intellij.openapi.application.Application; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; @@ -36,6 +38,7 @@ import junit.framework.TestCase; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.utils.ExceptionUtilsKt; import org.junit.Assert; import java.io.File; @@ -55,6 +58,8 @@ public abstract class KtUsefulTestCase extends TestCase { private static final Map TOTAL_SETUP_COST_MILLIS = new HashMap(); private static final Map TOTAL_TEARDOWN_COST_MILLIS = new HashMap(); + private Application application; + @NotNull protected final Disposable myTestRootDisposable = new Disposable() { @Override @@ -81,6 +86,8 @@ public abstract class KtUsefulTestCase extends TestCase { @Override protected void setUp() throws Exception { + application = ApplicationManager.getApplication(); + super.setUp(); String testName = FileUtil.sanitizeFileName(getTestName(true)); @@ -121,6 +128,23 @@ public abstract class KtUsefulTestCase extends TestCase { UIUtil.removeLeakingAppleListeners(); super.tearDown(); + + if (application == null) { + resetApplicationToNull(); + } + + application = null; + } + + protected void resetApplicationToNull() { + try { + Field ourApplicationField = ApplicationManager.class.getDeclaredField("ourApplication"); + ourApplicationField.setAccessible(true); + ourApplicationField.set(null, null); + } + catch (Exception e) { + throw ExceptionUtilsKt.rethrow(e); + } } private boolean hasTmpFilesToKeep() {