From e1a420b9c15ef357d6db2181522d617e4bf19308 Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Thu, 16 Feb 2012 15:49:20 +0400 Subject: [PATCH] IDEA-76142: Gradle support - cannot update IDEA projects once one of build.gradle files changes 'Sync project structure' tree model is now automatically updated on node representation attributes change --- .../sync/GradleProjectStructureTreeModel.java | 9 ++++++--- .../gradle/ui/GradleProjectStructureNode.java | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureTreeModel.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureTreeModel.java index e4420b95e60c..f0dc67d9692d 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureTreeModel.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/sync/GradleProjectStructureTreeModel.java @@ -240,8 +240,7 @@ public class GradleProjectStructureTreeModel extends DefaultTreeModel { } assert id != null; final GradleProjectStructureNode moduleNode = getModuleNode(id); - moduleNode.getDescriptor().setAttributes(key); - nodeChanged(moduleNode); + moduleNode.setAttributes(key); } private void processObsoleteProjectRenameChange(@NotNull GradleProjectRenameChange change) { @@ -258,7 +257,6 @@ public class GradleProjectStructureTreeModel extends DefaultTreeModel { final GradleLibraryDependencyId id = node.getDescriptor().getElement(); if (id.getLibraryName().equals(change.getLibraryName())) { node.removeConflictChange(change); - nodeChanged(node); break; } } @@ -330,6 +328,11 @@ public class GradleProjectStructureTreeModel extends DefaultTreeModel { myNodeHolder[0] = node; nodesWereRemoved(node.getParent(), myIndexHolder, myNodeHolder); } + + @Override + public void onNodeChanged(@NotNull GradleProjectStructureNode node) { + nodeChanged(node); + } } private class NewChangesDispatcher implements GradleProjectStructureChangeVisitor { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/GradleProjectStructureNode.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/GradleProjectStructureNode.java index ca12256aa0a1..37dcd05b960c 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/GradleProjectStructureNode.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/GradleProjectStructureNode.java @@ -145,7 +145,10 @@ public class GradleProjectStructureNode extends Defaul */ public void addConflictChange(@NotNull GradleProjectStructureChange change) { myConflictChanges.add(change); - myDescriptor.setAttributes(GradleTextAttributes.GRADLE_CHANGE_CONFLICT); + if (myConflictChanges.size() == 1) { + myDescriptor.setAttributes(GradleTextAttributes.GRADLE_CHANGE_CONFLICT); + onNodeChanged(this); + } } /** @@ -157,6 +160,7 @@ public class GradleProjectStructureNode extends Defaul myConflictChanges.remove(change); if (myConflictChanges.isEmpty()) { myDescriptor.setAttributes(GradleTextAttributes.GRADLE_NO_CHANGE); + onNodeChanged(this); } } @@ -213,6 +217,11 @@ public class GradleProjectStructureNode extends Defaul }; } + public void setAttributes(@NotNull TextAttributesKey key) { + myDescriptor.setAttributes(key); + onNodeChanged(this); + } + public void addListener(@NotNull Listener listener) { myListeners.add(listener); } @@ -228,9 +237,16 @@ public class GradleProjectStructureNode extends Defaul listener.onNodeRemoved(node, index); } } + + private void onNodeChanged(@NotNull GradleProjectStructureNode node) { + for (Listener listener : myListeners) { + listener.onNodeChanged(node); + } + } public interface Listener { void onNodeAdded(@NotNull GradleProjectStructureNode node, int index); void onNodeRemoved(@NotNull GradleProjectStructureNode node, int index); + void onNodeChanged(@NotNull GradleProjectStructureNode node); } }