traverseUI test fixed

This commit is contained in:
Alexey Kudravtsev
2010-11-11 12:36:13 +03:00
parent 95bab486a0
commit 7e37b7c230
11 changed files with 44 additions and 21 deletions
@@ -17,6 +17,7 @@ package com.intellij.openapi.components;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.UserDataHolder;
import com.intellij.util.messages.MessageBus;
import org.jetbrains.annotations.NotNull;
@@ -98,4 +99,11 @@ public interface ComponentManager extends UserDataHolder, Disposable {
<T> T[] getExtensions(ExtensionPointName<T> extensionPointName);
ComponentConfig getConfig(Class componentImplementation);
/**
* @return condition for this component being disposed.
* see {@link com.intellij.openapi.application.Application#invokeLater(Runnable, Condition)} for the usage example.
*/
@NotNull
Condition getDisposed();
}
@@ -17,7 +17,6 @@ package com.intellij.openapi.project;
import com.intellij.openapi.components.ComponentManager;
import com.intellij.openapi.extensions.AreaInstance;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -61,8 +60,6 @@ public interface Project extends ComponentManager, AreaInstance {
void save();
Condition getDisposed();
boolean isOpen();
boolean isInitialized();
@@ -87,7 +87,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application
private final EventDispatcher<ApplicationListener> myDispatcher = EventDispatcher.create(ApplicationListener.class);
private final boolean myTestModeFlag;
private boolean myTestModeFlag;
private final boolean myHeadlessMode;
private final boolean myCommandLineMode;
@@ -357,6 +357,10 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application
return myTestModeFlag;
}
public void setUnitTestMode(boolean testModeFlag) {
myTestModeFlag = testModeFlag;
}
public boolean isHeadlessEnvironment() {
return myHeadlessMode;
}
@@ -689,7 +693,10 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application
if (!canExit()) return;
if (disposeSelf()) System.exit(myExitCode);
boolean success = disposeSelf();
if (success && !isUnitTestMode()) {
System.exit(myExitCode);
}
}
};
@@ -19,16 +19,16 @@
*/
package com.intellij.openapi.application.impl;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityInvokator;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.util.ActionCallback;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Conditions;
import org.jetbrains.annotations.NotNull;
public class ModalityInvokatorImpl implements ModalityInvokator {
public ActionCallback invokeLater(Runnable runnable) {
return invokeLater(runnable, Conditions.FALSE);
return invokeLater(runnable, ApplicationManager.getApplication().getDisposed());
}
public ActionCallback invokeLater(final Runnable runnable, @NotNull final Condition expired) {
@@ -40,6 +40,6 @@ public class ModalityInvokatorImpl implements ModalityInvokator {
}
public ActionCallback invokeLater(Runnable runnable, @NotNull ModalityState state) {
return invokeLater(runnable, state, Conditions.FALSE);
return invokeLater(runnable, state, ApplicationManager.getApplication().getDisposed());
}
}
@@ -124,6 +124,7 @@ public class DummyProject extends UserDataHolderBase implements Project {
return false;
}
@NotNull
public Condition getDisposed() {
return new Condition() {
public boolean value(final Object o) {
@@ -30,6 +30,7 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.util.ArrayUtil;
@@ -75,6 +76,11 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
private Boolean myHeadless;
private ComponentsRegistry myComponentsRegistry = new ComponentsRegistry();
private boolean myHaveProgressManager = false;
private final Condition myDisposedCondition = new Condition() {
public boolean value(final Object o) {
return isDisposed();
}
};
protected ComponentManagerImpl(ComponentManager parentComponentManager) {
myParentComponentManager = parentComponentManager;
@@ -431,6 +437,11 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements
return myComponentsRegistry.getConfig(componentImplementation);
}
@NotNull
public Condition getDisposed() {
return myDisposedCondition;
}
private class ComponentsRegistry {
private final Map<Class, Object> myInterfaceToLockMap = new HashMap<Class, Object>();
private final Map<Class, Class> myInterfaceToClassMap = new HashMap<Class, Class>();
@@ -44,7 +44,6 @@ import com.intellij.openapi.project.ex.ProjectEx;
import com.intellij.openapi.project.ex.ProjectManagerEx;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.ex.MessagesEx;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
@@ -83,12 +82,6 @@ public class ProjectImpl extends ComponentManagerImpl implements ProjectEx {
public boolean myOptimiseTestLoadSpeed;
@NonNls public static final String TEMPLATE_PROJECT_NAME = "Default (Template) Project";
private final Condition myDisposedCondition = new Condition() {
public boolean value(final Object o) {
return isDisposed();
}
};
private String myName;
private String myOldName;
@@ -174,10 +167,6 @@ public class ProjectImpl extends ComponentManagerImpl implements ProjectEx {
return ProjectManagerEx.getInstanceEx().isProjectOpened(this);
}
public Condition getDisposed() {
return myDisposedCondition;
}
public boolean isInitialized() {
return isOpen() && !isDisposed() && StartupManagerEx.getInstanceEx(this).startupActivityPassed();
}
@@ -15,6 +15,7 @@
*/
package com.intellij.openapi.wm.impl;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.diagnostic.Logger;
@@ -76,7 +77,8 @@ public final class CommandProcessor implements Runnable {
// max. I'm not actually quite sure this should have NON_MODAL modality but it should
// definitely have some since runnables in command list may (and do) request some PSI activity
final boolean queueNext = myCommandCount > 0;
ApplicationManager.getApplication().getInvokator().invokeLater(command, ModalityState.NON_MODAL, expire == null ? Condition.FALSE : expire).doWhenDone(new Runnable() {
Application application = ApplicationManager.getApplication();
application.getInvokator().invokeLater(command, ModalityState.NON_MODAL, expire == null ? application.getDisposed() : expire).doWhenDone(new Runnable() {
public void run() {
if (queueNext) {
CommandProcessor.this.run();
@@ -1823,7 +1823,7 @@ public final class ToolWindowManagerImpl extends ToolWindowManagerEx implements
@Nullable
public Condition getExpireCondition() {
return Condition.FALSE;
return ApplicationManager.getApplication().getDisposed();
}
}
@@ -20,6 +20,7 @@ import com.intellij.openapi.components.BaseComponent;
import com.intellij.openapi.components.ComponentConfig;
import com.intellij.openapi.components.ComponentManager;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.util.ArrayUtil;
@@ -149,4 +150,10 @@ public class MockComponentManager extends UserDataHolderBase implements Componen
public ComponentConfig getConfig(Class componentImplementation) {
throw new UnsupportedOperationException("Method getConfig not implemented in " + getClass());
}
@NotNull
@Override
public Condition getDisposed() {
return Condition.FALSE;
}
}
@@ -50,6 +50,7 @@ public class MockProject extends MockComponentManager implements ProjectEx {
return ServiceManager.getService(this, PomModel.class);
}
@NotNull
@Override
public Condition getDisposed() {
return new Condition() {