Merge remote-tracking branch 'origin/master'

This commit is contained in:
Alexander Lobas
2012-05-24 11:51:28 +04:00
21 changed files with 588 additions and 697 deletions
@@ -27,9 +27,7 @@
ShowMatchedRules="false" ShowComments="false" RemoveBlanksInsideCodeBlocks="true">
<Items>
<Comment condition="2" nPrecedingRulesToMatch="1" nSubsequentRulesToMatch="7" allPrecedingRules="true" allSubsequentRules="false"
fillString="" useProjectWidthForFill="true" fillWidth="0">\n//\ ------------------------------\ FIELDS\
------------------------------\n
</Comment>
fillString="" useProjectWidthForFill="true" fillWidth="0">\n// ------------------------------ FIELDS ------------------------------\n</Comment>
<Field priority="1">
<ProtectionLevel public="true" private="false" protected="false" package="false" invert="false"/>
<Static value="true" invert="false"/>
@@ -247,9 +245,7 @@
</TrailingComment>
</Interface>
<Comment condition="2" nPrecedingRulesToMatch="1" nSubsequentRulesToMatch="1" allPrecedingRules="true" allSubsequentRules="true"
fillString="" useProjectWidthForFill="true" fillWidth="0">\n//\ --------------------------\ OTHER\ METHODS\
--------------------------\n
</Comment>
fillString="" useProjectWidthForFill="true" fillWidth="0">\n// -------------------------- OTHER METHODS --------------------------\n</Comment>
<Method priority="1">
<ProtectionLevel public="false" private="false" protected="false" package="false" invert="false"/>
<Static value="false" invert="false"/>
@@ -285,9 +281,7 @@
<Enum value="true" invert="false"/>
</InnerClass>
<Comment condition="2" nPrecedingRulesToMatch="1" nSubsequentRulesToMatch="1" allPrecedingRules="true" allSubsequentRules="true"
fillString="" useProjectWidthForFill="true" fillWidth="0">\n//\ --------------------------\ INNER\ CLASSES\
--------------------------\n
</Comment>
fillString="" useProjectWidthForFill="true" fillWidth="0">\n// -------------------------- INNER CLASSES --------------------------\n</Comment>
<InnerClass priority="1">
<ProtectionLevel public="false" private="false" protected="false" package="false" invert="false"/>
<Static value="false" invert="false"/>
@@ -30,11 +30,8 @@ import com.wrq.rearranger.settings.RearrangerSettings;
* Date: Mar 30, 2004
*/
@SkipInHeadlessEnvironment
public class InteractiveTest
extends LightCodeInsightFixtureTestCase
{
public static final String DEFAULT_CONFIGURATION_ROOT = ".."; // up one level from test
public static final String DEFAULT_CONFIGURATION = DEFAULT_CONFIGURATION_ROOT + "/src/com/wrq/rearranger/defaultConfiguration.xml";
public class InteractiveTest extends LightCodeInsightFixtureTestCase {
public static final String DEFAULT_CONFIGURATION = "/src/com/wrq/rearranger/defaultConfiguration.xml";
private RearrangerSettings mySettings;
@Override
File diff suppressed because it is too large Load Diff
@@ -18,6 +18,7 @@ import org.junit.Assert
public abstract class AbstractRuleBuilder<T> extends BuilderSupport {
@NotNull def RearrangerSettings settings
private int depth
/**
* Holds rule customization handlers in the form {@code 'property id -> closure'} where <code>'property id'</code>
@@ -30,25 +31,33 @@ public abstract class AbstractRuleBuilder<T> 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 (--depth <= 0) {
// Top level call on the build object has been reached.
registerRule(settings, node as T)
current = null
}
}
@Override
protected void setParent(Object parent, Object child) {
depth++
}
@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 +70,9 @@ public abstract class AbstractRuleBuilder<T> 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 +82,7 @@ public abstract class AbstractRuleBuilder<T> extends BuilderSupport {
myHandlers[name](null, attributes, current)
}
getCurrent()
current
}
@Nullable
@@ -83,7 +95,7 @@ public abstract class AbstractRuleBuilder<T> extends BuilderSupport {
* <p/>
* Example:
* <pre>
* register('modifier', PsiModifier.FINAL, { rule, value, attributes -&gt;
* register('modifier', PsiModifier.FINAL, { value, attributes, rule -&gt;
* rule.finalAttribute.value = value
* if (attributes.invert) rule.finalAttribute.invert = true
* })
@@ -143,10 +155,4 @@ public abstract class AbstractRuleBuilder<T> extends BuilderSupport {
rule."$propertyName".expression = value
}
}
protected static void setIf(@NotNull RearrangerTestDsl dslProperty, map, rulePropertyName, rule) {
if (map.containsKey(dslProperty.value)) {
rule."$rulePropertyName" = map[dslProperty.value]
}
}
}
@@ -13,11 +13,11 @@ class CommentRuleBuilder extends AbstractRuleBuilder<CommentRule> {
{
registerHandler(RearrangerTestDsl.COMMENT, { data, attributes, rule ->
rule.commentText = data
setIf(RearrangerTestDsl.CONDITION, attributes, 'emitCondition', rule)
setIf(RearrangerTestDsl.ALL_SUBSEQUENT, attributes, 'allSubsequentRules', rule)
setIf(RearrangerTestDsl.ALL_PRECEDING, attributes, 'allPrecedingRules', rule)
setIf(RearrangerTestDsl.SUBSEQUENT_RULES_TO_MATCH, attributes, 'NSubsequentRulesToMatch', rule)
setIf(RearrangerTestDsl.PRECEDING_RULES_TO_MATCH, attributes, 'NPrecedingRulesToMatch', rule)
RearrangerTestUtil.setIf(RearrangerTestDsl.CONDITION, attributes, 'emitCondition', rule)
RearrangerTestUtil.setIf(RearrangerTestDsl.ALL_SUBSEQUENT, attributes, 'allSubsequentRules', rule)
RearrangerTestUtil.setIf(RearrangerTestDsl.ALL_PRECEDING, attributes, 'allPrecedingRules', rule)
RearrangerTestUtil.setIf(RearrangerTestDsl.SUBSEQUENT_RULES_TO_MATCH, attributes, 'NSubsequentRulesToMatch', rule)
RearrangerTestUtil.setIf(RearrangerTestDsl.PRECEDING_RULES_TO_MATCH, attributes, 'NPrecedingRulesToMatch', rule)
})
}
@@ -9,7 +9,19 @@ import org.jetbrains.annotations.NotNull;
* @since 5/17/12 12:57 PM
*/
public enum RearrangerTestDsl {
// Settings
EXTRACTED_METHODS("extracted methods"),
OVERLOADED_METHODS("overloaded methods"),
DEPTH_FIRST_ORDER("depth-first order"),
ORDER,
COMMENT_TYPE("commentType"),
KEEP_TOGETHER("keep together"),
OVERLOADED,
GETTERS_SETTERS("getters and setters"),
GETTERS_SETTERS_WITH_PROPERTY("getters and setters with property"),
// Rules
NAME,
MODIFIER,
/** Field initializer type. */
@@ -17,23 +29,34 @@ public enum RearrangerTestDsl {
/** Method target type (e.g. constructor). */
TARGET,
TYPE,
RETURN_TYPE("returnType"),
RETURN_TYPE("return type"),
SORT,
COMMENT,
GETTER_CRITERIA("getterCriteria"),
GETTER_CRITERIA("getter criteria"),
SETTER_CRITERIA("setterCriteria"),
SPACING,
PRECEDING_COMMENT("preceding comment"),
TRAILING_COMMENT("trailing comment"),
SETUP,
GROUP_EXTRACTED_METHODS("group extracted methods"),
ALPHABETIZE,
PRIORITY,
// Attributes
INVERT,
CONDITION,
ALL_SUBSEQUENT("allSubsequent"),
ALL_PRECEDING("allPreceding"),
SUBSEQUENT_RULES_TO_MATCH("subsequentRulesToMatch"),
PRECEDING_RULES_TO_MATCH("precedingRulesToMatch"),
ALL_SUBSEQUENT("all subsequent"),
ALL_PRECEDING("all preceding"),
SUBSEQUENT_RULES_TO_MATCH("subsequent rules to match"),
PRECEDING_RULES_TO_MATCH("preceding rules to match"),
BODY,
ANCHOR,
BLANK_LINES("lines");
BLANK_LINES("lines"),
REMOVE_BLANK_LINES("remove blank lines"),
BELOW_FIRST_CALLER("below first caller"),
NON_PRIVATE_TREATMENT("non-private treatment"),
REARRANGE_INNER_CLASSES("rearranger inner classes"),
CLASS_COMMENT("class comment");
@NotNull private final String myValue;
@@ -0,0 +1,19 @@
package com.wrq.rearranger.util
import org.jetbrains.annotations.NotNull;
/**
* @author Denis Zhdanov
* @since 5/22/12 11:11 AM
*/
public class RearrangerTestUtil {
private RearrangerTestUtil() {
}
public static void setIf(@NotNull RearrangerTestDsl dslProperty, map, rulePropertyName, rule) {
if (map.containsKey(dslProperty.value)) {
rule."$rulePropertyName" = map[dslProperty.value]
}
}
}
@@ -0,0 +1,81 @@
package com.wrq.rearranger.util
import com.wrq.rearranger.settings.CommentRule
import com.wrq.rearranger.settings.RearrangerSettings
import static com.wrq.rearranger.util.RearrangerTestUtil.setIf
/**
* @author Denis Zhdanov
* @since 5/22/12 11:07 AM
*/
class SettingsConfigurationBuilder extends BuilderSupport {
def RearrangerSettings settings
@Override
protected void setParent(Object parent, Object child) {
}
@Override
protected Object createNode(Object name) {
createNode(name, [:], [])
}
@Override
protected Object createNode(Object name, Object value) {
createNode(name, [:], value)
}
@Override
protected Object createNode(Object name, Map attributes) {
createNode(name, attributes, [])
}
@Override
protected Object createNode(Object name, Map attributes, Object value) {
def commentHandler = { RearrangerTestDsl dslName, propertyName ->
if (attributes.containsKey(dslName.value)) {
def comment = new CommentRule()
comment.commentText = attributes[dslName.value]
settings.extractedMethodsSettings."$propertyName" = comment
}
}
switch (name) {
case RearrangerTestDsl.EXTRACTED_METHODS.value:
settings.extractedMethodsSettings.moveExtractedMethods = true
setIf(RearrangerTestDsl.DEPTH_FIRST_ORDER, attributes, 'depthFirstOrdering', settings.extractedMethodsSettings)
setIf(RearrangerTestDsl.ORDER, attributes, 'ordering', settings.extractedMethodsSettings)
setIf(RearrangerTestDsl.COMMENT_TYPE, attributes, 'commentType', settings.extractedMethodsSettings)
setIf(RearrangerTestDsl.BELOW_FIRST_CALLER, attributes, 'belowFirstCaller', settings.extractedMethodsSettings)
setIf(RearrangerTestDsl.NON_PRIVATE_TREATMENT, attributes, 'nonPrivateTreatment', settings.extractedMethodsSettings)
commentHandler(RearrangerTestDsl.PRECEDING_COMMENT, 'precedingComment')
commentHandler(RearrangerTestDsl.TRAILING_COMMENT, 'trailingComment')
break
case RearrangerTestDsl.KEEP_TOGETHER.value:
def m = [
(RearrangerTestDsl.OVERLOADED.value) : 'keepOverloadedMethodsTogether',
(RearrangerTestDsl.GETTERS_SETTERS.value) : 'keepGettersSettersTogether',
(RearrangerTestDsl.GETTERS_SETTERS_WITH_PROPERTY.value) : 'keepGettersSettersWithProperty'
]
for (i in [value].flatten()) {
settings."${m[i]}" = true
}
break
case RearrangerTestDsl.OVERLOADED_METHODS.value:
setIf(RearrangerTestDsl.ORDER, attributes, 'overloadedOrder', settings)
setIf(RearrangerTestDsl.KEEP_TOGETHER, attributes, 'keepOverloadedMethodsTogether', settings)
break
default:
setIf(RearrangerTestDsl.REARRANGE_INNER_CLASSES, attributes, 'rearrangeInnerClasses', settings)
if (attributes[RearrangerTestDsl.CLASS_COMMENT.value]) {
def comment = new CommentRule()
comment.commentText = attributes[RearrangerTestDsl.CLASS_COMMENT.value]
settings.classOrderAttributeList.add(0, comment)
}
}
settings
}
}
@@ -48,4 +48,9 @@ abstract class AbstractJavaRuleBuilder<T> extends AbstractRuleBuilder<T> {{
genericHandlers[value](attributes, rule)
}
})
// Priority.
registerHandler(RearrangerTestDsl.PRIORITY, { value, attributes, rule ->
rule.priority = value
})
}}
@@ -0,0 +1,45 @@
package com.wrq.rearranger.util.java
import com.wrq.rearranger.settings.attributeGroups.InterfaceAttributes
import com.wrq.rearranger.settings.RearrangerSettings
import com.wrq.rearranger.util.RearrangerTestDsl
import com.wrq.rearranger.settings.CommentRule
import com.wrq.rearranger.util.RearrangerTestUtil
/**
* @author Denis Zhdanov
* @since 5/22/12 11:56 AM
*/
class JavaInterfaceRuleBuilder extends AbstractJavaRuleBuilder<InterfaceAttributes> {
{
def commentHandler = { rule, commentText, propertyName ->
def comment = new CommentRule()
comment.commentText = commentText
rule."$propertyName" = comment
}
def nameHandler = createStringAttributeHandler('nameAttr')
registerHandler(RearrangerTestDsl.PRECEDING_COMMENT, { value, attributes, rule -> 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)
}
})
}
@Override
protected InterfaceAttributes createRule() {
new InterfaceAttributes()
}
@Override
protected void registerRule(RearrangerSettings settings, InterfaceAttributes rule) {
settings.addItem(rule)
}
}
@@ -4,6 +4,7 @@ import com.wrq.rearranger.settings.RearrangerSettings
import com.wrq.rearranger.settings.attributeGroups.MethodAttributes
import org.jetbrains.annotations.NotNull
import com.wrq.rearranger.util.RearrangerTestDsl
import com.wrq.rearranger.util.RearrangerTestUtil
/**
* @author Denis Zhdanov
@@ -20,12 +21,12 @@ class JavaMethodRuleBuilder extends AbstractJavaRuleBuilder<MethodAttributes> {
registerHandler(RearrangerTestDsl.TARGET, { data, attributes, rule -> handlers[data](attributes, rule) })
registerHandler(RearrangerTestDsl.RETURN_TYPE, createStringAttributeHandler('returnTypeAttr'))
registerHandler(RearrangerTestDsl.GETTER_CRITERIA, { data, attributes, rule ->
setIf(RearrangerTestDsl.NAME, attributes, 'getterNameCriterion', rule.getterSetterDefinition)
setIf(RearrangerTestDsl.BODY, attributes, 'getterBodyCriterion', rule.getterSetterDefinition)
RearrangerTestUtil.setIf(RearrangerTestDsl.NAME, attributes, 'getterNameCriterion', rule.getterSetterDefinition)
RearrangerTestUtil.setIf(RearrangerTestDsl.BODY, attributes, 'getterBodyCriterion', rule.getterSetterDefinition)
})
registerHandler(RearrangerTestDsl.SETTER_CRITERIA, { data, attributes, rule ->
setIf(RearrangerTestDsl.NAME, attributes, 'setterNameCriterion', rule.getterSetterDefinition)
setIf(RearrangerTestDsl.BODY, attributes, 'setterBodyCriterion', rule.getterSetterDefinition)
RearrangerTestUtil.setIf(RearrangerTestDsl.NAME, attributes, 'setterNameCriterion', rule.getterSetterDefinition)
RearrangerTestUtil.setIf(RearrangerTestDsl.BODY, attributes, 'setterBodyCriterion', rule.getterSetterDefinition)
})
}
@@ -27,6 +27,9 @@ class JavaSpacingRule extends AbstractRuleBuilder<Void> {
s.force = true
s.nBlankLines = attributes[RearrangerTestDsl.BLANK_LINES.value]
}
if (attributes[RearrangerTestDsl.REMOVE_BLANK_LINES.value]) {
settings.removeBlanksInsideCodeBlocks = true
}
})
}
@@ -5,5 +5,5 @@ package com.wrq.rearranger.util.java;
* @since 5/17/12 11:05 AM
*/
public enum MethodType {
CONSTRUCTOR, GETTER_OR_SETTER, OTHER
CONSTRUCTOR, GETTER_OR_SETTER, OVERLOADED, OTHER
}
@@ -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;
}
@@ -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;
}
@@ -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 getX() {
return getA() ? 5 : 3;
}
@@ -18,8 +20,7 @@ public class RearrangementTest23
public int getY() {
return 6;
}
/** * Interface IFace1 Trailer ** */
/**** Interface IFace1 Trailer ***/
int method1() {
return 4;
}
@@ -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;
}
@@ -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;
}
@@ -7,7 +7,6 @@ class RearrangementTest26 {
public void setValue(int i) {
value = i;
}
int value;
{
@@ -1,37 +1,32 @@
public class RearrangementTest28
implements InterfaceName, InterfaceName2
{
// start of fields
// start of fields
int i;
// end of fields
// end of fields
// start of interface InterfaceName
// Level 1 methods
public int getTime() {
return getAnother();
}
// Level 2 methods
// Level 2 methods
public int getAnother() {
return 0;
}
// end Level 2 methods
// end Level 2 methods
// end Level 1 methods
// end of interface InterfaceName
// start of interface InterfaceName2
public int getDate() {
return 0;
}
// end of interface InterfaceName2
// end of interface InterfaceName2
// Level 1 methods
public void m1() {
m2();
m3();
}
// Level 2 methods
// Level 2 methods
public void m2() {
}
@@ -1,5 +1,7 @@
public class Temp {
// ------------------------------ FIELDS ------------------------------
// ------------------------------ FIELDS ------------------------------
int field1;
// -------------------------- OTHER METHODS --------------------------