From 4b4324e9a0ccc4acf2267e0eb03cf1c50ac9b733 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 13 Jul 2011 12:06:43 +0400 Subject: [PATCH] project dispose strictly under write action --- .../openapi/project/impl/ProjectImpl.java | 2 +- .../openapi/project/impl/ProjectManagerImpl.java | 7 ++++++- .../testFramework/LightPlatformTestCase.java | 6 +++++- .../intellij/testFramework/PlatformTestCase.java | 15 ++++++++++----- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectImpl.java index cb46627b4ff4..c82c478c2039 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectImpl.java @@ -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)); diff --git a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java index 93057150d426..a50a3df3ea7d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java @@ -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; } } diff --git a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java index ba90415431ed..41d767396c10 100644 --- a/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/LightPlatformTestCase.java @@ -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(); + } + }); } }); } diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java index 46a310999109..e4a9391a710d 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java @@ -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; } }