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
This commit is contained in:
Denis.Zhdanov
2012-02-16 15:50:46 +04:00
parent 2b3d732f05
commit e1a420b9c1
2 changed files with 23 additions and 4 deletions
@@ -240,8 +240,7 @@ public class GradleProjectStructureTreeModel extends DefaultTreeModel {
}
assert id != null;
final GradleProjectStructureNode<GradleModuleId> 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 {
@@ -145,7 +145,10 @@ public class GradleProjectStructureNode<T extends GradleEntityId> 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<T extends GradleEntityId> extends Defaul
myConflictChanges.remove(change);
if (myConflictChanges.isEmpty()) {
myDescriptor.setAttributes(GradleTextAttributes.GRADLE_NO_CHANGE);
onNodeChanged(this);
}
}
@@ -213,6 +217,11 @@ public class GradleProjectStructureNode<T extends GradleEntityId> 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<T extends GradleEntityId> 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);
}
}