From 51a97ec4a5e8f0f8066ff49ee24b87b4795ac44f Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 21 Oct 2011 15:18:31 +0200 Subject: [PATCH] correct way of allowing to mix CoreEnvironment-based tests with regular ones --- .../application/ApplicationManager.java | 21 +++++++++++++++++++ .../com/intellij/core/CoreEnvironment.java | 6 +++--- .../application/ex/ApplicationManagerEx.java | 21 ------------------- .../application/impl/ApplicationImpl.java | 3 +-- .../com/intellij/ide/ActivityMonitorTest.java | 7 +++---- .../intellij/idea/IdeaTestApplication.java | 3 +-- .../testFramework/FlyIdeaTestCase.java | 3 ++- .../testFramework/PlatformLiteFixture.java | 3 +-- 8 files changed, 32 insertions(+), 35 deletions(-) diff --git a/platform/core-api/src/com/intellij/openapi/application/ApplicationManager.java b/platform/core-api/src/com/intellij/openapi/application/ApplicationManager.java index c15cb1f55040..79de477d4d7e 100644 --- a/platform/core-api/src/com/intellij/openapi/application/ApplicationManager.java +++ b/platform/core-api/src/com/intellij/openapi/application/ApplicationManager.java @@ -15,6 +15,10 @@ */ package com.intellij.openapi.application; +import com.intellij.openapi.Disposable; +import com.intellij.openapi.util.Disposer; +import org.jetbrains.annotations.NotNull; + /** * Provides access to the Application. */ @@ -29,4 +33,21 @@ public class ApplicationManager { public static Application getApplication(){ return ourApplication; } + + private static void setApplication(Application instance) { + ourApplication = instance; + CachedSingletonsRegistry.cleanupCachedFields(); + } + + public static void setApplication(Application instance, @NotNull Disposable parent) { + final Application old = ourApplication; + Disposer.register(parent, new Disposable() { + public void dispose() { + if (old != null) { // to prevent NPEs in threads still running + setApplication(old); + } + } + }); + setApplication(instance); + } } diff --git a/platform/core-impl/src/com/intellij/core/CoreEnvironment.java b/platform/core-impl/src/com/intellij/core/CoreEnvironment.java index 67ee2d29ee9c..0e35dd42c784 100644 --- a/platform/core-impl/src/com/intellij/core/CoreEnvironment.java +++ b/platform/core-impl/src/com/intellij/core/CoreEnvironment.java @@ -71,6 +71,8 @@ public class CoreEnvironment { protected final PsiManagerImpl myPsiManager; public CoreEnvironment(Disposable parentDisposable) { + Extensions.cleanRootArea(parentDisposable); + myFileTypeRegistry = new CoreFileTypeRegistry(); //noinspection AssignmentToStaticFieldFromInstanceMethod FileTypeRegistry.ourInstanceGetter = new Getter() { @@ -90,9 +92,7 @@ public class CoreEnvironment { }; myApplication = new MockApplication(parentDisposable); - new ApplicationManager() {{ - ourApplication = myApplication; - }}; + ApplicationManager.setApplication(myApplication, parentDisposable); myLocalFileSystem = new CoreLocalFileSystem(); myJarFileSystem = new CoreJarFileSystem(); diff --git a/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationManagerEx.java b/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationManagerEx.java index 27fc44b0b3ff..a10f828914c2 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationManagerEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/ex/ApplicationManagerEx.java @@ -15,12 +15,8 @@ */ package com.intellij.openapi.application.ex; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.CachedSingletonsRegistry; import com.intellij.openapi.application.impl.ApplicationImpl; -import com.intellij.openapi.util.Disposer; import com.intellij.ui.Splash; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -42,21 +38,4 @@ public class ApplicationManagerEx extends ApplicationManager { @Nullable Splash splash) { new ApplicationImpl(internal, isUnitTestMode, isHeadlessMode, isCommandline, appName, splash); } - - private static void setApplication(Application instance) { - ourApplication = instance; - CachedSingletonsRegistry.cleanupCachedFields(); - } - - public static void setApplication(Application instance, @NotNull Disposable parent) { - final Application old = ourApplication; - Disposer.register(parent, new Disposable() { - public void dispose() { - if (old != null) { // to prevent NPEs in threads still running - setApplication(old); - } - } - }); - setApplication(instance); - } } diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index 255322e13048..119296bfb879 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -26,7 +26,6 @@ import com.intellij.idea.StartupUtil; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.*; import com.intellij.openapi.application.ex.ApplicationEx; -import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.components.RoamingType; import com.intellij.openapi.components.StateStorageException; @@ -194,7 +193,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application Splash splash) { super(null); - ApplicationManagerEx.setApplication(this, myLastDisposable); // reset back to null only when all components already disposed + ApplicationManager.setApplication(this, myLastDisposable); // reset back to null only when all components already disposed getPicoContainer().registerComponentInstance(Application.class, this); diff --git a/platform/platform-impl/testSrc/com/intellij/ide/ActivityMonitorTest.java b/platform/platform-impl/testSrc/com/intellij/ide/ActivityMonitorTest.java index a74b9e07e9ca..9dc4c63bea21 100644 --- a/platform/platform-impl/testSrc/com/intellij/ide/ActivityMonitorTest.java +++ b/platform/platform-impl/testSrc/com/intellij/ide/ActivityMonitorTest.java @@ -18,8 +18,8 @@ package com.intellij.ide; import com.intellij.mock.MockApplication; import com.intellij.mock.MockProject; import com.intellij.mock.MockProjectEx; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.application.impl.ModalityStateEx; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.BusyObject; @@ -44,7 +44,7 @@ public class ActivityMonitorTest extends UsefulTestCase { myCurrentState = ModalityState.NON_MODAL; final ModalityStateEx any = new ModalityStateEx(); - ApplicationManagerEx.setApplication(new MockApplication(getTestRootDisposable()) { + ApplicationManager.setApplication(new MockApplication(getTestRootDisposable()) { @NotNull @Override public ModalityState getCurrentModalityState() { @@ -55,8 +55,7 @@ public class ActivityMonitorTest extends UsefulTestCase { public ModalityState getAnyModalityState() { return any; } - - },getTestRootDisposable()); + }, getTestRootDisposable()); myMonitor = new UiActivityMonitorImpl(); disposeOnTearDown(myMonitor); } diff --git a/platform/testFramework/src/com/intellij/idea/IdeaTestApplication.java b/platform/testFramework/src/com/intellij/idea/IdeaTestApplication.java index 99692b6b6c93..c01ee2749a08 100644 --- a/platform/testFramework/src/com/intellij/idea/IdeaTestApplication.java +++ b/platform/testFramework/src/com/intellij/idea/IdeaTestApplication.java @@ -24,7 +24,6 @@ import com.intellij.openapi.application.Result; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.application.ex.ApplicationEx; import com.intellij.openapi.application.ex.ApplicationManagerEx; -import com.intellij.openapi.application.impl.ApplicationImpl; import com.intellij.openapi.util.Disposer; import org.jetbrains.annotations.Nullable; @@ -45,7 +44,7 @@ public class IdeaTestApplication extends CommandLineApplication implements Dispo } public static synchronized IdeaTestApplication getInstance(@Nullable final String configPath) { - final boolean isForeignApp = !(ApplicationManager.getApplication() instanceof ApplicationImpl); + final boolean isForeignApp = /*!(ApplicationManager.getApplication() instanceof ApplicationImpl);*/ false; if (ourInstance == null || isForeignApp) { if (isForeignApp) { disposeInstance(); diff --git a/platform/testFramework/src/com/intellij/testFramework/FlyIdeaTestCase.java b/platform/testFramework/src/com/intellij/testFramework/FlyIdeaTestCase.java index 5f6aa77c9ae7..134347e19063 100644 --- a/platform/testFramework/src/com/intellij/testFramework/FlyIdeaTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/FlyIdeaTestCase.java @@ -3,6 +3,7 @@ package com.intellij.testFramework; import com.intellij.mock.MockApplicationEx; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Application; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtil; @@ -28,7 +29,7 @@ public abstract class FlyIdeaTestCase extends TestCase { return old != null ? old.executeOnPooledThread(action) : super.executeOnPooledThread(action); } }; - ApplicationManagerEx.setApplication(app, myRootDisposable); + ApplicationManager.setApplication(app, myRootDisposable); } public File getTempDir() throws IOException { diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformLiteFixture.java b/platform/testFramework/src/com/intellij/testFramework/PlatformLiteFixture.java index 63599a8818ad..b2e62c279b97 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformLiteFixture.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformLiteFixture.java @@ -18,7 +18,6 @@ package com.intellij.testFramework; import com.intellij.mock.MockApplicationEx; import com.intellij.mock.MockProjectEx; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.extensions.ExtensionPoint; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; @@ -48,7 +47,7 @@ public abstract class PlatformLiteFixture extends UsefulTestCase { public void initApplication() { //if (ApplicationManager.getApplication() instanceof MockApplicationEx) return; - ApplicationManagerEx.setApplication(new MockApplicationEx(getTestRootDisposable()), getTestRootDisposable()); + ApplicationManager.setApplication(new MockApplicationEx(getTestRootDisposable()), getTestRootDisposable()); getApplication().registerService(EncodingManager.class, EncodingManagerImpl.class); }