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);
}