You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2021/02/26 05:10:26 UTC

[groovy] branch master updated: GROOVY-9951: additional refactoring

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 666627b  GROOVY-9951: additional refactoring
666627b is described below

commit 666627b3be7718e3265fc42b473060bc73f42e2f
Author: Paul King <pa...@asert.com.au>
AuthorDate: Fri Feb 26 15:10:15 2021 +1000

    GROOVY-9951: additional refactoring
---
 .../groovy/ast/tools/ConstructorNodeUtils.java     | 18 +++++++--
 .../apache/groovy/ast/tools/MethodCallUtils.java   | 46 ++++++++++++++++++++++
 .../transform/ToStringASTTransformation.java       | 16 +-------
 3 files changed, 63 insertions(+), 17 deletions(-)

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 5d7f251..4c5aed3 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java
@@ -29,11 +29,14 @@ 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.runtime.InvokerHelper;
 import org.codehaus.groovy.transform.ImmutableASTTransformation;
 
 import java.util.List;
 
 import static java.util.stream.Collectors.toList;
+import static org.apache.groovy.ast.tools.MethodCallUtils.appendS;
+import static org.apache.groovy.ast.tools.MethodCallUtils.toStringX;
 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.block;
@@ -47,7 +50,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.listX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.notX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.plusX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.throwS;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
@@ -58,6 +60,8 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
 public class ConstructorNodeUtils {
     private static final ClassNode EXCEPTION = make(IllegalArgumentException.class);
     private static final ClassNode IMMUTABLE_TYPE = make(ImmutableASTTransformation.class);
+    private static final ClassNode STRINGBUILDER_TYPE = make(StringBuilder.class);
+    private static final ClassNode INVOKER_TYPE = make(InvokerHelper.class);
 
     private ConstructorNodeUtils() { }
 
@@ -101,10 +105,18 @@ public class ConstructorNodeUtils {
         MethodCallExpression isNameValid = callX(validNames, "contains", varX(name));
         isNameValid.setImplicitThis(false);
 
+        Expression sb = localVarX("sb");
+        Expression toString = pojo ? toStringX(sb) : callX(INVOKER_TYPE, "toString", sb);
+        Statement errorBlock = block(
+                declS(sb, ctorX(STRINGBUILDER_TYPE)),
+                appendS(sb, constX("Unknown named argument: ")),
+                appendS(sb, varX(name)),
+                throwS(ctorX(EXCEPTION, toString))
+        );
+
         return block(
             declS(validNames, listX(props.stream().map(p -> constX(p.getName())).collect(toList()))),
-            forS(name, names, ifS(notX(isNameValid),
-                    throwS(ctorX(EXCEPTION, plusX(constX("Unknown named argument: "), varX(name))))))
+            forS(name, names, ifS(notX(isNameValid), errorBlock))
         );
     }
 }
diff --git a/src/main/java/org/apache/groovy/ast/tools/MethodCallUtils.java b/src/main/java/org/apache/groovy/ast/tools/MethodCallUtils.java
new file mode 100644
index 0000000..6b06eb1
--- /dev/null
+++ b/src/main/java/org/apache/groovy/ast/tools/MethodCallUtils.java
@@ -0,0 +1,46 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.groovy.ast.tools;
+
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.stmt.Statement;
+
+import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
+
+/**
+ * Utility class for commonly called methods
+ */
+public class MethodCallUtils {
+
+    private MethodCallUtils() { }
+
+    public static Statement appendS(Expression result, Expression expr) {
+        MethodCallExpression append = callX(result, "append", expr);
+        append.setImplicitThis(false);
+        return stmt(append);
+    }
+
+    public static Expression toStringX(final Expression object) {
+        MethodCallExpression toString = callX(object, "toString");
+        toString.setImplicitThis(false);
+        return toString;
+    }
+}
diff --git a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
index a11cf57..e5b6827 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -30,7 +30,6 @@ import org.codehaus.groovy.ast.Parameter;
 import org.codehaus.groovy.ast.PropertyNode;
 import org.codehaus.groovy.ast.expr.ConstantExpression;
 import org.codehaus.groovy.ast.expr.Expression;
-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;
@@ -47,6 +46,8 @@ import java.util.List;
 import java.util.Set;
 
 import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
+import static org.apache.groovy.ast.tools.MethodCallUtils.appendS;
+import static org.apache.groovy.ast.tools.MethodCallUtils.toStringX;
 import static org.codehaus.groovy.ast.ClassHelper.make;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.callSuperX;
@@ -64,7 +65,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.notNullX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.sameX;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
 import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
 import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
@@ -287,16 +287,4 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
         body.addStatement(appendS(result, constX(fName + ":")));
         return body;
     }
-
-    private static Statement appendS(Expression result, Expression expr) {
-        MethodCallExpression append = callX(result, "append", expr);
-        append.setImplicitThis(false);
-        return stmt(append);
-    }
-
-    private static Expression toStringX(final Expression object) {
-        MethodCallExpression toString = callX(object, "toString");
-        toString.setImplicitThis(false);
-        return toString;
-    }
 }