From d2dcc40aad43cd57b242457545d5ce75bb2fd1ed Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Tue, 21 Aug 2012 14:52:12 +0400 Subject: [PATCH] IDEA-19061 Integrate the Rearranger-plugin into core-IDEA Finish DefaultMutableTreeNode -> ArrangementTreeNode transition --- ...rrangementRuleEditingModelBuilderTest.java | 3 +-- .../ArrangementRuleEditingModelImplTest.java | 7 +++--- .../arrangement/ArrangementConfigUtil.java | 24 +++++++++++-------- .../ArrangementRuleEditingModelBuilder.java | 2 +- .../ArrangementRuleEditingModelImpl.java | 5 ++-- 5 files changed, 22 insertions(+), 19 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelBuilderTest.java b/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelBuilderTest.java index 1ccb60943293..927eaccad33b 100644 --- a/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelBuilderTest.java +++ b/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelBuilderTest.java @@ -60,8 +60,7 @@ public class ArrangementRuleEditingModelBuilderTest extends AbstractArrangementR assertEquals(and(atom(PUBLIC), atom(STATIC)), modifiersUiNode.getBackingSetting()); } - // TODO den uncomment - //@Test + @Test public void addToExistingLayer() { myBuilder.build(and(atom(PUBLIC), atom(STATIC), atom(FIELD)), myTree, myRoot, myGrouper, myRowMappings); myBuilder.build(and(atom(PRIVATE), atom(FIELD)), myTree, myRoot, myGrouper, myRowMappings); 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 947deab73231..4ba822e30d59 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 @@ -171,18 +171,17 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule checkTreeNodesConsistency(); } - // TODO den uncomment - //@Test + @Test public void removeLastRowConditionFromMultiChildrenParent() { configure(and(atom(FIELD), atom(PUBLIC))); configure(and(atom(FIELD), atom(STATIC))); + assertEquals(2, myRowMappings.size()); ArrangementRuleEditingModel siblingModel = myRowMappings.get(2); assertNotNull(siblingModel); ArrangementRuleEditingModel modelToChange = myRowMappings.get(3); assertNotNull(modelToChange); - assertEquals(2, myRowMappings.size()); modelToChange.removeAndCondition(atom(STATIC)); @@ -199,7 +198,7 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule ArrangementTreeNode publicNode = compositeFieldNode.getFirstChild(); assertNotNull(publicNode); - assertEquals(atom(PUBLIC), publicNode.getUserObject()); + assertEquals(atom(PUBLIC), publicNode.getBackingSetting()); ArrangementTreeNode atomFieldNode = compositeFieldNode.getNextSibling(); assertNotNull(atomFieldNode); diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementConfigUtil.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementConfigUtil.java index 06a5b78a06b0..a76e6ad72a5f 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementConfigUtil.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementConfigUtil.java @@ -176,34 +176,38 @@ public class ArrangementConfigUtil { * @param uiParentNode UI tree node which should hold UI nodes created for representing given settings node; * null as an indication that we want to create a standalone nodes hierarchy * @param settingsNode settings node which should be represented at the UI tree denoted by the given UI tree node + * @param model tree model to use for the tree modification * @return pair {@code (bottom-most leaf node created; number of rows created)} */ @NotNull public static Pair map(@Nullable ArrangementTreeNode uiParentNode, - @NotNull HierarchicalArrangementSettingsNode settingsNode) + @NotNull HierarchicalArrangementSettingsNode settingsNode, + @Nullable DefaultTreeModel model) { ArrangementTreeNode uiNode = null; int rowsCreated = 0; - if (uiParentNode != null) { - for (int i = uiParentNode.getChildCount() - 1; i >= 0; i--) { - ArrangementTreeNode child = uiParentNode.getChildAt(i); - if (settingsNode.getCurrent().equals(child.getUserObject())) { - uiNode = child; - break; - } + if (uiParentNode != null && uiParentNode.getChildCount() > 0) { + ArrangementTreeNode child = uiParentNode.getChildAt(uiParentNode.getChildCount() - 1); + if (settingsNode.getCurrent().equals(child.getBackingSetting())) { + uiNode = child; } } if (uiNode == null) { uiNode = new ArrangementTreeNode(settingsNode.getCurrent()); if (uiParentNode != null) { - uiParentNode.add(uiNode); + if (model == null) { + uiParentNode.add(uiNode); + } + else { + model.insertNodeInto(uiNode, uiParentNode, uiParentNode.getChildCount()); + } } rowsCreated++; } ArrangementTreeNode leaf = uiNode; HierarchicalArrangementSettingsNode childSettingsNode = settingsNode.getChild(); if (childSettingsNode != null) { - Pair pair = map(uiNode, childSettingsNode); + Pair pair = map(uiNode, childSettingsNode, model); leaf = pair.first; rowsCreated += pair.second; } diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelBuilder.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelBuilder.java index f5788b850ea2..cb20a2da154f 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelBuilder.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementRuleEditingModelBuilder.java @@ -94,7 +94,7 @@ public class ArrangementRuleEditingModelBuilder { HierarchicalArrangementSettingsNode grouped = grouper.group(setting); DefaultTreeModel treeModel = (DefaultTreeModel)tree.getModel(); - Pair pair = ArrangementConfigUtil.map(root, grouped); + Pair pair = ArrangementConfigUtil.map(root, grouped, treeModel); ArrangementTreeNode topMostNode = ArrangementConfigUtil.getLastBefore(pair.first, root); int row = initialInsertRow + pair.second - 1; ArrangementRuleEditingModelImpl model = new ArrangementRuleEditingModelImpl( 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 a2481f8148e7..a96255425d90 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 @@ -129,7 +129,8 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo // No refresh is necessary. return; } - else if (myTopMost.getUserObject().equals(node.getUserObject())) { + ArrangementSettingsNode setting = myTopMost.getBackingSetting(); + if (setting != null && setting.equals(node.getBackingSetting())) { myTopMost = node; return; } @@ -181,7 +182,7 @@ public class ArrangementRuleEditingModelImpl implements ArrangementRuleEditingMo return; } - Pair replacement = ArrangementConfigUtil.map(null, grouped); + Pair replacement = ArrangementConfigUtil.map(null, grouped, null); ArrangementTreeNode newBottom = replacement.first; ArrangementTreeNode newTop = ArrangementConfigUtil.getRoot(newBottom); final TIntIntHashMap rowChanges = ArrangementConfigUtil.replace(myTopMost, myBottomMost, newTop, myTreeModel);