mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
correct way of allowing to mix CoreEnvironment-based tests with regular ones
This commit is contained in:
@@ -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 <code>Application</code>.
|
||||
*/
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<FileTypeRegistry>() {
|
||||
@@ -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();
|
||||
|
||||
|
||||
-21
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user