From 8f0124a8c4cd4e65eac687b020755f370c7873a4 Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Mon, 19 Oct 2009 19:55:17 +0400 Subject: [PATCH] modifiable root model: fix libraries --- .../ProjectStructureConfigurable.java | 3 +- .../BaseLibrariesConfigurable.java | 14 ++++---- .../BaseStructureConfigurable.java | 7 ++-- .../projectRoot/LibrariesModifiableModel.java | 32 ++++++++++++------- .../StructureConfigurableContext.java | 7 ++-- 5 files changed, 36 insertions(+), 27 deletions(-) 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 3abc96473c9a..8b0433e65354 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 @@ -268,7 +268,6 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se } myContext.getDaemonAnalyzer().clearCaches(); - myContext.resetLibraries(); } public void reset() { @@ -319,7 +318,7 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se for (Configurable each : myName2Config) { each.disposeUIResources(); } - + myContext.clear(); myName2Config.clear(); myModuleConfigurator.getFacetsConfigurator().clearMaps(); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseLibrariesConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseLibrariesConfigurable.java index 9c91062c1b97..4377f3a0e5af 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseLibrariesConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseLibrariesConfigurable.java @@ -27,12 +27,14 @@ import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.impl.libraries.LibraryImpl; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.LibraryTable; -import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar; import com.intellij.openapi.roots.ui.configuration.LibraryTableModifiableModelProvider; import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryTableEditor; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.LibraryProjectStructureElement; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureElement; -import com.intellij.openapi.ui.*; +import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.ui.NamedConfigurable; +import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; @@ -96,8 +98,7 @@ public abstract class BaseLibrariesConfigurable extends BaseStructureConfigurabl } protected void loadTree() { - final LibraryTable libraryTable = LibraryTablesRegistrar.getInstance().getLibraryTableByLevel(myLevel, myProject); - createLibrariesNode(myContext.createModifiableModelProvider(myLevel, false), new LibrariesModifiableModel(libraryTable, myProject)); + createLibrariesNode(myContext.createModifiableModelProvider(myLevel, false)); } @NotNull @@ -117,8 +118,8 @@ public abstract class BaseLibrariesConfigurable extends BaseStructureConfigurabl return result; } - private void createLibrariesNode(final LibraryTableModifiableModelProvider modelProvider, final LibrariesModifiableModel provider) { - final Library[] libraries = provider.getLibraries(); + private void createLibrariesNode(final LibraryTableModifiableModelProvider modelProvider) { + final Library[] libraries = modelProvider.getModifiableModel().getLibraries(); for (Library library : libraries) { myRoot.add(new MyNode(new LibraryConfigurable(modelProvider, library, myProject, TREE_UPDATER))); } @@ -159,7 +160,6 @@ public abstract class BaseLibrariesConfigurable extends BaseStructureConfigurabl } public void dispose() { - myContext.myLevel2Providers.clear(); } protected AnAction createCopyAction() { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java index ba5f858e6add..374b6eaa0cbe 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java @@ -38,6 +38,7 @@ import com.intellij.openapi.ui.MasterDetailsComponent; import com.intellij.openapi.ui.NamedConfigurable; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.Disposer; import com.intellij.packaging.artifacts.Artifact; import com.intellij.ui.ColoredTreeCellRenderer; import com.intellij.ui.SimpleTextAttributes; @@ -208,11 +209,7 @@ public abstract class BaseStructureConfigurable extends MasterDetailsComponent i myAutoScrollHandler.cancelAllRequests(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - dispose(); - } - }); + Disposer.dispose(this); } protected void addCollapseExpandActions(final List result) { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/LibrariesModifiableModel.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/LibrariesModifiableModel.java index 769d7455c914..1069297a465f 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/LibrariesModifiableModel.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/LibrariesModifiableModel.java @@ -35,16 +35,17 @@ public class LibrariesModifiableModel implements LibraryTable.ModifiableModel { private final Map myLibrary2EditorMap = new HashMap(); private final Set myRemovedLibraries = new HashSet(); - private final LibraryTable.ModifiableModel myLibrariesModifiableModel; + private LibraryTable.ModifiableModel myLibrariesModifiableModel; private final Project myProject; + private LibraryTable myTable; public LibrariesModifiableModel(final LibraryTable table, final Project project) { myProject = project; - myLibrariesModifiableModel = table.getModifiableModel(); + myTable = table; } public Library createLibrary(String name) { - final Library library = myLibrariesModifiableModel.createLibrary(name); + final Library library = getLibrariesModifiableModel().createLibrary(name); //createLibraryEditor(library); final BaseLibrariesConfigurable configurable = ProjectStructureConfigurable.getInstance(myProject).getConfigurableFor(library); configurable.createLibraryNode(library); @@ -52,11 +53,11 @@ public class LibrariesModifiableModel implements LibraryTable.ModifiableModel { } public void removeLibrary(@NotNull Library library) { - if (myLibrariesModifiableModel.getLibraryByName(library.getName()) == null) return; + if (getLibrariesModifiableModel().getLibraryByName(library.getName()) == null) return; myRemovedLibraries.add(library); removeLibraryEditor(library); - myLibrariesModifiableModel.removeLibrary(library); + getLibrariesModifiableModel().removeLibrary(library); } public void commit() { @@ -65,31 +66,32 @@ public class LibrariesModifiableModel implements LibraryTable.ModifiableModel { @NotNull public Iterator getLibraryIterator() { - return myLibrariesModifiableModel.getLibraryIterator(); + return getLibrariesModifiableModel().getLibraryIterator(); } public Library getLibraryByName(@NotNull String name) { - return myLibrariesModifiableModel.getLibraryByName(name); + return getLibrariesModifiableModel().getLibraryByName(name); } @NotNull public Library[] getLibraries() { - return myLibrariesModifiableModel.getLibraries(); + return getLibrariesModifiableModel().getLibraries(); } public boolean isChanged() { for (LibraryEditor libraryEditor : myLibrary2EditorMap.values()) { if (libraryEditor.hasChanges()) return true; } - return myLibrariesModifiableModel.isChanged(); + return getLibrariesModifiableModel().isChanged(); } public void deferredCommit(){ for (LibraryEditor libraryEditor : new ArrayList(myLibrary2EditorMap.values())) { - libraryEditor.commit(); + libraryEditor.commit(); // TODO: is seems like commit will recreate the editor, but it should not } if (!(myLibrary2EditorMap.isEmpty() && myRemovedLibraries.isEmpty())) { - myLibrariesModifiableModel.commit(); + getLibrariesModifiableModel().commit(); + myLibrariesModifiableModel = null; } myLibrary2EditorMap.clear(); myRemovedLibraries.clear(); @@ -136,4 +138,12 @@ public class LibrariesModifiableModel implements LibraryTable.ModifiableModel { public Library.ModifiableModel getLibraryModifiableModel(final Library library) { return getLibraryEditor(library).getModel(); } + + private LibraryTable.ModifiableModel getLibrariesModifiableModel() { + if (myLibrariesModifiableModel == null) { + myLibrariesModifiableModel = myTable.getModifiableModel(); + } + + return myLibrariesModifiableModel; + } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/StructureConfigurableContext.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/StructureConfigurableContext.java index c8a45db598b7..5b17b815e8ed 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/StructureConfigurableContext.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/StructureConfigurableContext.java @@ -129,7 +129,6 @@ public class StructureConfigurableContext implements Disposable { @Nullable public Library getLibrary(final String libraryName, final String libraryLevel) { /* the null check is added only to prevent NPE when called from getLibrary */ - if (myLevel2Providers.isEmpty()) resetLibraries(); final LibrariesModifiableModel model = myLevel2Providers.get(libraryLevel); return model == null ? null : findLibraryModel(libraryName, model); } @@ -149,8 +148,12 @@ public class StructureConfigurableContext implements Disposable { public void reset() { - myDaemonAnalyzer.reset(); resetLibraries(); myModulesConfigurator.resetModuleEditors(); + myDaemonAnalyzer.reset(); // should be called after resetLibraries! + } + + public void clear() { + myLevel2Providers.clear(); } } \ No newline at end of file