You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2022/02/25 15:51:18 UTC

[groovy] 01/02: minor edits

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit dae5d6927ea6bd10cfd2165b5c408c05c082049b
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri Feb 25 09:36:22 2022 -0600

    minor edits
---
 .../groovy/control/messages/LocatedMessage.java      |  3 +++
 .../transform/AutoImplementASTTransformation.java    | 20 +++++++++-----------
 .../transform/NamedVariantASTTransformation.java     |  2 +-
 .../transform/stc/StaticTypeCheckingVisitor.java     | 18 +++---------------
 .../transform/trait/TraitASTTransformation.java      |  3 +--
 .../groovy/transform/trait/TraitComposer.java        |  9 +++------
 .../transform/trait/TraitReceiverTransformer.java    |  6 +++---
 .../org/codehaus/groovy/transform/trait/Traits.java  |  3 +--
 8 files changed, 24 insertions(+), 40 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java b/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
index 959c3f6..63efb1c 100644
--- a/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
+++ b/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
@@ -40,6 +40,9 @@ public class LocatedMessage extends SimpleMessage {
         this.context = context;
     }
 
+    public CSTNode getContext() {
+        return context;
+    }
 
     public void write(PrintWriter writer, Janitor janitor) {
         if (owner instanceof SourceUnit) {
diff --git a/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
index 08c56af..522f5df 100644
--- a/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
@@ -30,7 +30,6 @@ import org.codehaus.groovy.ast.Parameter;
 import org.codehaus.groovy.ast.PropertyNode;
 import org.codehaus.groovy.ast.expr.ClosureExpression;
 import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.stmt.BlockStatement;
 import org.codehaus.groovy.ast.stmt.EmptyStatement;
 import org.codehaus.groovy.ast.stmt.Statement;
 import org.codehaus.groovy.control.CompilePhase;
@@ -46,12 +45,12 @@ import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
 import static org.apache.groovy.ast.tools.MethodNodeUtils.getPropertyName;
 import static org.apache.groovy.ast.tools.MethodNodeUtils.methodDescriptorWithoutReturnType;
 import static org.codehaus.groovy.antlr.AntlrParserPlugin.getDefaultValueForPrimitive;
-import static org.codehaus.groovy.ast.expr.ArgumentListExpression.EMPTY_ARGUMENTS;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.getGetterName;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.throwS;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.varX;
@@ -218,17 +217,16 @@ public class AutoImplementASTTransformation extends AbstractASTTransformation {
     }
 
     private Statement buildMethodBody(final ClassNode exception, final String message, final ClosureExpression code, final ClassNode returnType) {
-        BlockStatement body = new BlockStatement();
         if (code != null) {
-            body.addStatement(code.getCode());
-        } else if (exception != null) {
-            body.addStatement(throwS(ctorX(exception, message == null ? EMPTY_ARGUMENTS : constX(message))));
-        } else {
-            Expression result = getDefaultValueForPrimitive(returnType);
-            if (result != null) {
-                body.addStatement(returnS(result));
+            return code.getCode();
+        }
+        if (exception != null) {
+            if (message == null) {
+                return throwS(ctorX(exception));
             }
+            return throwS(ctorX(exception, constX(message)));
         }
-        return body;
+        Expression value = getDefaultValueForPrimitive(returnType);
+        return (value != null ? returnS(value) : returnS(nullX()));
     }
 }
diff --git a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
index 91f0fc9..c09a349 100644
--- a/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/NamedVariantASTTransformation.java
@@ -277,7 +277,7 @@ public class NamedVariantASTTransformation extends AbstractASTTransformation {
         if (defaultValue == null && isPrimitiveType(type)) {
             defaultValue = defaultValueX(type);
         }
-        if (defaultValue != null) {
+        if (defaultValue != null) { // GROOVY-9158, GROOVY-9183
             if (isPrimitiveType(type)) { // handle null for primitive
                 value = ternaryX(notNullX(value), value, defaultValueX(type));
             }
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 6d69498..00314dc 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -690,12 +690,8 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
             return;
         }
 
-        // a dynamic variable is either an undeclared variable
-        // or a member of a class used in a 'with'
-        DynamicVariable dyn = (DynamicVariable) accessedVariable;
-        // first, we must check the 'with' context
-        String dynName = dyn.getName();
-        if (tryVariableExpressionAsProperty(vexp, dynName)) return;
+        // a dynamic variable is either a closure property, a class member referenced from a closure, or an undeclared variable
+        if (tryVariableExpressionAsProperty(vexp, vexp.getName())) return;
 
         if (!extension.handleUnresolvedVariableExpression(vexp)) {
             addStaticTypeError("The variable [" + vexp.getName() + "] is undeclared.", vexp);
@@ -3827,18 +3823,12 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
 
         if (!typeCheckingContext.enclosingBlocks.isEmpty()) {
             BinaryExpression instanceOfExpression = findInstanceOfNotReturnExpression(ifElse);
-            if (instanceOfExpression == null) {
-                instanceOfExpression = findInstanceOfNotReturnExpression(ifElse);
-            }
-            if (instanceOfExpression != null) {
-                visitInstanceofNot(instanceOfExpression);
-            }
+            if (instanceOfExpression != null) visitInstanceofNot(instanceOfExpression);
         }
     }
 
     public void visitInstanceofNot(BinaryExpression be) {
         final BlockStatement currentBlock = typeCheckingContext.enclosingBlocks.getFirst();
-        assert currentBlock != null;
         if (typeCheckingContext.blockStatements2Types.containsKey(currentBlock)) {
             // another instanceOf_not was before, no need store vars
         } else {
@@ -4076,8 +4066,6 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         popAssignmentTracking(oldTracker);
     }
 
-    // currently just for empty literals, not for e.g. Collections.emptyList() at present
-    /// it seems attractive to want to do this for more cases but perhaps not all cases
     private ClassNode checkForTargetType(final Expression expr, final ClassNode type) {
         BinaryExpression enclosingBinaryExpression = typeCheckingContext.getEnclosingBinaryExpression();
         if (enclosingBinaryExpression instanceof DeclarationExpression
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
index 02f4947..6cf3f7a 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
@@ -70,7 +70,6 @@ import java.util.List;
 import java.util.Set;
 
 import static org.apache.groovy.ast.tools.AnnotatedNodeUtils.markAsGenerated;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
 import static org.codehaus.groovy.transform.trait.SuperCallTraitTransformer.UNRESOLVED_HELPER_CLASS;
 
 /**
@@ -496,7 +495,7 @@ public class TraitASTTransformation extends AbstractASTTransformation implements
                         field.getOriginType(),
                         new Parameter[]{createSelfParameter(trait, field.isStatic())},
                         ClassNode.EMPTY_ARRAY,
-                        returnS(initCode.getExpression())
+                        GeneralUtils.returnS(initCode.getExpression())
                 );
                 helper.addMethod(fieldInitializer);
             } else {
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
index 53ed407..3a76b2c 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitComposer.java
@@ -293,7 +293,7 @@ public abstract class TraitComposer {
                     // but add empty body for setter for legacy compatibility
                     MethodNode impl = new MethodNode(
                             methodNode.getName(),
-                            Opcodes.ACC_PUBLIC | isStatic,
+                            Opcodes.ACC_PUBLIC | isStatic | Opcodes.ACC_SYNTHETIC,
                             returnType,
                             newParams,
                             ClassNode.EMPTY_ARRAY,
@@ -341,8 +341,7 @@ public abstract class TraitComposer {
         // guaranteed to be always present
         boolean isHelperForStaticMethod = helperMethodParams[0].getOriginType().equals(ClassHelper.CLASS_Type);
         if (Modifier.isPrivate(access) && !isHelperForStaticMethod) {
-            // do not create forwarder for private methods
-            // see GROOVY-7213
+            // GROOVY-7213: do not create forwarder for private methods
             return;
         }
         if (!isHelperForStaticMethod) {
@@ -380,9 +379,7 @@ public abstract class TraitComposer {
         AnnotationNode bridgeAnnotation = new AnnotationNode(Traits.TRAITBRIDGE_CLASSNODE);
         bridgeAnnotation.addMember("traitClass", new ClassExpression(trait));
         bridgeAnnotation.addMember("desc", new ConstantExpression(BytecodeHelper.getMethodDescriptor(helperMethod.getReturnType(), traitMethodParams)));
-        forwarder.addAnnotation(
-                bridgeAnnotation
-        );
+        forwarder.addAnnotation(bridgeAnnotation);
 
         MethodNode existingMethod = findExistingMethod(targetNode, forwarder);
         if (existingMethod != null) {
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
index 3d01b29..fa8b8cd 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
@@ -199,7 +199,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
                 method,
                 ArgumentListExpression.EMPTY_ARGUMENTS
         );
-        mce.setSourcePosition(exp);
+        mce.setSourcePosition(exp instanceof PropertyExpression ? ((PropertyExpression) exp).getProperty() : exp);
         mce.setImplicitThis(false);
         return mce;
     }
@@ -253,7 +253,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
                         method,
                         new ArgumentListExpression(super.transform(rightExpression))
                 );
-                mce.setSourcePosition(exp);
+                mce.setSourcePosition(leftExpression instanceof PropertyExpression ? ((PropertyExpression) leftExpression).getProperty() : leftExpression);
                 mce.setImplicitThis(false);
                 markDynamicCall(mce, staticField, isStatic);
                 return mce;
@@ -327,7 +327,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
         );
         newCall.setImplicitThis(false);
         newCall.setSafe(call.isSafe());
-        newCall.setSourcePosition(call);
+        newCall.getMethod().setSourcePosition(call.getMethod());
         newCall.setSpreadSafe(call.isSpreadSafe());
         return newCall;
     }
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/Traits.java b/src/main/java/org/codehaus/groovy/transform/trait/Traits.java
index b752ebb..23dd997 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/Traits.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/Traits.java
@@ -147,8 +147,7 @@ public abstract class Traits {
             // precompiled trait
             try {
                 final ClassLoader classLoader = trait.getTypeClass().getClassLoader();
-                String helperClassName = Traits.helperClassName(trait);
-                helperClassNode = ClassHelper.make(Class.forName(helperClassName, false, classLoader));
+                helperClassNode = ClassHelper.make(Class.forName(Traits.helperClassName(trait), false, classLoader));
                 try {
                     fieldHelperClassNode = ClassHelper.make(classLoader.loadClass(Traits.fieldHelperClassName(trait)));
                     staticFieldHelperClassNode = ClassHelper.make(classLoader.loadClass(Traits.staticFieldHelperClassName(trait)));