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;
- }
}