diff --git a/platform/testFramework/src/_LastInSuiteTest.java b/platform/testFramework/src/_LastInSuiteTest.java index 2af9450fe0df..91c3726d5f8e 100644 --- a/platform/testFramework/src/_LastInSuiteTest.java +++ b/platform/testFramework/src/_LastInSuiteTest.java @@ -21,6 +21,7 @@ import com.intellij.openapi.application.impl.ApplicationImpl; import com.intellij.openapi.util.Disposer; import com.intellij.testFramework.LeakHunter; import com.intellij.testFramework.LightPlatformTestCase; +import com.intellij.testFramework.PlatformTestUtil; import com.intellij.util.ReflectionUtil; import com.intellij.util.concurrency.AppExecutorUtil; import com.intellij.util.concurrency.AppScheduledExecutorService; @@ -49,8 +50,8 @@ public class _LastInSuiteTest extends TestCase { throw new RuntimeException(e); } - // disposes default project too - LightPlatformTestCase.closeAndDeleteProject(); + // disposes default projects too + PlatformTestUtil.cleanupAllProjects(); ApplicationImpl application = (ApplicationImpl)ApplicationManager.getApplication(); System.out.println(application.writeActionStatistics()); System.out.println(ActionUtil.ACTION_UPDATE_PAUSES.statistics()); diff --git a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java index 72c6c22e1d3d..63dc43ac237e 100644 --- a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java @@ -135,6 +135,10 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da private static LightProjectDescriptor ourProjectDescriptor; private ThreadTracker myThreadTracker; + + static { + PlatformTestUtil.registerProjectCleanup(LightPlatformTestCase::closeAndDeleteProject); + } /** * @return Project to be used in tests for example for project components retrieval. diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java b/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java index 156cb516ab59..90d79177c893 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformTestUtil.java @@ -76,6 +76,7 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.*; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicBoolean; import java.util.jar.JarFile; @@ -88,6 +89,8 @@ public class PlatformTestUtil { public static final boolean SKIP_HEADLESS = GraphicsEnvironment.isHeadless(); public static final boolean SKIP_SLOW = Boolean.getBoolean("skip.slow.tests.locally"); + + private static final List ourProjectCleanups = new CopyOnWriteArrayList<>(); @NotNull public static String getTestName(@NotNull String name, boolean lowercaseFirstLetter) { @@ -956,4 +959,16 @@ public class PlatformTestUtil { }); return refs; } + + public static void registerProjectCleanup(@NotNull Runnable cleanup) { + ourProjectCleanups.add(cleanup); + } + + public static void cleanupAllProjects() { + for (Runnable each : ourProjectCleanups) { + each.run(); + } + ourProjectCleanups.clear(); + } + } \ No newline at end of file