diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/UsageInArtifact.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/UsageInArtifact.java index 942f4d4fc844..e5be355f73d6 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/UsageInArtifact.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/UsageInArtifact.java @@ -1,10 +1,13 @@ package com.intellij.openapi.roots.ui.configuration.artifacts; +import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.LibraryProjectStructureElement; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.PlaceInProjectStructure; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureElement; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureElementUsage; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.elements.PackagingElement; +import com.intellij.packaging.elements.PackagingElementFactory; import javax.swing.*; @@ -81,4 +84,13 @@ public class UsageInArtifact extends ProjectStructureElementUsage { public void removeSourceElement() { removeElement(); } + + @Override + public void replaceElement(final ProjectStructureElement newElement) { + Library library = ((LibraryProjectStructureElement)newElement).getLibrary(); + PackagingElement newLibraryElement = PackagingElementFactory.getInstance().createLibraryFiles(library.getName(), + library.getTable().getTableLevel(), + null); + replaceElement(newLibraryElement); + } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ChangeLibraryLevelAction.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ChangeLibraryLevelAction.java index 2403269c1dcf..9cd1fa67c5b4 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ChangeLibraryLevelAction.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ChangeLibraryLevelAction.java @@ -17,21 +17,13 @@ package com.intellij.openapi.roots.ui.configuration.projectRoot; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ModifiableRootModel; -import com.intellij.openapi.roots.impl.OrderEntryUtil; import com.intellij.openapi.roots.impl.libraries.LibraryEx; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.ui.configuration.LibraryTableModifiableModelProvider; -import com.intellij.openapi.roots.ui.configuration.ModuleEditor; -import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator; import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable; -import com.intellij.openapi.roots.ui.configuration.artifacts.UsageInArtifact; import com.intellij.openapi.roots.ui.configuration.classpath.ChangeLibraryLevelActionBase; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.*; -import com.intellij.packaging.elements.PackagingElement; -import com.intellij.packaging.elements.PackagingElementFactory; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -67,23 +59,9 @@ public class ChangeLibraryLevelAction extends ChangeLibraryLevelActionBase { final Library newLibrary = doCopy(oldLibrary); if (newLibrary == null) return; - final ModulesConfigurator configurator = context.getModulesConfigurator(); final Collection usages = context.getDaemonAnalyzer().getUsages(libraryElement); for (ProjectStructureElementUsage usage : usages) { - if (usage instanceof UsageInModuleClasspath) { - final Module module = ((UsageInModuleClasspath)usage).getModule(); - final ModuleEditor editor = configurator.getModuleEditor(module); - if (editor != null) { - final ModifiableRootModel rootModel = editor.getModifiableRootModelProxy(); - OrderEntryUtil.replaceLibrary(rootModel, oldLibrary, newLibrary); - context.getDaemonAnalyzer().queueUpdate(new ModuleProjectStructureElement(context, module)); - } - } - else if (usage instanceof UsageInArtifact) { - final PackagingElement newLibraryElement = PackagingElementFactory.getInstance().createLibraryFiles(newLibrary.getName(), - newLibrary.getTable().getTableLevel(), null); - ((UsageInArtifact)usage).replaceElement(newLibraryElement); - } + usage.replaceElement(new LibraryProjectStructureElement(context, newLibrary)); } if (!myCopy) { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureElementUsage.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureElementUsage.java index 8cbf14093212..0cc923e8f0c1 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureElementUsage.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/ProjectStructureElementUsage.java @@ -1,5 +1,7 @@ package com.intellij.openapi.roots.ui.configuration.projectRoot.daemon; +import com.intellij.openapi.roots.libraries.Library; + import javax.swing.*; /** @@ -23,4 +25,6 @@ public abstract class ProjectStructureElementUsage { public abstract Icon getIcon(); public abstract void removeSourceElement(); + + public abstract void replaceElement(ProjectStructureElement newElement); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/UsageInModuleClasspath.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/UsageInModuleClasspath.java index f401137f655f..24feb76b81fb 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/UsageInModuleClasspath.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/UsageInModuleClasspath.java @@ -2,6 +2,9 @@ package com.intellij.openapi.roots.ui.configuration.projectRoot.daemon; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleType; +import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.impl.OrderEntryUtil; +import com.intellij.openapi.roots.ui.configuration.ModuleEditor; import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable; import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext; import org.jetbrains.annotations.NotNull; @@ -72,4 +75,15 @@ public class UsageInModuleClasspath extends ProjectStructureElementUsage { .removeLibraryOrderEntry(myModule, ((LibraryProjectStructureElement)mySourceElement).getLibrary()); } } + + @Override + public void replaceElement(final ProjectStructureElement newElement) { + final ModuleEditor editor = myContext.getModulesConfigurator().getModuleEditor(myModule); + if (editor != null) { + final ModifiableRootModel rootModel = editor.getModifiableRootModelProxy(); + OrderEntryUtil.replaceLibrary(rootModel, ((LibraryProjectStructureElement)mySourceElement).getLibrary(), + ((LibraryProjectStructureElement)newElement).getLibrary()); + myContext.getDaemonAnalyzer().queueUpdate(new ModuleProjectStructureElement(myContext, myModule)); + } + } }