From 1ec9d357b0fb83d8638f3584eaa2b06c66922609 Mon Sep 17 00:00:00 2001 From: "Denis.Zhdanov" Date: Tue, 22 May 2012 14:26:34 +0400 Subject: [PATCH] IDEA-19061 Integrate the Rearranger-plugin into core-IDEA More tests have been refactored and enabled --- .../com/wrq/rearranger/RearrangerTest.groovy | 134 +++++++----------- .../util/AbstractRuleBuilder.groovy | 22 ++- .../util/java/JavaInterfaceRuleBuilder.groovy | 6 + .../RearrangementResult23BNNANXME.java | 2 +- .../RearrangementResult23NNIANXME.java | 9 +- .../RearrangementResult23NNNANXME.java | 9 +- .../RearrangementResult23NNNANXMI.java | 9 +- 7 files changed, 92 insertions(+), 99 deletions(-) diff --git a/plugins/rearranger/test/src/com/wrq/rearranger/RearrangerTest.groovy b/plugins/rearranger/test/src/com/wrq/rearranger/RearrangerTest.groovy index 668b40a66b78..e7d84d8a97d5 100644 --- a/plugins/rearranger/test/src/com/wrq/rearranger/RearrangerTest.groovy +++ b/plugins/rearranger/test/src/com/wrq/rearranger/RearrangerTest.groovy @@ -653,86 +653,60 @@ class RearrangerTest extends LightCodeInsightFixtureTestCase { setup( "don't group extracted methods": false, order: InterfaceAttributes.METHOD_ORDER_ALPHABETICAL, alphabetize: false ) } } } -// public void testInterfaceNoNameNotAlphabeticalNoExcludeMethodEncountered() throws Exception { -// configureByFile("/com/wrq/rearranger/RearrangementTest23.java"); -// final PsiFile file = getFile(); -// final Document doc = PsiDocumentManager.getInstance(getProject()).getDocument(file); -// final RearrangerActionHandler rah = new RearrangerActionHandler(); -// rs.setKeepGettersSettersTogether(false); -// InterfaceAttributes ia = new InterfaceAttributes(); -// CommentRule cr = new CommentRule(); -// cr.setCommentText("/**** Interface %IF% Header ****/"); -// ia.setPrecedingComment(cr); -// cr = new CommentRule(); -// cr.setCommentText("/**** Interface %IF% Trailer ***/"); -// ia.setTrailingComment(cr); -// ia.setNoExtractedMethods(true); -// ia.setMethodOrder(InterfaceAttributes.METHOD_ORDER_ENCOUNTERED); -// ia.setAlphabetizeInterfaces(false); -// rs.addItem(ia, 0); -// rah.rearrangeDocument(getProject(), file, rs, doc); -// super.checkResultByFile("/com/wrq/rearranger/RearrangementResult23NNNANXME.java"); -// } -// -// public void testInterfaceNoNameNotAlphabeticalNoExcludeMethodInterfaceOrder() throws Exception { -// configureByFile("/com/wrq/rearranger/RearrangementTest23.java"); -// final PsiFile file = getFile(); -// final Document doc = PsiDocumentManager.getInstance(getProject()).getDocument(file); -// final RearrangerActionHandler rah = new RearrangerActionHandler(); -// rs.setKeepGettersSettersTogether(false); -// InterfaceAttributes ia = new InterfaceAttributes(); -// CommentRule cr = new CommentRule(); -// cr.setCommentText("/**** Interface %IF% Header ****/"); -// ia.setPrecedingComment(cr); -// cr = new CommentRule(); -// cr.setCommentText("/**** Interface %IF% Trailer ***/"); -// ia.setTrailingComment(cr); -// ia.setNoExtractedMethods(true); -// ia.setMethodOrder(InterfaceAttributes.METHOD_ORDER_INTERFACE_ORDER); -// ia.setAlphabetizeInterfaces(false); -// rs.addItem(ia, 0); -// rah.rearrangeDocument(getProject(), file, rs, doc); -// super.checkResultByFile("/com/wrq/rearranger/RearrangementResult23NNNANXMI.java"); -// } -// -// public void testInterfaceByNameNotAlphabeticalNoExcludeMethodEncountered() throws Exception { -// configureByFile("/com/wrq/rearranger/RearrangementTest23.java"); -// final PsiFile file = getFile(); -// final Document doc = PsiDocumentManager.getInstance(getProject()).getDocument(file); -// final RearrangerActionHandler rah = new RearrangerActionHandler(); -// rs.setKeepGettersSettersTogether(false); -// InterfaceAttributes ia = new InterfaceAttributes(); -// ia.getNameAttr().setMatch(true); -// ia.getNameAttr().setExpression("IFace1"); -// ia.setNoExtractedMethods(true); -// ia.setMethodOrder(InterfaceAttributes.METHOD_ORDER_ENCOUNTERED); -// ia.setAlphabetizeInterfaces(false); -// rs.addItem(ia, 0); -// rah.rearrangeDocument(getProject(), file, rs, doc); -// super.checkResultByFile("/com/wrq/rearranger/RearrangementResult23BNNANXME.java"); -// } -// -// public void testInterfaceIsAlphabeticalNoExcludeMethodEncountered() throws Exception { -// configureByFile("/com/wrq/rearranger/RearrangementTest23.java"); -// final PsiFile file = getFile(); -// final Document doc = PsiDocumentManager.getInstance(getProject()).getDocument(file); -// final RearrangerActionHandler rah = new RearrangerActionHandler(); -// rs.setKeepGettersSettersTogether(false); -// InterfaceAttributes ia = new InterfaceAttributes(); -// CommentRule cr = new CommentRule(); -// cr.setCommentText("/**** Interface %IF% Header ****/"); -// ia.setPrecedingComment(cr); -// cr = new CommentRule(); -// cr.setCommentText("/**** Interface %IF% Trailer ***/"); -// ia.setTrailingComment(cr); -// ia.setNoExtractedMethods(true); -// ia.setMethodOrder(InterfaceAttributes.METHOD_ORDER_ENCOUNTERED); -// ia.setAlphabetizeInterfaces(true); -// rs.addItem(ia, 0); -// rah.rearrangeDocument(getProject(), file, rs, doc); -// super.checkResultByFile("/com/wrq/rearranger/RearrangementResult23NNIANXME.java"); -// } -// + public void testInterfaceNoNameNotAlphabeticalNoExcludeMethodEncountered() throws Exception { + doTest('RearrangementTest23', 'RearrangementResult23NNNANXME') { + mySettings.keepGettersSettersTogether = false + interfaceRule.create { + precedingComment( '/**** Interface %IF% Header ****/' ) + trailingComment( '/**** Interface %IF% Trailer ***/' ) + setup( "don't group extracted methods": false, order: InterfaceAttributes.METHOD_ORDER_ENCOUNTERED, alphabetize: false ) + } } } + + public void testInterfaceNoNameNotAlphabeticalNoExcludeMethodInterfaceOrder() throws Exception { + doTest('RearrangementTest23', 'RearrangementResult23NNNANXMI') { + mySettings.keepGettersSettersTogether = false + interfaceRule.create { + precedingComment( '/**** Interface %IF% Header ****/' ) + trailingComment( '/**** Interface %IF% Trailer ***/' ) + setup( "don't group extracted methods": false, order: InterfaceAttributes.METHOD_ORDER_INTERFACE_ORDER, alphabetize: false ) + } } } + + public void testInterfaceByNameNotAlphabeticalNoExcludeMethodEncountered() throws Exception { + doTest('RearrangementTest23', 'RearrangementResult23BNNANXME') { + mySettings.keepGettersSettersTogether = false + interfaceRule.setup( "don't group extracted methods": true, order: InterfaceAttributes.METHOD_ORDER_ENCOUNTERED, + alphabetize: false, name : 'IFace1' + ) } } + + public void testInterfaceIsAlphabeticalNoExcludeMethodEncountered() throws Exception { + doTest('RearrangementTest23', 'RearrangementResult23NNIANXME') { + interfaceRule.create { + precedingComment( '/**** Interface %IF% Header ****/' ) + trailingComment( '/**** Interface %IF% Trailer ***/' ) + setup( "don't group extracted methods": true, order: InterfaceAttributes.METHOD_ORDER_ENCOUNTERED, alphabetize: true ) + } + } + + //configureByFile("/com/wrq/rearranger/RearrangementTest23.java"); + //final PsiFile file = getFile(); + //final Document doc = PsiDocumentManager.getInstance(getProject()).getDocument(file); + //final RearrangerActionHandler rah = new RearrangerActionHandler(); + //rs.setKeepGettersSettersTogether(false); + //InterfaceAttributes ia = new InterfaceAttributes(); + //CommentRule cr = new CommentRule(); + //cr.setCommentText("/**** Interface %IF% Header ****/"); + //ia.setPrecedingComment(cr); + //cr = new CommentRule(); + //cr.setCommentText("/**** Interface %IF% Trailer ***/"); + //ia.setTrailingComment(cr); + //ia.setNoExtractedMethods(true); + //ia.setMethodOrder(InterfaceAttributes.METHOD_ORDER_ENCOUNTERED); + //ia.setAlphabetizeInterfaces(true); + //rs.addItem(ia, 0); + //rah.rearrangeDocument(getProject(), file, rs, doc); + //super.checkResultByFile("/com/wrq/rearranger/RearrangementResult23NNIANXME.java"); + } + // public void testNPE24() throws Exception { // // submitted by Nathan Brown. Caused NPE in Rearranger plugin version 1.7. // int itemIndex = 0; diff --git a/plugins/rearranger/test/src/com/wrq/rearranger/util/AbstractRuleBuilder.groovy b/plugins/rearranger/test/src/com/wrq/rearranger/util/AbstractRuleBuilder.groovy index fc4588f41678..b0abdf5990f0 100644 --- a/plugins/rearranger/test/src/com/wrq/rearranger/util/AbstractRuleBuilder.groovy +++ b/plugins/rearranger/test/src/com/wrq/rearranger/util/AbstractRuleBuilder.groovy @@ -18,6 +18,7 @@ import org.junit.Assert public abstract class AbstractRuleBuilder extends BuilderSupport { @NotNull def RearrangerSettings settings + private boolean myRuleRegistered /** * Holds rule customization handlers in the form {@code 'property id -> closure'} where 'property id' @@ -30,10 +31,19 @@ public abstract class AbstractRuleBuilder extends BuilderSupport { { key -> Assert.fail("No handler for the rule attribute '${key}'") } } + @Override + protected Object getCurrent() { + if (!super.current) { + current = createRule() + } + super.current + } + @Override protected void nodeCompleted(Object parent, Object node) { - if (!parent && node) { + if (!myRuleRegistered) { registerRule(settings, node as T) + myRuleRegistered = true } } @@ -43,12 +53,9 @@ public abstract class AbstractRuleBuilder extends BuilderSupport { @Override protected Object createNode(Object name) { - if (name == 'create') { - return createRule() - } createNode(name, [:], []) } - + @Override protected Object createNode(Object name, Object value) { createNode(name, [:], value) @@ -61,6 +68,9 @@ public abstract class AbstractRuleBuilder extends BuilderSupport { @Override protected Object createNode(Object name, Map attributes, Object value) { + if (!myHandlers.containsKey(name)) { + return current + } if (value) { for (i in [value].flatten()) { myHandlers[name](i, attributes, current) @@ -70,7 +80,7 @@ public abstract class AbstractRuleBuilder extends BuilderSupport { myHandlers[name](null, attributes, current) } - getCurrent() + current } @Nullable diff --git a/plugins/rearranger/test/src/com/wrq/rearranger/util/java/JavaInterfaceRuleBuilder.groovy b/plugins/rearranger/test/src/com/wrq/rearranger/util/java/JavaInterfaceRuleBuilder.groovy index 5d745862620c..083138816896 100644 --- a/plugins/rearranger/test/src/com/wrq/rearranger/util/java/JavaInterfaceRuleBuilder.groovy +++ b/plugins/rearranger/test/src/com/wrq/rearranger/util/java/JavaInterfaceRuleBuilder.groovy @@ -19,11 +19,17 @@ class JavaInterfaceRuleBuilder extends AbstractJavaRuleBuilder commentHandler(rule, value, 'precedingComment') }) registerHandler(RearrangerTestDsl.TRAILING_COMMENT, { value, attributes, rule -> commentHandler(rule, value, 'trailingComment') }) registerHandler(RearrangerTestDsl.SETUP, { value, attributes, rule -> RearrangerTestUtil.setIf(RearrangerTestDsl.GROUP_EXTRACTED_METHODS, attributes, 'noExtractedMethods', rule) RearrangerTestUtil.setIf(RearrangerTestDsl.ORDER, attributes, 'methodOrder', rule) + RearrangerTestUtil.setIf(RearrangerTestDsl.ALPHABETIZE, attributes, 'alphabetizeInterfaces', rule) + if (attributes[RearrangerTestDsl.NAME.value]) { + nameHandler(attributes[RearrangerTestDsl.NAME.value], attributes, rule) + } }) } diff --git a/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23BNNANXME.java b/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23BNNANXME.java index 4e7bf76cd622..3bf2004df185 100644 --- a/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23BNNANXME.java +++ b/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23BNNANXME.java @@ -1,6 +1,7 @@ public class RearrangementTest23 implements IFace2, IFace1 { + public int getY() { return 6; } @@ -8,7 +9,6 @@ public class RearrangementTest23 public int getX() { return getA() ? 5 : 3; } - int method1() { return 4; } diff --git a/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNIANXME.java b/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNIANXME.java index 73e08795186f..ef00945287f0 100644 --- a/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNIANXME.java +++ b/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNIANXME.java @@ -1,7 +1,8 @@ public class RearrangementTest23 implements IFace2, IFace1 { - /** * Interface IFace1 Header *** */ +/**** Interface IFace1 Header ****/ + public int getY() { return 6; } @@ -10,7 +11,8 @@ public class RearrangementTest23 return getA() ? 5 : 3; } /**** Interface IFace1 Trailer ***/ - /** * Interface IFace2 Header *** */ +/**** Interface IFace2 Header ****/ + public boolean getB() { return false; } @@ -18,8 +20,7 @@ public class RearrangementTest23 public boolean getA() { return true; } - - /** * Interface IFace2 Trailer ** */ +/**** Interface IFace2 Trailer ***/ int method1() { return 4; } diff --git a/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNNANXME.java b/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNNANXME.java index f903e3e5cc05..7e52e4923324 100644 --- a/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNNANXME.java +++ b/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNNANXME.java @@ -1,7 +1,8 @@ public class RearrangementTest23 implements IFace2, IFace1 { - /** * Interface IFace2 Header *** */ +/**** Interface IFace2 Header ****/ + public boolean getB() { return false; } @@ -10,7 +11,8 @@ public class RearrangementTest23 return true; } /**** Interface IFace2 Trailer ***/ - /** * Interface IFace1 Header *** */ +/**** Interface IFace1 Header ****/ + public int getY() { return 6; } @@ -18,8 +20,7 @@ public class RearrangementTest23 public int getX() { return getA() ? 5 : 3; } - - /** * Interface IFace1 Trailer ** */ +/**** Interface IFace1 Trailer ***/ int method1() { return 4; } diff --git a/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNNANXMI.java b/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNNANXMI.java index 8088b74fa28a..1ab483ac4f6e 100644 --- a/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNNANXMI.java +++ b/plugins/rearranger/test/testData/com/wrq/rearranger/RearrangementResult23NNNANXMI.java @@ -1,7 +1,8 @@ public class RearrangementTest23 implements IFace2, IFace1 { - /** * Interface IFace2 Header *** */ +/**** Interface IFace2 Header ****/ + public boolean getA() { return true; } @@ -10,7 +11,8 @@ public class RearrangementTest23 return false; } /**** Interface IFace2 Trailer ***/ - /** * Interface IFace1 Header *** */ +/**** Interface IFace1 Header ****/ + public int getY() { return 6; } @@ -18,8 +20,7 @@ public class RearrangementTest23 public int getX() { return getA() ? 5 : 3; } - - /** * Interface IFace1 Trailer ** */ +/**** Interface IFace1 Trailer ***/ int method1() { return 4; }