You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2020/02/12 17:18:11 UTC
[groovy] 03/08: minor edits
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit aca923a598aa5327b7a7b3ef4975a234e0376c2e
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Wed Feb 5 15:00:35 2020 -0600
minor edits
(cherry picked from commit 397a55429552211590efed396530ca1659f646dd)
---
.../transform/sc/StaticCompilationVisitor.java | 53 ++++++++++++----------
1 file changed, 29 insertions(+), 24 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
index e4f28ec..73b10a4 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
@@ -36,19 +36,16 @@ import org.codehaus.groovy.ast.Parameter;
import org.codehaus.groovy.ast.PropertyNode;
import org.codehaus.groovy.ast.expr.ArgumentListExpression;
import org.codehaus.groovy.ast.expr.BinaryExpression;
-import org.codehaus.groovy.ast.expr.ClassExpression;
import org.codehaus.groovy.ast.expr.ClosureListExpression;
import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
import org.codehaus.groovy.ast.expr.Expression;
import org.codehaus.groovy.ast.expr.MethodCallExpression;
import org.codehaus.groovy.ast.expr.PropertyExpression;
import org.codehaus.groovy.ast.expr.SpreadExpression;
-import org.codehaus.groovy.ast.expr.VariableExpression;
import org.codehaus.groovy.ast.stmt.EmptyStatement;
import org.codehaus.groovy.ast.stmt.ExpressionStatement;
import org.codehaus.groovy.ast.stmt.ForStatement;
import org.codehaus.groovy.ast.stmt.Statement;
-import org.codehaus.groovy.ast.tools.GeneralUtils;
import org.codehaus.groovy.classgen.asm.InvocationWriter;
import org.codehaus.groovy.classgen.asm.MopWriter;
import org.codehaus.groovy.classgen.asm.TypeChooser;
@@ -72,6 +69,13 @@ import static org.codehaus.groovy.ast.ClassHelper.LIST_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.OBJECT_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.STRING_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
+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.callX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.classX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorThisS;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
import static org.codehaus.groovy.ast.tools.GenericsUtils.addMethodGenerics;
import static org.codehaus.groovy.ast.tools.GenericsUtils.applyGenericsContextToPlaceHolders;
import static org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse;
@@ -237,28 +241,29 @@ public class StaticCompilationVisitor extends StaticTypeCheckingVisitor {
* Adds special accessors and mutators for private fields so that inner classes can get/set them.
*/
private static void addPrivateFieldsAccessors(final ClassNode node) {
- Set<ASTNode> accessedFields = node.getNodeMetaData(PV_FIELDS_ACCESS);
- Set<ASTNode> mutatedFields = node.getNodeMetaData(PV_FIELDS_MUTATION);
- if (accessedFields == null && mutatedFields == null) return;
Map<String, MethodNode> privateFieldAccessors = node.getNodeMetaData(PRIVATE_FIELDS_ACCESSORS);
Map<String, MethodNode> privateFieldMutators = node.getNodeMetaData(PRIVATE_FIELDS_MUTATORS);
if (privateFieldAccessors != null || privateFieldMutators != null) {
// already added
return;
}
+ Set<ASTNode> accessedFields = node.getNodeMetaData(PV_FIELDS_ACCESS);
+ Set<ASTNode> mutatedFields = node.getNodeMetaData(PV_FIELDS_MUTATION);
+ if (accessedFields == null && mutatedFields == null) return;
+
int acc = -1;
- privateFieldAccessors = accessedFields != null ? new HashMap<>() : null;
- privateFieldMutators = mutatedFields != null ? new HashMap<>() : null;
- final int access = ACC_PUBLIC | ACC_STATIC | ACC_SYNTHETIC;
+ privateFieldAccessors = (accessedFields != null ? new HashMap<>() : null);
+ privateFieldMutators = (mutatedFields != null ? new HashMap<>() : null);
+ final int modifiers = ACC_PUBLIC | ACC_STATIC | ACC_SYNTHETIC;
for (FieldNode fieldNode : node.getFields()) {
boolean generateAccessor = accessedFields != null && accessedFields.contains(fieldNode);
boolean generateMutator = mutatedFields != null && mutatedFields.contains(fieldNode);
if (generateAccessor) {
acc += 1;
Parameter param = new Parameter(node.getPlainNodeReference(), "$that");
- Expression receiver = fieldNode.isStatic() ? new ClassExpression(node) : new VariableExpression(param);
- Statement stmt = new ExpressionStatement(new PropertyExpression(receiver, fieldNode.getName()));
- MethodNode accessor = node.addMethod("pfaccess$" + acc, access, fieldNode.getOriginType(), new Parameter[]{param}, ClassNode.EMPTY_ARRAY, stmt);
+ Expression receiver = fieldNode.isStatic() ? classX(node) : varX(param);
+ Statement body = new ExpressionStatement(propX(receiver, fieldNode.getName()));
+ MethodNode accessor = node.addMethod("pfaccess$" + acc, modifiers, fieldNode.getOriginType(), new Parameter[]{param}, ClassNode.EMPTY_ARRAY, body);
privateFieldAccessors.put(fieldNode.getName(), accessor);
}
@@ -266,10 +271,10 @@ public class StaticCompilationVisitor extends StaticTypeCheckingVisitor {
// increment acc if it hasn't been incremented in the current iteration
if (!generateAccessor) acc += 1;
Parameter param = new Parameter(node.getPlainNodeReference(), "$that");
- Expression receiver = fieldNode.isStatic() ? new ClassExpression(node) : new VariableExpression(param);
+ Expression receiver = fieldNode.isStatic() ? classX(node) : varX(param);
Parameter value = new Parameter(fieldNode.getOriginType(), "$value");
- Statement stmt = GeneralUtils.assignS(new PropertyExpression(receiver, fieldNode.getName()), new VariableExpression(value));
- MethodNode mutator = node.addMethod("pfaccess$0" + acc, access, fieldNode.getOriginType(), new Parameter[]{param, value}, ClassNode.EMPTY_ARRAY, stmt);
+ Statement body = assignS(propX(receiver, fieldNode.getName()), varX(value));
+ MethodNode mutator = node.addMethod("pfaccess$0" + acc, modifiers, fieldNode.getOriginType(), new Parameter[]{param, value}, ClassNode.EMPTY_ARRAY, body);
privateFieldMutators.put(fieldNode.getName(), mutator);
}
}
@@ -324,9 +329,9 @@ public class StaticCompilationVisitor extends StaticTypeCheckingVisitor {
} else {
List<Expression> args = new ArrayList<>();
for (Parameter parameter : methodParameters) {
- args.add(new VariableExpression(parameter));
+ args.add(varX(parameter));
}
- arguments = new ArgumentListExpression(args);
+ arguments = args(args);
}
MethodNode bridge;
@@ -341,22 +346,22 @@ public class StaticCompilationVisitor extends StaticTypeCheckingVisitor {
node.getModule().addClass(thatType);
}
newParams[0] = new Parameter(thatType.getPlainNodeReference(), "$that");
- Expression cce = new ConstructorCallExpression(ClassNode.THIS, arguments);
- Statement body = new ExpressionStatement(cce);
+ Statement body = ctorThisS(arguments);
+
bridge = node.addConstructor(ACC_SYNTHETIC, newParams, ClassNode.EMPTY_ARRAY, body);
} else {
newParams[0] = new Parameter(node.getPlainNodeReference(), "$that");
- Expression receiver = method.isStatic() ? new ClassExpression(node) : new VariableExpression(newParams[0]);
- MethodCallExpression mce = new MethodCallExpression(receiver, method.getName(), arguments);
- mce.setMethodTarget(method);
+ Expression receiver = method.isStatic() ? classX(node) : varX(newParams[0]);
+ MethodCallExpression call = callX(receiver, method.getName(), arguments);
+ call.setMethodTarget(method);
+ ExpressionStatement body = new ExpressionStatement(call);
- ExpressionStatement returnStatement = new ExpressionStatement(mce);
bridge = node.addMethod(
"access$" + i, access,
correctToGenericsSpecRecurse(genericsSpec, method.getReturnType(), methodSpecificGenerics),
newParams,
method.getExceptions(),
- returnStatement);
+ body);
}
GenericsType[] origGenericsTypes = method.getGenericsTypes();
if (origGenericsTypes != null) {