diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputElementType.java b/java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputElementType.java index 715aab366670..e51e96abd132 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputElementType.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputElementType.java @@ -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 parent) { List modules = chooseModules(context); final List elements = new ArrayList(); + 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 { +public class ModuleOutputPackagingElement extends PackagingElement { @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 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 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; + } } } diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/elements/PackagingElementFactoryImpl.java b/java/compiler/impl/src/com/intellij/packaging/impl/elements/PackagingElementFactoryImpl.java index b6e4da4aeb39..643853800cce 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/elements/PackagingElementFactoryImpl.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/elements/PackagingElementFactoryImpl.java @@ -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 diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/ui/ModuleElementPresentation.java b/java/compiler/impl/src/com/intellij/packaging/impl/ui/ModuleElementPresentation.java index 078922fe184c..48d8319dcf64 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/ui/ModuleElementPresentation.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/ui/ModuleElementPresentation.java @@ -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() : ""; } @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 = ""; } - 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 diff --git a/java/compiler/openapi/src/com/intellij/packaging/elements/PackagingElementFactory.java b/java/compiler/openapi/src/com/intellij/packaging/elements/PackagingElementFactory.java index 7401a31d0e55..88364671f4da 100644 --- a/java/compiler/openapi/src/com/intellij/packaging/elements/PackagingElementFactory.java +++ b/java/compiler/openapi/src/com/intellij/packaging/elements/PackagingElementFactory.java @@ -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); diff --git a/java/compiler/openapi/src/com/intellij/packaging/ui/ArtifactEditorContext.java b/java/compiler/openapi/src/com/intellij/packaging/ui/ArtifactEditorContext.java index db9763eef0cf..085b55fdd1c5 100644 --- a/java/compiler/openapi/src/com/intellij/packaging/ui/ArtifactEditorContext.java +++ b/java/compiler/openapi/src/com/intellij/packaging/ui/ArtifactEditorContext.java @@ -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); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactConfigurable.java index 75ffb3830adc..9fe5bf3afd92 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactConfigurable.java @@ -53,7 +53,7 @@ public class ArtifactConfigurable extends ProjectStructureElementConfigurable element, ArtifactType artifactType); @@ -44,4 +46,7 @@ public interface ArtifactsStructureConfigurableContext extends PackagingElementR @NotNull Artifact getOriginalArtifact(@NotNull Artifact artifact); + + @Nullable + ModifiableModuleModel getModifiableModuleModel(); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurableContextImpl.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurableContextImpl.java index fe32672e4699..2fa3ffd9f5a7 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurableContextImpl.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurableContextImpl.java @@ -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); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTreeComponent.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTreeComponent.java index e9af366c37e4..223c2de431f2 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTreeComponent.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/LayoutTreeComponent.java @@ -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()); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/actions/ExtractArtifactAction.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/actions/ExtractArtifactAction.java index f3cb59b7db44..2cc19955dff3 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/actions/ExtractArtifactAction.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/actions/ExtractArtifactAction.java @@ -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) { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/ModuleOutputSourceItem.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/ModuleOutputSourceItem.java index 3bf4181c890c..ed52b2293431 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/ModuleOutputSourceItem.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/ModuleOutputSourceItem.java @@ -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> 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 diff --git a/platform/lang-api/src/com/intellij/openapi/module/ModulePointer.java b/platform/lang-api/src/com/intellij/openapi/module/ModulePointer.java index c62125f4e0ef..d81715c9d3aa 100644 --- a/platform/lang-api/src/com/intellij/openapi/module/ModulePointer.java +++ b/platform/lang-api/src/com/intellij/openapi/module/ModulePointer.java @@ -15,7 +15,13 @@ */ package com.intellij.openapi.module; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + public interface ModulePointer { + @Nullable Module getModule(); + + @NotNull String getModuleName(); } diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerImpl.java b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerImpl.java index db131becf650..f69436a37c95 100644 --- a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerImpl.java @@ -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();