diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/BaseFixture.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/BaseFixture.java index c0381fc09335..7b56807c3055 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/BaseFixture.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/BaseFixture.java @@ -47,11 +47,19 @@ public class BaseFixture implements IdeaTestFixture { public void tearDown() throws Exception { Assert.assertTrue("setUp() has not been called", myInitialized); Assert.assertFalse("tearDown() already has been called", myDisposed); - EdtTestUtil.runInEdtAndWait(() -> Disposer.dispose(myTestRootDisposable)); + disposeRootDisposable(); myDisposed = true; resetClassFields(getClass()); } + protected void disposeRootDisposable() { + EdtTestUtil.runInEdtAndWait(() -> { + if (!Disposer.isDisposed(myTestRootDisposable)) { + Disposer.dispose(myTestRootDisposable); + } + }); + } + private void resetClassFields(final Class aClass) { try { UsefulTestCase.clearDeclaredFields(this, aClass); diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 4d3e81b9ba5b..a724e12b61d9 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -1237,6 +1237,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig myChooseByNamePopup = null; }) // don't use method references here to make stack trace reading easier + .append(() -> disposeRootDisposable()) .append(() -> EdtTestUtil.runInEdtAndWait(() -> myProjectFixture.tearDown())) .append(() -> EdtTestUtil.runInEdtAndWait(() -> myTempDirFixture.tearDown())) .append(() -> super.tearDown())