From 602701d166108ea2d8db6b2811cae652ad62b28a Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 29 Jan 2010 10:05:46 +0300 Subject: [PATCH] IDEA-51749 "Could not save project" error message may occur after deleting module imported from Maven --- .../com/intellij/module/ModulePointerTest.java | 11 ++++++++- .../module/impl/ModulePointerManagerImpl.java | 27 ++++++++++++++-------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/module/ModulePointerTest.java b/java/java-tests/testSrc/com/intellij/module/ModulePointerTest.java index a05e17a2d2..32a944d3f4 100644 --- a/java/java-tests/testSrc/com/intellij/module/ModulePointerTest.java +++ b/java/java-tests/testSrc/com/intellij/module/ModulePointerTest.java @@ -27,6 +27,7 @@ import com.intellij.testFramework.PlatformTestCase; public class ModulePointerTest extends PlatformTestCase { public void testCreateByName() throws Exception { final ModulePointer pointer = getPointerManager().create("m"); + assertSame(pointer, getPointerManager().create("m")); assertNull(pointer.getModule()); assertEquals("m", pointer.getModuleName()); @@ -39,6 +40,8 @@ public class ModulePointerTest extends PlatformTestCase { public void testCreateByModule() throws Exception { final Module module = addModule("x"); final ModulePointer pointer = getPointerManager().create(module); + assertSame(pointer, getPointerManager().create(module)); + assertSame(pointer, getPointerManager().create("x")); assertSame(module, pointer.getModule()); assertEquals("x", pointer.getModuleName()); @@ -48,6 +51,9 @@ public class ModulePointerTest extends PlatformTestCase { assertNull(pointer.getModule()); assertEquals("x", pointer.getModuleName()); + + final Module newModule = addModule("x"); + assertSame(pointer, getPointerManager().create(newModule)); } public void testRenameModule() throws Exception { @@ -61,9 +67,12 @@ public class ModulePointerTest extends PlatformTestCase { } public void testDisposePointerFromUncommitedModifiableModel() throws Exception { + final ModulePointer pointer = getPointerManager().create("xxx"); + final ModifiableModuleModel modifiableModel = getModuleManager().getModifiableModel(); final Module module = modifiableModel.newModule(myProject.getBaseDir().getPath() + "/xxx.iml", EmptyModuleType.getInstance()); - final ModulePointer pointer = getPointerManager().create(module); + assertSame(pointer, getPointerManager().create(module)); + assertSame(pointer, getPointerManager().create("xxx")); assertSame(module, pointer.getModule()); assertEquals("xxx", pointer.getModuleName()); diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java index 9a2c96ef2a..8d21b1f850 100644 --- a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java @@ -47,25 +47,26 @@ public class ModulePointerManagerImpl extends ModulePointerManager { @Override public void moduleAdded(Project project, Module module) { - final ModulePointerImpl pointer = myUnresolved.remove(module.getName()); - if (pointer != null) { - pointer.moduleAdded(module); - registerPointer(module, pointer); - } + moduleAppears(module); } @Override public void modulesRenamed(Project project, List modules) { for (Module module : modules) { - ModulePointerImpl pointer = myUnresolved.get(module.getName()); - if (pointer != null) { - pointer.moduleAdded(module); - } + moduleAppears(module); } } }); } + private void moduleAppears(Module module) { + ModulePointerImpl pointer = myUnresolved.remove(module.getName()); + if (pointer != null && pointer.getModule() == null) { + pointer.moduleAdded(module); + registerPointer(module, pointer); + } + } + private void registerPointer(final Module module, final ModulePointerImpl pointer) { myPointers.put(module, pointer); Disposer.register(module, new Disposable() { @@ -88,7 +89,13 @@ public class ModulePointerManagerImpl extends ModulePointerManager { public ModulePointer create(@NotNull Module module) { ModulePointerImpl pointer = myPointers.get(module); if (pointer == null) { - pointer = new ModulePointerImpl(module); + pointer = myUnresolved.get(module.getName()); + if (pointer == null) { + pointer = new ModulePointerImpl(module); + } + else { + pointer.moduleAdded(module); + } registerPointer(module, pointer); } return pointer; -- 2.11.4.GIT