diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java index 48afcd6daf75..a35e4ad7e44f 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java @@ -122,7 +122,7 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se myGlobalLibrariesConfig.init(myContext); myModulesConfig.init(myContext); myFacetStructureConfigurable.init(myContext); - myArtifactsStructureConfigurable.init(myContext); + myArtifactsStructureConfigurable.init(myContext, myModulesConfig, myProjectLibrariesConfig, myGlobalLibrariesConfig); final PropertiesComponent propertiesComponent = PropertiesComponent.getInstance(myProject); myUiState.lastEditedConfigurable = propertiesComponent.getValue("project.structure.last.edited"); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java index 914dfd05bed7..48155303906d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java @@ -23,14 +23,15 @@ import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; +import com.intellij.openapi.module.Module; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.ui.configuration.ModuleEditor; -import com.intellij.openapi.roots.ui.configuration.projectRoot.BaseStructureConfigurable; -import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext; +import com.intellij.openapi.roots.ui.configuration.projectRoot.*; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureElement; import com.intellij.openapi.ui.MasterDetailsStateService; import com.intellij.packaging.artifacts.*; @@ -40,7 +41,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; /** * @author nik @@ -58,8 +61,8 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable { MasterDetailsStateService.getInstance(project).register("ArtifactsStructureConfigurable.UI", this); } - @Override - public void init(StructureConfigurableContext context) { + public void init(StructureConfigurableContext context, ModuleStructureConfigurable moduleStructureConfigurable, + ProjectLibrariesConfigurable projectLibrariesConfig, GlobalLibrariesConfigurable globalLibrariesConfig) { super.init(context); myPackagingEditorContext = new ArtifactsStructureConfigurableContextImpl(myContext, myProject, myDefaultSettings, new ArtifactAdapter() { @Override @@ -77,6 +80,26 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable { } } }); + final ItemsChangeListener listener = new ItemsChangeListener() { + public void itemChanged(@Nullable Object deletedItem) { + if (deletedItem instanceof Library || deletedItem instanceof Module) { + onElementDeleted(); + } + } + + public void itemsExternallyChanged() { + } + }; + moduleStructureConfigurable.addItemsChangeListener(listener); + projectLibrariesConfig.addItemsChangeListener(listener); + globalLibrariesConfig.addItemsChangeListener(listener); + } + + private void onElementDeleted() { + for (ArtifactEditorImpl editor : myPackagingEditorContext.getArtifactEditors()) { + editor.getSourceItemsTree().rebuildTree(); + editor.queueValidation(); + } } @Nls @@ -251,7 +274,6 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable { return null; } - private class AddArtifactAction extends DumbAwareAction { private final ArtifactType myType; private final ArtifactTemplate myArtifactTemplate; 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 fbe1cebe332f..3e88bd9ce1b6 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 @@ -36,6 +36,8 @@ import com.intellij.packaging.ui.ManifestFileConfiguration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -215,6 +217,10 @@ public class ArtifactsStructureConfigurableContextImpl implements ArtifactsStruc myArtifactElements.clear(); } + public Collection getArtifactEditors() { + return Collections.unmodifiableCollection(myArtifactEditors.values()); + } + public void saveEditorSettings() { myEditorSettings.clear(); for (ArtifactEditorImpl artifactEditor : myArtifactEditors.values()) { diff --git a/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java b/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java index 502eb7ed069d..b013d99037d3 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/MasterDetailsComponent.java @@ -260,7 +260,7 @@ public abstract class MasterDetailsComponent implements Configurable, Persistent } } - protected void addItemsChangeListener(ItemsChangeListener l) { + public void addItemsChangeListener(ItemsChangeListener l) { myListners.add(l); }