From 9b5747445f9dc32bd2f1ea09bddeed3981080a6e Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Thu, 16 Aug 2012 18:26:25 +0400 Subject: [PATCH] IDEA-19061 Integrate the Rearranger-plugin into core-IDEA Implementing 'remove last row condition' --- .../ArrangementRuleEditingModelImplTest.java | 40 ++++++++++++++++++- .../ArrangementRuleEditingModelImpl.java | 32 +++++++++++++-- 2 files changed, 67 insertions(+), 5 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelImplTest.java b/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelImplTest.java index 06f5ea5ed7c0..9e50f8bc2ed2 100644 --- a/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelImplTest.java +++ b/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelImplTest.java @@ -116,6 +116,44 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule @Test public void removeLastRowCondition() { - // TODO den implement + configure(and(atom(FIELD), atom(PUBLIC))); + ArrangementRuleEditingModel model = myRowMappings.get(2); + assertNotNull(model); + assertEquals(1, myRowMappings.size()); + + model.removeAndCondition(atom(PUBLIC)); + + assertEquals(1, myRowMappings.size()); + assertSame(model, myRowMappings.get(1)); + assertEquals(atom(FIELD), model.getSettingsNode()); + + DefaultMutableTreeNode fieldNode = (DefaultMutableTreeNode)myRoot.getFirstChild(); + assertNotNull(fieldNode); + assertEquals(atom(FIELD), fieldNode.getUserObject()); + + assertEquals(0, fieldNode.getChildCount()); + } + + @Test + public void removeLastRowConditionFromMultiChildrenParent() { + // TODO den uncomment + //configure(and(atom(FIELD), atom(PUBLIC))); + //configure(and(atom(FIELD), atom(STATIC))); + // + //ArrangementRuleEditingModel modelToChange = myRowMappings.get(2); + //assertNotNull(modelToChange); + // + //ArrangementRuleEditingModel siblingModel = myRowMappings.get(3); + //assertNotNull(siblingModel); + //assertEquals(2, myRowMappings.size()); + // + //modelToChange.removeAndCondition(atom(PUBLIC)); + // + //assertEquals(2, myRowMappings.size()); + //assertSame(modelToChange, myRowMappings.get(1)); + //assertEquals(atom(FIELD), modelToChange.getSettingsNode()); + // + //assertSame(siblingModel, myRowMappings.get(3)); + //assertEquals(and(atom(FIELD), atom(STATIC)), siblingModel); } } diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelImpl.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelImpl.java index 38029ed15ccc..02d85d3a4e62 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelImpl.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelImpl.java @@ -110,13 +110,12 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo HierarchicalArrangementSettingsNode grouped = myGrouper.group(newNode); int newDepth = ArrangementConfigUtil.getDepth(grouped); int oldDepth = ArrangementConfigUtil.distance(myTopMost, myBottomMost); + mySettingsNode = newNode; if (newDepth == oldDepth) { - mySettingsNode = newNode; myBottomMost.setUserObject(ArrangementConfigUtil.getLast(grouped).getCurrent()); return; } - mySettingsNode = newNode; DefaultMutableTreeNode parent = (DefaultMutableTreeNode)myTopMost.getParent(); parent.remove(myTopMost); Pair pair = ArrangementConfigUtil.map(parent, grouped); @@ -157,16 +156,36 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo newNode = composite.getOperands().iterator().next(); } + mySettingsNode = newNode; + HierarchicalArrangementSettingsNode grouped = myGrouper.group(newNode); int newDepth = ArrangementConfigUtil.getDepth(grouped); int oldDepth = ArrangementConfigUtil.distance(myTopMost, myBottomMost); if (oldDepth == newDepth) { - mySettingsNode = newNode; myBottomMost.setUserObject(ArrangementConfigUtil.getLast(grouped).getCurrent()); return; } + + DefaultMutableTreeNode parent = (DefaultMutableTreeNode)myTopMost.getParent(); + parent.remove(myTopMost); + Pair pair = ArrangementConfigUtil.map(parent, grouped); + myTopMost = (DefaultMutableTreeNode)ArrangementConfigUtil.getLastBefore(pair.first, parent); + myBottomMost = pair.first; - // TODO den implement + int[] rows = myRowMappings.keys(); + Arrays.sort(rows); + int depthShift = oldDepth - newDepth; + for (int row : rows) { + if (row >= myRow) { + myRowMappings.put(row - depthShift, myRowMappings.get(row)); + myRowMappings.remove(row); + } + else { + break; + } + } + + myRow -= depthShift; } @Override @@ -180,6 +199,11 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo } } + @Override + public String toString() { + return "model for " + mySettingsNode; + } + private static class MyConditionsBuilder implements ArrangementSettingsNodeVisitor { @NotNull Set conditions;