diff --git a/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementConfigUtilTest.groovy b/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementConfigUtilTest.groovy
index d8b6216d5edc..ba96018c4730 100644
--- a/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementConfigUtilTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/application/options/codeStyle/arrangement/ArrangementConfigUtilTest.groovy
@@ -141,7 +141,7 @@ node = '4'()
@Test
void replaceWithTwoLevelMergeToNodeBelow() {
- // Init.
+ // Init.
def from;
def to;
def initial = new TreeNodeBuilder().
@@ -172,6 +172,43 @@ to = '3'()}
assertNodesEqual(expected, initial)
checkRowMappings([:], rowMappings)
}
+
+ @Test
+ void replaceFirstChildWithMergeBelow() {
+ // Init.
+ def from;
+ def to;
+ def initial = new TreeNodeBuilder().
+ '0' {
+from = '1'() {
+to = '2'()}
+ '3'() {
+ '4'() }
+ '1' {
+ '5'()
+ '6'()}
+ }
+
+ // Modify.
+ def replacement = new TreeNodeBuilder().
+ '3' {
+ '2'()
+ }
+ def rowMappings = doReplace(initial, from, to, replacement)
+
+ // Check.
+ def expected = new TreeNodeBuilder().
+ '0' {
+ '3' {
+ '2'()
+ '4'()}
+ '1' {
+ '5'()
+ '6'()}
+ }
+ assertNodesEqual(expected, initial)
+ checkRowMappings([ 4 : 3, 5 : 4, 6 : 5, 7 : 6 ], rowMappings)
+ }
@Test
void addWithoutMergeAbove() {
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 f1e338be484a..be4ea08d840e 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
@@ -39,7 +39,7 @@ public class ArrangementRuleEditingModelBuilderTest extends AbstractArrangementR
assertTrue(model.hasCondition(STATIC));
assertFalse(model.hasCondition(PRIVATE));
assertEquals(1, myRoot.getChildCount());
- assertEquals(matchCondition, myRoot.getFirstChild().getBackingSetting());
+ assertEquals(matchCondition, myRoot.getFirstChild().getBackingCondition());
}
@Test
@@ -51,11 +51,11 @@ public class ArrangementRuleEditingModelBuilderTest extends AbstractArrangementR
ArrangementTreeNode fieldUiNode = myRoot.getFirstChild();
assertNotNull(fieldUiNode);
- assertEquals(atom(FIELD), fieldUiNode.getBackingSetting());
+ assertEquals(atom(FIELD), fieldUiNode.getBackingCondition());
ArrangementTreeNode modifiersUiNode = fieldUiNode.getFirstChild();
assertNotNull(modifiersUiNode);
- assertEquals(and(atom(PUBLIC), atom(STATIC)), modifiersUiNode.getBackingSetting());
+ assertEquals(and(atom(PUBLIC), atom(STATIC)), modifiersUiNode.getBackingCondition());
}
@Test
@@ -67,14 +67,14 @@ public class ArrangementRuleEditingModelBuilderTest extends AbstractArrangementR
ArrangementTreeNode fieldUiNode = myRoot.getFirstChild();
assertNotNull(fieldUiNode);
- assertEquals(atom(FIELD), fieldUiNode.getBackingSetting());
+ assertEquals(atom(FIELD), fieldUiNode.getBackingCondition());
ArrangementTreeNode publicStaticUiNode = fieldUiNode.getFirstChild();
assertNotNull(publicStaticUiNode);
- assertEquals(and(atom(PUBLIC), atom(STATIC)), publicStaticUiNode.getBackingSetting());
+ assertEquals(and(atom(PUBLIC), atom(STATIC)), publicStaticUiNode.getBackingCondition());
ArrangementTreeNode privateUiNode = fieldUiNode.getLastChild();
assertNotNull(privateUiNode);
- assertEquals(atom(PRIVATE), privateUiNode.getBackingSetting());
+ assertEquals(atom(PRIVATE), privateUiNode.getBackingCondition());
}
}
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 ad21cf70d1b3..6ad43d9a2071 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
@@ -40,7 +40,7 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
ArrangementTreeNode child = myRoot.getFirstChild();
assertNotNull(child);
ArrangementMatchCondition expectedMatchCondition = and(atom(PUBLIC), atom(STATIC));
- assertEquals(expectedMatchCondition, child.getBackingSetting());
+ assertEquals(expectedMatchCondition, child.getBackingCondition());
assertEquals(expectedMatchCondition, model.getMatchCondition());
}
@@ -58,11 +58,11 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
ArrangementTreeNode fieldNode = myRoot.getFirstChild();
assertNotNull(fieldNode);
- assertEquals(atom(FIELD), fieldNode.getBackingSetting());
+ assertEquals(atom(FIELD), fieldNode.getBackingCondition());
ArrangementTreeNode publicNode = fieldNode.getFirstChild();
assertNotNull(publicNode);
- assertEquals(atom(PUBLIC), publicNode.getBackingSetting());
+ assertEquals(atom(PUBLIC), publicNode.getBackingCondition());
}
@Test
@@ -80,11 +80,11 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
ArrangementTreeNode fieldNode = myRoot.getFirstChild();
assertNotNull(fieldNode);
- assertEquals(atom(FIELD), fieldNode.getBackingSetting());
+ assertEquals(atom(FIELD), fieldNode.getBackingCondition());
ArrangementTreeNode modifiersNode = fieldNode.getFirstChild();
assertNotNull(modifiersNode);
- assertEquals(and(atom(PUBLIC), atom(STATIC)), modifiersNode.getBackingSetting());
+ assertEquals(and(atom(PUBLIC), atom(STATIC)), modifiersNode.getBackingCondition());
}
@Test
@@ -102,11 +102,11 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
ArrangementTreeNode fieldNode = myRoot.getFirstChild();
assertNotNull(fieldNode);
- assertEquals(atom(FIELD), fieldNode.getBackingSetting());
+ assertEquals(atom(FIELD), fieldNode.getBackingCondition());
ArrangementTreeNode modifiersNode = fieldNode.getFirstChild();
assertNotNull(modifiersNode);
- assertEquals(atom(STATIC), modifiersNode.getBackingSetting());
+ assertEquals(atom(STATIC), modifiersNode.getBackingCondition());
}
@Test
@@ -123,7 +123,7 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
ArrangementTreeNode fieldNode = myRoot.getFirstChild();
assertNotNull(fieldNode);
- assertEquals(atom(FIELD), fieldNode.getBackingSetting());
+ assertEquals(atom(FIELD), fieldNode.getBackingCondition());
assertEquals(0, fieldNode.getChildCount());
}
@@ -150,15 +150,15 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
ArrangementTreeNode atomFieldNode = myRoot.getFirstChild();
assertNotNull(atomFieldNode);
- assertEquals(atom(FIELD), atomFieldNode.getBackingSetting());
+ assertEquals(atom(FIELD), atomFieldNode.getBackingCondition());
ArrangementTreeNode layeredFieldNode = atomFieldNode.getNextSibling();
assertNotNull(atomFieldNode);
- assertEquals(atom(FIELD), atomFieldNode.getBackingSetting());
+ assertEquals(atom(FIELD), atomFieldNode.getBackingCondition());
ArrangementTreeNode staticNode = layeredFieldNode.getFirstChild();
assertNotNull(staticNode);
- assertEquals(atom(STATIC), staticNode.getBackingSetting());
+ assertEquals(atom(STATIC), staticNode.getBackingCondition());
}
@Test
@@ -184,14 +184,14 @@ public class ArrangementRuleEditingModelImplTest extends AbstractArrangementRule
ArrangementTreeNode compositeFieldNode = myRoot.getFirstChild();
assertNotNull(compositeFieldNode);
- assertEquals(atom(FIELD), compositeFieldNode.getBackingSetting());
+ assertEquals(atom(FIELD), compositeFieldNode.getBackingCondition());
ArrangementTreeNode publicNode = compositeFieldNode.getFirstChild();
assertNotNull(publicNode);
- assertEquals(atom(PUBLIC), publicNode.getBackingSetting());
+ assertEquals(atom(PUBLIC), publicNode.getBackingCondition());
ArrangementTreeNode atomFieldNode = compositeFieldNode.getNextSibling();
assertNotNull(atomFieldNode);
- assertEquals(atom(FIELD), atomFieldNode.getBackingSetting());
+ assertEquals(atom(FIELD), atomFieldNode.getBackingCondition());
}
}
diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementCompositeMatchCondition.java b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementCompositeMatchCondition.java
index db001821090f..fa92ddb914ad 100644
--- a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementCompositeMatchCondition.java
+++ b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementCompositeMatchCondition.java
@@ -24,7 +24,7 @@ import java.util.Set;
/**
* Encapsulates composite match condition, e.g. "an entry has type 'field' and modifier 'static'".
*
- * Thread-safe.
+ * Not thread-safe.
*
* @author Denis Zhdanov
* @since 8/8/12 1:18 PM
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 a13ae0cdad4e..9e87d263148d 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
@@ -188,7 +188,7 @@ public class ArrangementConfigUtil {
int rowsCreated = 0;
if (uiParentNode != null && uiParentNode.getChildCount() > 0) {
ArrangementTreeNode child = uiParentNode.getChildAt(uiParentNode.getChildCount() - 1);
- if (conditionNode.getCurrent().equals(child.getBackingSetting())) {
+ if (conditionNode.getCurrent().equals(child.getBackingCondition())) {
uiNode = child;
}
}
@@ -316,7 +316,7 @@ public class ArrangementConfigUtil {
parentCopy.add(cutHierarchy);
}
for (int j = i + 1; j < childCount; j++) {
- ArrangementTreeNode child = parent.getChildAt(j);
+ ArrangementTreeNode child = parent.getChildAt(i + 1);
treeModel.removeNodeFromParent(child);
parentCopy.add(child);
}
@@ -527,8 +527,8 @@ public class ArrangementConfigUtil {
}
private static boolean hasEqualSetting(@NotNull ArrangementTreeNode node1, @NotNull ArrangementTreeNode node2) {
- ArrangementMatchCondition matchCondition1 = node1.getBackingSetting();
- ArrangementMatchCondition matchCondition2 = node2.getBackingSetting();
+ ArrangementMatchCondition matchCondition1 = node1.getBackingCondition();
+ ArrangementMatchCondition matchCondition2 = node2.getBackingCondition();
if (matchCondition1 == null) {
return matchCondition2 == null;
}
diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementMatcherRuleEditor.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementMatchConditionEditor.java
similarity index 87%
rename from platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementMatcherRuleEditor.java
rename to platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementMatchConditionEditor.java
index 0c58485438e4..f4f78563d208 100644
--- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementMatcherRuleEditor.java
+++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/ArrangementMatchConditionEditor.java
@@ -39,7 +39,7 @@ import java.util.List;
* @author Denis Zhdanov
* @since 8/14/12 9:54 AM
*/
-public class ArrangementMatcherRuleEditor extends JPanel {
+public class ArrangementMatchConditionEditor extends JPanel {
@NotNull private final List myColoredComponents = new ArrayList();
@NotNull private final Map