update artifacts on module rename (IDEADEV-40824)
authornik <Nikolay.Chashnikov@jetbrains.com>
Mon, 9 Nov 2009 09:32:06 +0000 (12:32 +0300)
committernik <Nikolay.Chashnikov@jetbrains.com>
Mon, 9 Nov 2009 09:32:06 +0000 (12:32 +0300)
18 files changed:
java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputElementType.java
java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputPackagingElement.java
java/compiler/impl/src/com/intellij/packaging/impl/elements/PackagingElementFactoryImpl.java
java/compiler/impl/src/com/intellij/packaging/impl/ui/ModuleElementPresentation.java
java/compiler/openapi/src/com/intellij/packaging/elements/PackagingElementFactory.java
java/compiler/openapi/src/com/intellij/packaging/ui/ArtifactEditorContext.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactConfigurable.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactEditorContextImpl.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactEditorImpl.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactPropertiesEditors.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurableContext.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurableContextImpl.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTreeComponent.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/actions/ExtractArtifactAction.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/ModuleOutputSourceItem.java
platform/lang-api/src/com/intellij/openapi/module/ModulePointer.java
platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerImpl.java

index 715aab36667038afacd9f1a7ad8533180a4726b0..e51e96abd13284c5007574793551717879d4643e 100644 (file)
@@ -17,6 +17,7 @@ package com.intellij.packaging.impl.elements;
 
 import com.intellij.openapi.compiler.CompilerBundle;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModulePointerManager;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectBundle;
 import com.intellij.openapi.util.IconLoader;
@@ -56,8 +57,9 @@ public class ModuleOutputElementType extends PackagingElementType<ModuleOutputPa
                                                                        @NotNull CompositePackagingElement<?> parent) {
     List<Module> modules = chooseModules(context);
     final List<ModuleOutputPackagingElement> elements = new ArrayList<ModuleOutputPackagingElement>();
+    final ModulePointerManager pointerManager = ModulePointerManager.getInstance(context.getProject());
     for (Module module : modules) {
-      elements.add(new ModuleOutputPackagingElement(module.getName()));
+      elements.add(new ModuleOutputPackagingElement(context.getProject(), pointerManager.create(module)));
     }
     return elements;
   }
@@ -68,6 +70,6 @@ public class ModuleOutputElementType extends PackagingElementType<ModuleOutputPa
 
   @NotNull
   public ModuleOutputPackagingElement createEmpty(@NotNull Project project) {
-    return new ModuleOutputPackagingElement();
+    return new ModuleOutputPackagingElement(project);
   }
 }
index 3bea0bc4057155743247392ebd5223c7321bf782..1e14538939617a6a01f0fcc28e9633fb71c46f44 100644 (file)
  */
 package com.intellij.packaging.impl.elements;
 
-import com.intellij.compiler.ant.Generator;
 import com.intellij.compiler.ant.BuildProperties;
+import com.intellij.compiler.ant.Generator;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModulePointer;
+import com.intellij.openapi.module.ModulePointerManager;
+import com.intellij.openapi.project.Project;
 import com.intellij.openapi.roots.CompilerModuleExtension;
 import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.packaging.artifacts.ArtifactType;
 import com.intellij.packaging.elements.*;
-import com.intellij.packaging.impl.ui.ModuleElementPresentation;
 import com.intellij.packaging.impl.ui.DelegatedPackagingElementPresentation;
-import com.intellij.packaging.ui.PackagingElementPresentation;
+import com.intellij.packaging.impl.ui.ModuleElementPresentation;
 import com.intellij.packaging.ui.ArtifactEditorContext;
-import com.intellij.packaging.artifacts.ArtifactType;
+import com.intellij.packaging.ui.PackagingElementPresentation;
 import com.intellij.util.xmlb.annotations.Attribute;
+import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-import org.jetbrains.annotations.NonNls;
 
 import java.util.Collections;
 import java.util.List;
@@ -37,29 +40,35 @@ import java.util.List;
 /**
  * @author nik
  */
-public class ModuleOutputPackagingElement extends PackagingElement<ModuleOutputPackagingElement> {
+public class ModuleOutputPackagingElement extends PackagingElement<ModuleOutputPackagingElement.ModuleOutputPackagingElementState> {
   @NonNls public static final String MODULE_NAME_ATTRIBUTE = "name";
-  private String myModuleName;
+  private ModulePointer myModulePointer;
+  private final Project myProject;
 
-  public ModuleOutputPackagingElement() {
+  public ModuleOutputPackagingElement(@NotNull Project project) {
     super(ModuleOutputElementType.MODULE_OUTPUT_ELEMENT_TYPE);
+    myProject = project;
   }
 
-  public ModuleOutputPackagingElement(String moduleName) {
+  public ModuleOutputPackagingElement(@NotNull Project project, @NotNull ModulePointer modulePointer) {
     super(ModuleOutputElementType.MODULE_OUTPUT_ELEMENT_TYPE);
-    myModuleName = moduleName;
+    myProject = project;
+    myModulePointer = modulePointer;
   }
 
   public PackagingElementPresentation createPresentation(@NotNull ArtifactEditorContext context) {
-    return new DelegatedPackagingElementPresentation(new ModuleElementPresentation(myModuleName, findModule(context), context));
+    return new DelegatedPackagingElementPresentation(new ModuleElementPresentation(myModulePointer, context));
   }
 
   @Override
   public List<? extends Generator> computeAntInstructions(@NotNull PackagingElementResolvingContext resolvingContext, @NotNull AntCopyInstructionCreator creator,
                                                           @NotNull ArtifactAntGenerationContext generationContext,
                                                           @NotNull ArtifactType artifactType) {
-    final String moduleOutput = BuildProperties.propertyRef(generationContext.getModuleOutputPath(myModuleName));
-    return Collections.singletonList(creator.createDirectoryContentCopyInstruction(moduleOutput));
+    if (myModulePointer != null) {
+      final String moduleOutput = BuildProperties.propertyRef(generationContext.getModuleOutputPath(myModulePointer.getModuleName()));
+      return Collections.singletonList(creator.createDirectoryContentCopyInstruction(moduleOutput));
+    }
+    return Collections.emptyList();
   }
 
   @Override
@@ -83,34 +92,55 @@ public class ModuleOutputPackagingElement extends PackagingElement<ModuleOutputP
 
   @Override
   public boolean isEqualTo(@NotNull PackagingElement<?> element) {
-    return element instanceof ModuleOutputPackagingElement && myModuleName != null
-           && myModuleName.equals(((ModuleOutputPackagingElement)element).getModuleName());
+    return element instanceof ModuleOutputPackagingElement && myModulePointer != null
+           && myModulePointer.equals(((ModuleOutputPackagingElement)element).myModulePointer);
   }
 
-  public ModuleOutputPackagingElement getState() {
-    return this;
+  public ModuleOutputPackagingElementState getState() {
+    final ModuleOutputPackagingElementState state = new ModuleOutputPackagingElementState();
+    if (myModulePointer != null) {
+      state.setModuleName(myModulePointer.getModuleName());
+    }
+    return state;
   }
 
-  public void loadState(ModuleOutputPackagingElement state) {
-    myModuleName = state.getModuleName();
+  public void loadState(ModuleOutputPackagingElementState state) {
+    final String moduleName = state.getModuleName();
+    myModulePointer = moduleName != null ? ModulePointerManager.getInstance(myProject).create(moduleName) : null;
   }
 
   @NonNls @Override
   public String toString() {
-    return "module:" + myModuleName;
+    return "module:" + getModuleName();
   }
 
-  @Attribute(MODULE_NAME_ATTRIBUTE)
+  @Nullable
   public String getModuleName() {
-    return myModuleName;
-  }
-
-  public void setModuleName(String moduleName) {
-    myModuleName = moduleName;
+    return myModulePointer != null ? myModulePointer.getModuleName() : null;
   }
 
   @Nullable
   public Module findModule(PackagingElementResolvingContext context) {
-    return context.getModulesProvider().getModule(myModuleName);
+    if (myModulePointer != null) {
+      final Module module = myModulePointer.getModule();
+      if (module != null) {
+        return module;
+      }
+      return context.getModulesProvider().getModule(myModulePointer.getModuleName());
+    }
+    return null;
+  }
+
+  public static class ModuleOutputPackagingElementState {
+    private String myModuleName;
+
+    @Attribute(MODULE_NAME_ATTRIBUTE)
+    public String getModuleName() {
+      return myModuleName;
+    }
+
+    public void setModuleName(String moduleName) {
+      myModuleName = moduleName;
+    }
   }
 }
index b6e4da4aeb39c888281f13eb750a5329a6f75839..643853800cce6e80a86f2f36dbc69068618fee69 100644 (file)
@@ -17,6 +17,8 @@ package com.intellij.packaging.impl.elements;
 
 import com.intellij.openapi.extensions.Extensions;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModulePointer;
+import com.intellij.openapi.module.ModulePointerManager;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.roots.OrderRootType;
 import com.intellij.openapi.roots.impl.libraries.LibraryImpl;
@@ -173,14 +175,16 @@ public class PackagingElementFactoryImpl extends PackagingElementFactory {
   }
 
   @NotNull
-  public PackagingElement<?> createModuleOutput(@NotNull String moduleName, Project project) {
-    return new ModuleOutputPackagingElement(moduleName);
+  public PackagingElement<?> createModuleOutput(@NotNull String moduleName, @NotNull Project project) {
+    final ModulePointer pointer = ModulePointerManager.getInstance(project).create(moduleName);
+    return new ModuleOutputPackagingElement(project, pointer);
   }
 
   @NotNull
   @Override
   public PackagingElement<?> createModuleOutput(@NotNull Module module) {
-    return new ModuleOutputPackagingElement(module.getName());
+    final ModulePointer modulePointer = ModulePointerManager.getInstance(module.getProject()).create(module);
+    return new ModuleOutputPackagingElement(module.getProject(), modulePointer);
   }
 
   @NotNull
index 078922fe184c81059c90e6630cba3845857e31c9..48d8319dcf64622d1b7e11a234c37331ae486840 100644 (file)
@@ -17,7 +17,9 @@ package com.intellij.packaging.impl.ui;
 
 import com.intellij.ide.projectView.PresentationData;
 import com.intellij.openapi.compiler.CompilerBundle;
+import com.intellij.openapi.module.ModifiableModuleModel;
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModulePointer;
 import com.intellij.packaging.ui.PackagingElementWeights;
 import com.intellij.packaging.ui.TreeNodePresentation;
 import com.intellij.packaging.ui.ArtifactEditorContext;
@@ -29,46 +31,67 @@ import org.jetbrains.annotations.Nullable;
  * @author nik
  */
 public class ModuleElementPresentation extends TreeNodePresentation {
-  private final String myName;
+  private final ModulePointer myModulePointer;
   private final ArtifactEditorContext myContext;
-  private final Module myModule;
 
-  public ModuleElementPresentation(@NotNull String name, @Nullable Module module, ArtifactEditorContext context) {
-    myModule = module;
-    myName = name;
+  public ModuleElementPresentation(@Nullable ModulePointer modulePointer, @NotNull ArtifactEditorContext context) {
+    myModulePointer = modulePointer;
     myContext = context;
   }
 
   public String getPresentableName() {
-    return myName;
+    return myModulePointer != null ? myModulePointer.getModuleName() : "<unknown>";
   }
 
   @Override
   public boolean canNavigateToSource() {
-    return myModule != null;
+    return findModule() != null;
   }
 
   @Override
   public Object getSourceObject() {
-    return myModule;
+    return findModule();
+  }
+
+  @Nullable
+  private Module findModule() {
+    return myModulePointer != null ? myModulePointer.getModule() : null;
   }
 
   @Override
   public void navigateToSource() {
-    myContext.selectModule(myModule);
+    final Module module = findModule();
+    if (module != null) {
+      myContext.selectModule(module);
+    }
   }
 
   public void render(@NotNull PresentationData presentationData, SimpleTextAttributes mainAttributes, SimpleTextAttributes commentAttributes) {
-    if (myModule != null) {
-      presentationData.setOpenIcon(myModule.getModuleType().getNodeIcon(true));
-      presentationData.setClosedIcon(myModule.getModuleType().getNodeIcon(false));
+    final Module module = findModule();
+    if (module != null) {
+      presentationData.setOpenIcon(module.getModuleType().getNodeIcon(true));
+      presentationData.setClosedIcon(module.getModuleType().getNodeIcon(false));
+    }
+    String moduleName;
+    if (module != null) {
+      moduleName = module.getName();
+      final ModifiableModuleModel moduleModel = myContext.getModifiableModuleModel();
+      if (moduleModel != null) {
+        final String newName = moduleModel.getNewName(module);
+        if (newName != null) {
+          moduleName = newName;
+        }
+      }
+    }
+    else if (myModulePointer != null) {
+      moduleName = myModulePointer.getModuleName();
+    }
+    else {
+      moduleName = "<unknown>";
     }
-    presentationData.addText(getNodeText(),
-                             myModule != null ? mainAttributes : SimpleTextAttributes.ERROR_ATTRIBUTES);
-  }
 
-  protected String getNodeText() {
-    return CompilerBundle.message("node.text.0.compile.output", myName);
+    presentationData.addText(CompilerBundle.message("node.text.0.compile.output", moduleName),
+                             module != null ? mainAttributes : SimpleTextAttributes.ERROR_ATTRIBUTES);
   }
 
   @Override
index 7401a31d0e555ec99fff74b09cdc76a2d731e3ef..88364671f4da9149e92dbfb93838cea47a96e733 100644 (file)
@@ -46,7 +46,7 @@ public abstract class PackagingElementFactory {
   public abstract CompositePackagingElement<?> createArchive(@NotNull @NonNls String archiveFileName);
 
   @NotNull
-  public abstract PackagingElement<?> createModuleOutput(@NotNull String moduleName, Project project);
+  public abstract PackagingElement<?> createModuleOutput(@NotNull String moduleName, @NotNull Project project);
 
   @NotNull
   public abstract PackagingElement<?> createModuleOutput(@NotNull Module module);
index db9763eef0cf9a90e36fe2aa05afbd80a1520d44..085b55fdd1c5648c54114f68b2c221322f45feba 100644 (file)
@@ -16,6 +16,7 @@
 package com.intellij.packaging.ui;
 
 import com.intellij.facet.Facet;
+import com.intellij.openapi.module.ModifiableModuleModel;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.roots.libraries.Library;
 import com.intellij.packaging.artifacts.Artifact;
@@ -24,6 +25,7 @@ import com.intellij.packaging.artifacts.ModifiableArtifactModel;
 import com.intellij.packaging.elements.CompositePackagingElement;
 import com.intellij.packaging.elements.PackagingElementResolvingContext;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import java.util.List;
 
@@ -38,7 +40,10 @@ public interface ArtifactEditorContext extends PackagingElementResolvingContext
   ArtifactType getArtifactType();
 
   @NotNull
-  ModifiableArtifactModel getModifiableArtifactModel();
+  ModifiableArtifactModel getOrCreateModifiableArtifactModel();
+
+  @Nullable
+  ModifiableModuleModel getModifiableModuleModel();
 
   @NotNull
   ManifestFileConfiguration getManifestFile(CompositePackagingElement<?> element, ArtifactType artifactType);
index 75ffb3830adcf6d0040d86d116c1a2d7fc120556..9fe5bf3afd929ceb4d4a6076a245079d59371c65 100644 (file)
@@ -53,7 +53,7 @@ public class ArtifactConfigurable extends ProjectStructureElementConfigurable<Ar
   public void setDisplayName(String name) {
     final String oldName = getArtifact().getName();
     if (name != null && !name.equals(oldName) && !myIsInUpdateName) {
-      myArtifactsStructureContext.getModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact).setName(name);
+      myArtifactsStructureContext.getOrCreateModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact).setName(name);
       myEditor.updateOutputPath(oldName, name);
     }
   }
index cc65584c33aec81da6a5d5b1c7b718ceddb1f7cb..0b8f51cc2f81ffee17bf69efccc7f55177ef7c11 100644 (file)
@@ -16,6 +16,7 @@
 package com.intellij.openapi.roots.ui.configuration.artifacts;
 
 import com.intellij.facet.Facet;
+import com.intellij.openapi.module.ModifiableModuleModel;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.roots.ModuleRootModel;
@@ -57,8 +58,12 @@ public class ArtifactEditorContextImpl implements ArtifactEditorContext {
   }
 
   @NotNull
-  public ModifiableArtifactModel getModifiableArtifactModel() {
-    return myParent.getModifiableArtifactModel();
+  public ModifiableArtifactModel getOrCreateModifiableArtifactModel() {
+    return myParent.getOrCreateModifiableArtifactModel();
+  }
+
+  public ModifiableModuleModel getModifiableModuleModel() {
+    return myParent.getModifiableModuleModel();
   }
 
   @NotNull
index 4f5946419fdcb4a60fd12edc3d112c52883e0857..0e8d5b41e6d46447b48eb9f7299da29a8ccc8849 100644 (file)
@@ -128,7 +128,7 @@ public class ArtifactEditorImpl implements ArtifactEditorEx {
   }
 
   public void apply() {
-    final ModifiableArtifact modifiableArtifact = myContext.getModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact);
+    final ModifiableArtifact modifiableArtifact = myContext.getOrCreateModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact);
     modifiableArtifact.setBuildOnMake(myBuildOnMakeCheckBox.isSelected());
     modifiableArtifact.setOutputPath(getConfiguredOutputPath());
     myPropertiesEditors.applyProperties();
@@ -387,7 +387,7 @@ public class ArtifactEditorImpl implements ArtifactEditorEx {
   }
 
   public void setArtifactType(ArtifactType artifactType) {
-    final ModifiableArtifact modifiableArtifact = myContext.getModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact);
+    final ModifiableArtifact modifiableArtifact = myContext.getOrCreateModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact);
     modifiableArtifact.setArtifactType(artifactType);
 
     myPropertiesEditors.removeTabs(myTabbedPane);
index 9f0dae2ef069e3038fc746e11246586393b49871..5c265eb31790738e49979274eafb836c00781050 100644 (file)
@@ -109,7 +109,7 @@ public class ArtifactPropertiesEditors {
 
     public void applyProperties() {
       myEditor.apply();
-      final ModifiableArtifact artifact = myContext.getModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact);
+      final ModifiableArtifact artifact = myContext.getOrCreateModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact);
       artifact.setProperties(myProvider, myProperties);
     }
 
index 62bf9dbc498d89e5ab7e1970f2204c5ae7b20ea7..093d8b6ec6ff9bc41d4ab61d80422c2b8ea829cc 100644 (file)
@@ -125,7 +125,7 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable {
   }
 
   public ModifiableArtifactModel getModifiableArtifactModel() {
-    return myPackagingEditorContext.getModifiableArtifactModel();
+    return myPackagingEditorContext.getOrCreateModifiableArtifactModel();
   }
 
   protected AbstractAddGroup createAddAction() {
@@ -178,7 +178,7 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable {
       name = DEFAULT_ARTIFACT_NAME + i;
       i++;
     }
-    final ModifiableArtifact artifact = myPackagingEditorContext.getModifiableArtifactModel().addArtifact(name, type, artifactTemplate.createRootElement(name));
+    final ModifiableArtifact artifact = myPackagingEditorContext.getOrCreateModifiableArtifactModel().addArtifact(name, type, artifactTemplate.createRootElement(name));
     selectNodeInTree(findNodeByObject(myRoot, artifact));
   }
 
@@ -216,7 +216,7 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable {
 
   @Override
   protected void removeArtifact(Artifact artifact) {
-    myPackagingEditorContext.getModifiableArtifactModel().removeArtifact(artifact);
+    myPackagingEditorContext.getOrCreateModifiableArtifactModel().removeArtifact(artifact);
     myContext.getDaemonAnalyzer().removeElement(new ArtifactProjectStructureElement(myContext, myPackagingEditorContext, artifact));
   }
 
index c4f992179cc62f547bcea0d30bae5736b068d0be..6c1f7bccb5791e7d6b49100d0a6ff17b4361ea74 100644 (file)
@@ -15,6 +15,7 @@
  */
 package com.intellij.openapi.roots.ui.configuration.artifacts;
 
+import com.intellij.openapi.module.ModifiableModuleModel;
 import com.intellij.packaging.artifacts.Artifact;
 import com.intellij.packaging.artifacts.ArtifactType;
 import com.intellij.packaging.artifacts.ModifiableArtifactModel;
@@ -23,13 +24,14 @@ import com.intellij.packaging.elements.PackagingElementResolvingContext;
 import com.intellij.packaging.ui.ArtifactEditor;
 import com.intellij.packaging.ui.ManifestFileConfiguration;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * @author nik
  */
 public interface ArtifactsStructureConfigurableContext extends PackagingElementResolvingContext {
   @NotNull
-  ModifiableArtifactModel getModifiableArtifactModel();
+  ModifiableArtifactModel getOrCreateModifiableArtifactModel();
 
   @NotNull
   ManifestFileConfiguration getManifestFile(CompositePackagingElement<?> element, ArtifactType artifactType);
@@ -44,4 +46,7 @@ public interface ArtifactsStructureConfigurableContext extends PackagingElementR
 
   @NotNull
   Artifact getOriginalArtifact(@NotNull Artifact artifact);
+
+  @Nullable
+  ModifiableModuleModel getModifiableModuleModel();
 }
index fe32672e469940ae6007c6b7dfe7c550a2897ca2..2fa3ffd9f5a7004a170b8a29c12bb256a9eca82d 100644 (file)
@@ -15,6 +15,7 @@
  */
 package com.intellij.openapi.roots.ui.configuration.artifacts;
 
+import com.intellij.openapi.module.ModifiableModuleModel;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.roots.ui.configuration.FacetsProvider;
 import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
@@ -73,6 +74,10 @@ class ArtifactsStructureConfigurableContextImpl implements ArtifactsStructureCon
     return artifact;
   }
 
+  public ModifiableModuleModel getModifiableModuleModel() {
+    return myContext.getModulesConfigurator().getModuleModel();
+  }
+
   public CompositePackagingElement<?> getRootElement(@NotNull Artifact artifact) {
     artifact = getOriginalArtifact(artifact);
     if (myModifiableModel != null) {
@@ -95,7 +100,7 @@ class ArtifactsStructureConfigurableContextImpl implements ArtifactsStructureCon
 
   public void editLayout(@NotNull Artifact artifact, Runnable action) {
     artifact = getOriginalArtifact(artifact);
-    final ModifiableArtifact modifiableArtifact = getModifiableArtifactModel().getOrCreateModifiableArtifact(artifact);
+    final ModifiableArtifact modifiableArtifact = getOrCreateModifiableArtifactModel().getOrCreateModifiableArtifact(artifact);
     if (modifiableArtifact.getRootElement() == artifact.getRootElement()) {
       modifiableArtifact.setRootElement(getOrCreateModifiableRootElement(artifact));
     }
@@ -120,7 +125,7 @@ class ArtifactsStructureConfigurableContextImpl implements ArtifactsStructureCon
   }
 
   @NotNull
-  public ModifiableArtifactModel getModifiableArtifactModel() {
+  public ModifiableArtifactModel getOrCreateModifiableArtifactModel() {
     if (myModifiableModel == null) {
       myModifiableModel = ArtifactManager.getInstance(myProject).createModifiableModel();
       myModifiableModel.addListener(myModifiableModelListener);
index e9af366c37e41974284dbece433d17212fd0a3e6..223c2de431f230bc3c4004c0fdd06bf8e48a1be6 100644 (file)
@@ -390,7 +390,7 @@ public class LayoutTreeComponent implements DnDTarget, Disposable {
   }
 
   public void setRootElement(CompositePackagingElement<?> rootElement) {
-    myContext.getModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact).setRootElement(rootElement);
+    myContext.getOrCreateModifiableArtifactModel().getOrCreateModifiableArtifact(myOriginalArtifact).setRootElement(rootElement);
     myTreeStructure.updateRootElement();
     final DefaultMutableTreeNode node = myTree.getRootNode();
     node.setUserObject(myTreeStructure.getRootElement());
index f3cb59b7db44644bb29345ccb6a82a88c17ca3b7..2cc19955dff323627345b5371ecab1e8f0f105fb 100644 (file)
@@ -61,7 +61,7 @@ public class ExtractArtifactAction extends LayoutTreeActionBase {
     if (name != null) {
       final Project project = myArtifactEditor.getContext().getProject();
       //todo[nik] select type?
-      final ModifiableArtifact artifact = myArtifactEditor.getContext().getModifiableArtifactModel().addArtifact(name, PlainArtifactType.getInstance());
+      final ModifiableArtifact artifact = myArtifactEditor.getContext().getOrCreateModifiableArtifactModel().addArtifact(name, PlainArtifactType.getInstance());
       treeComponent.editLayout(new Runnable() {
         public void run() {
           for (PackagingElement<?> element : selectedElements) {
index 3bf4181c890cd03b26cd693001ab09ca317e8057..ed52b2293431e16b04b148bbb9634e43d00f9d1a 100644 (file)
@@ -16,6 +16,8 @@
 package com.intellij.openapi.roots.ui.configuration.artifacts.sourceItems;
 
 import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModulePointer;
+import com.intellij.openapi.module.ModulePointerManager;
 import com.intellij.packaging.elements.PackagingElement;
 import com.intellij.packaging.elements.PackagingElementOutputKind;
 import com.intellij.packaging.impl.elements.ModuleOutputPackagingElement;
@@ -46,7 +48,8 @@ public class ModuleOutputSourceItem extends PackagingSourceItem {
 
   @Override
   public SourceItemPresentation createPresentation(@NotNull ArtifactEditorContext context) {
-    return new DelegatedSourceItemPresentation(new ModuleElementPresentation(myModule.getName(), myModule, context)) {
+    final ModulePointer modulePointer = ModulePointerManager.getInstance(context.getProject()).create(myModule);
+    return new DelegatedSourceItemPresentation(new ModuleElementPresentation(modulePointer, context)) {
       @Override
       public int getWeight() {
         return SourceItemWeights.MODULE_OUTPUT_WEIGHT;
@@ -56,7 +59,8 @@ public class ModuleOutputSourceItem extends PackagingSourceItem {
 
   @NotNull
   public List<? extends PackagingElement<?>> createElements(@NotNull ArtifactEditorContext context) {
-    return Collections.singletonList(new ModuleOutputPackagingElement(myModule.getName()));
+    final ModulePointer modulePointer = ModulePointerManager.getInstance(context.getProject()).create(myModule);
+    return Collections.singletonList(new ModuleOutputPackagingElement(context.getProject(), modulePointer));
   }
 
   @NotNull
index c62125f4e0ef7cd65961a566f164cfd254e2e4ad..d81715c9d3aaabbbc1e329c5710ee144fa1426fb 100644 (file)
  */
 package com.intellij.openapi.module;
 
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
 public interface ModulePointer {
+  @Nullable 
   Module getModule();
+
+  @NotNull
   String getModuleName();
 }
index db131becf65096ee3076b3a2cdb81963f41bb35f..f69436a37c954ab20f1a128f02dfed9cb5a01fef 100644 (file)
@@ -18,6 +18,8 @@ package com.intellij.openapi.module.impl;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModulePointer;
+import com.intellij.openapi.project.Project;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * @author dsl
@@ -41,6 +43,7 @@ public class ModulePointerImpl implements ModulePointer {
     return myModule;
   }
 
+  @NotNull
   public String getModuleName() {
     if (myModule != null) {
       return myModule.getName();