project dispose strictly under write action

This commit is contained in:
Alexey Kudravtsev
2011-07-13 12:09:50 +04:00
parent 2c864534dd
commit 4b4324e9a0
4 changed files with 22 additions and 8 deletions
@@ -331,7 +331,7 @@ public class ProjectImpl extends ComponentManagerImpl implements ProjectEx {
public synchronized void dispose() {
ApplicationEx application = ApplicationManagerEx.getApplicationEx();
assert application.isDispatchThread();
assert application.isWriteAccessAllowed(); // dispose must be under write action
// can call dispose only via com.intellij.ide.impl.ProjectUtil.closeAndDispose()
LOG.assertTrue(ApplicationManager.getApplication().isUnitTestMode() || !ProjectManagerEx.getInstanceEx().isProjectOpened(this));
@@ -178,7 +178,12 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt
public void disposeComponent() {
Disposer.dispose(myChangedFilesAlarm);
if (myDefaultProject != null) {
Disposer.dispose(myDefaultProject);
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
Disposer.dispose(myDefaultProject);
}
});
myDefaultProject = null;
}
}
@@ -706,7 +706,11 @@ public abstract class LightPlatformTestCase extends UsefulTestCase implements Da
ShutDownTracker.invokeAndWait(true, new Runnable() {
@Override
public void run() {
closeAndDeleteProject();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
closeAndDeleteProject();
}
});
}
});
}
@@ -412,11 +412,16 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro
private void disposeProject() {
UIUtil.dispatchAllInvocationEvents();
if (myProject != null) {
Disposer.dispose(myProject);
ProjectManagerEx projectManager = ProjectManagerEx.getInstanceEx();
if (projectManager != null) {
projectManager.setCurrentTestProject(null);
}
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
Disposer.dispose(myProject);
ProjectManagerEx projectManager = ProjectManagerEx.getInstanceEx();
if (projectManager != null) {
projectManager.setCurrentTestProject(null);
}
}
});
myProject = null;
}
}