This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new faca105 minor refactor: remove some duplicated code
faca105 is described below
commit faca105e977e1f1585f9854d8c4ff2b03f3fc826
Author: Paul King <[email protected]>
AuthorDate: Wed Sep 23 16:31:29 2020 +1000
minor refactor: remove some duplicated code
---
.../groovy/transform/options/DefaultPropertyHandler.java | 10 +++++-----
.../transform/options/ImmutablePropertyHandler.java | 8 ++++++--
.../org/apache/groovy/ast/tools/ConstructorNodeUtils.java | 15 +++++++++++++++
.../transform/TupleConstructorASTTransformation.java | 7 ++-----
4 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/src/main/java/groovy/transform/options/DefaultPropertyHandler.java
b/src/main/java/groovy/transform/options/DefaultPropertyHandler.java
index a0462b6..4fb2e04 100644
--- a/src/main/java/groovy/transform/options/DefaultPropertyHandler.java
+++ b/src/main/java/groovy/transform/options/DefaultPropertyHandler.java
@@ -27,15 +27,15 @@ import org.codehaus.groovy.ast.expr.ArgumentListExpression;
import org.codehaus.groovy.ast.expr.Expression;
import org.codehaus.groovy.ast.expr.MapExpression;
import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.expr.VariableExpression;
import org.codehaus.groovy.ast.stmt.BlockStatement;
import org.codehaus.groovy.ast.stmt.Statement;
import org.codehaus.groovy.transform.AbstractASTTransformation;
-import org.codehaus.groovy.transform.ImmutableASTTransformation;
import org.codehaus.groovy.transform.MapConstructorASTTransformation;
import java.util.List;
-import static org.codehaus.groovy.ast.ClassHelper.make;
+import static
org.apache.groovy.ast.tools.ConstructorNodeUtils.checkPropNamesExpr;
import static org.codehaus.groovy.ast.tools.GeneralUtils.args;
import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.callThisX;
@@ -49,7 +49,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
public class DefaultPropertyHandler extends PropertyHandler {
- private static final ClassNode IMMUTABLE_XFORM_TYPE =
make(ImmutableASTTransformation.class);
@Override
public boolean validateAttributes(AbstractASTTransformation xform,
AnnotationNode anno) {
@@ -61,8 +60,9 @@ public class DefaultPropertyHandler extends PropertyHandler {
@Override
public boolean validateProperties(AbstractASTTransformation xform,
BlockStatement body, ClassNode cNode, List<PropertyNode> props) {
if (xform instanceof MapConstructorASTTransformation) {
- body.addStatement(ifS(equalsNullX(varX("args")),
assignS(varX("args"), new MapExpression())));
- body.addStatement(stmt(callX(IMMUTABLE_XFORM_TYPE,
"checkPropNames", args("this", "args"))));
+ VariableExpression namedArgs = varX("args");
+ body.addStatement(ifS(equalsNullX(namedArgs), assignS(namedArgs,
new MapExpression())));
+ body.addStatement(stmt(checkPropNamesExpr(namedArgs)));
}
return super.validateProperties(xform, body, cNode, props);
}
diff --git
a/src/main/java/groovy/transform/options/ImmutablePropertyHandler.java
b/src/main/java/groovy/transform/options/ImmutablePropertyHandler.java
index 65f1c29..e3c74a4 100644
--- a/src/main/java/groovy/transform/options/ImmutablePropertyHandler.java
+++ b/src/main/java/groovy/transform/options/ImmutablePropertyHandler.java
@@ -19,6 +19,7 @@
package groovy.transform.options;
import groovy.lang.ReadOnlyPropertyException;
+import groovy.transform.stc.POJO;
import org.apache.groovy.ast.tools.ImmutablePropertyUtils;
import org.codehaus.groovy.ast.AnnotationNode;
import org.codehaus.groovy.ast.ClassHelper;
@@ -31,6 +32,7 @@ import org.codehaus.groovy.ast.expr.ConstantExpression;
import org.codehaus.groovy.ast.expr.Expression;
import org.codehaus.groovy.ast.expr.MapExpression;
import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.expr.VariableExpression;
import org.codehaus.groovy.ast.stmt.BlockStatement;
import org.codehaus.groovy.ast.stmt.EmptyStatement;
import org.codehaus.groovy.ast.stmt.Statement;
@@ -47,6 +49,7 @@ import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
+import static
org.apache.groovy.ast.tools.ConstructorNodeUtils.checkPropNamesExpr;
import static
org.apache.groovy.ast.tools.ImmutablePropertyUtils.cloneArrayOrCloneableExpr;
import static org.apache.groovy.ast.tools.ImmutablePropertyUtils.cloneDateExpr;
import static
org.apache.groovy.ast.tools.ImmutablePropertyUtils.derivesFromDate;
@@ -119,8 +122,9 @@ public class ImmutablePropertyHandler extends
PropertyHandler {
@Override
public boolean validateProperties(AbstractASTTransformation xform,
BlockStatement body, ClassNode cNode, List<PropertyNode> props) {
if (xform instanceof MapConstructorASTTransformation) {
- body.addStatement(ifS(equalsNullX(varX("args")),
assignS(varX("args"), new MapExpression())));
- body.addStatement(stmt(callX(SELF_TYPE, "checkPropNames",
args("this", "args"))));
+ VariableExpression namedArgs = varX("args");
+ body.addStatement(ifS(equalsNullX(namedArgs), assignS(namedArgs,
new MapExpression())));
+ body.addStatement(stmt(checkPropNamesExpr(namedArgs)));
}
return super.validateProperties(xform, body, cNode, props);
}
diff --git
a/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java
b/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java
index 87851f4..849ef9d 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java
@@ -18,18 +18,29 @@
*/
package org.apache.groovy.ast.tools;
+import org.codehaus.groovy.ast.ClassNode;
import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.StaticMethodCallExpression;
+import org.codehaus.groovy.ast.expr.VariableExpression;
import org.codehaus.groovy.ast.stmt.BlockStatement;
import org.codehaus.groovy.ast.stmt.ExpressionStatement;
import org.codehaus.groovy.ast.stmt.Statement;
+import org.codehaus.groovy.transform.ImmutableASTTransformation;
import java.util.List;
+import static org.codehaus.groovy.ast.ClassHelper.make;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.args;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
+
/**
* Utility class for working with ConstructorNodes
*/
public class ConstructorNodeUtils {
+ private static final ClassNode IMMUTABLE_TYPE =
make(ImmutableASTTransformation.class);
+
private ConstructorNodeUtils() { }
/**
@@ -57,4 +68,8 @@ public class ConstructorNodeUtils {
if (cce.isSpecialCall()) return cce;
return null;
}
+
+ public static StaticMethodCallExpression
checkPropNamesExpr(VariableExpression namedArgs) {
+ return callX(IMMUTABLE_TYPE, "checkPropNames", args(varX("this"),
namedArgs));
+ }
}
diff --git
a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 82a75dc..636eb2c 100644
---
a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++
b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -20,7 +20,6 @@ package org.codehaus.groovy.transform;
import groovy.lang.GroovyClassLoader;
import groovy.transform.CompilationUnitAware;
-import groovy.transform.MapConstructor;
import groovy.transform.TupleConstructor;
import groovy.transform.options.PropertyHandler;
import org.apache.groovy.ast.tools.AnnotatedNodeUtils;
@@ -46,7 +45,6 @@ import org.codehaus.groovy.control.CompilationUnit;
import org.codehaus.groovy.control.CompilePhase;
import org.codehaus.groovy.control.SourceUnit;
-import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
@@ -58,6 +56,7 @@ import java.util.Set;
import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated;
import static
org.apache.groovy.ast.tools.ClassNodeUtils.hasExplicitConstructor;
+import static
org.apache.groovy.ast.tools.ConstructorNodeUtils.checkPropNamesExpr;
import static org.apache.groovy.ast.tools.VisibilityUtils.getVisibility;
import static org.codehaus.groovy.ast.ClassHelper.make;
import static org.codehaus.groovy.ast.ClassHelper.makeWithoutCaching;
@@ -92,8 +91,6 @@ public class TupleConstructorASTTransformation extends
AbstractASTTransformation
static final ClassNode MY_TYPE = make(MY_CLASS);
static final String MY_TYPE_NAME = "@" + MY_TYPE.getNameWithoutPackage();
private static final ClassNode LHMAP_TYPE =
makeWithoutCaching(LinkedHashMap.class, false);
- private static final ClassNode CHECK_METHOD_TYPE =
make(ImmutableASTTransformation.class);
- private static final Class<? extends Annotation> MAP_CONSTRUCTOR_CLASS =
MapConstructor.class;
private static final Map<Class<?>, Expression> primitivesInitialValues;
static {
@@ -343,7 +340,7 @@ public class TupleConstructorASTTransformation extends
AbstractASTTransformation
assignS(varX(pNode), propX(namedArgs, pNode.getName())));
block.addStatement(ifStatement);
}
- block.addStatement(stmt(callX(CHECK_METHOD_TYPE, "checkPropNames",
args(varX("this"), namedArgs))));
+ block.addStatement(stmt(checkPropNamesExpr(namedArgs)));
return block;
}