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 fe569c14a6b72b5e066cbc83755c25dbc721ea03
Author: Daniel Sun <[email protected]>
AuthorDate: Sat Apr 11 18:41:04 2020 +0800

    Eliminate duplicated code in AST transformations
    
    (cherry picked from commit 38f10257e3b7315b72d866b7c2d172a70d82b574)
---
 .../java/groovy/beans/BindableASTTransformation.java   | 17 +++--------------
 .../java/groovy/beans/VetoableASTTransformation.java   | 17 +++--------------
 .../org/codehaus/groovy/control/ErrorCollector.java    |  8 ++++++++
 .../groovy/transform/AbstractASTTransformation.java    |  8 +-------
 .../groovy/transform/AnnotationCollectorTransform.java |  6 +-----
 .../groovy/transform/CategoryASTTransformation.java    | 18 ++++--------------
 .../transform/stc/StaticTypeCheckingVisitor.java       |  7 +------
 7 files changed, 21 insertions(+), 60 deletions(-)

diff --git a/src/main/java/groovy/beans/BindableASTTransformation.java 
b/src/main/java/groovy/beans/BindableASTTransformation.java
index 60474f9..65f0062 100644
--- a/src/main/java/groovy/beans/BindableASTTransformation.java
+++ b/src/main/java/groovy/beans/BindableASTTransformation.java
@@ -34,8 +34,6 @@ import org.codehaus.groovy.ast.tools.PropertyNodeUtils;
 import org.codehaus.groovy.control.CompilePhase;
 import org.codehaus.groovy.control.SourceUnit;
 import org.codehaus.groovy.control.messages.SimpleMessage;
-import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
-import org.codehaus.groovy.syntax.SyntaxException;
 import org.codehaus.groovy.transform.ASTTransformation;
 import org.codehaus.groovy.transform.GroovyASTTransformation;
 import org.objectweb.asm.Opcodes;
@@ -115,10 +113,7 @@ public class BindableASTTransformation implements 
ASTTransformation, Opcodes {
         ClassNode declaringClass = parent.getDeclaringClass();
         if (parent instanceof FieldNode) {
             if ((((FieldNode) parent).getModifiers() & Opcodes.ACC_FINAL) != 
0) {
-                source.getErrorCollector().addErrorAndContinue(new 
SyntaxErrorMessage(
-                        new SyntaxException("@groovy.beans.Bindable cannot 
annotate a final property.",
-                                node.getLineNumber(), node.getColumnNumber(), 
node.getLastLineNumber(), node.getLastColumnNumber()),
-                        source));
+                
source.getErrorCollector().addErrorAndContinue("@groovy.beans.Bindable cannot 
annotate a final property.", node, source);
             }
 
             if 
(VetoableASTTransformation.hasVetoableAnnotation(parent.getDeclaringClass())) {
@@ -137,10 +132,7 @@ public class BindableASTTransformation implements 
ASTTransformation, Opcodes {
             if (propertyNode.getName().equals(fieldName)) {
                 if (field.isStatic()) {
                     //noinspection ThrowableInstanceNeverThrown
-                    source.getErrorCollector().addErrorAndContinue(new 
SyntaxErrorMessage(
-                            new SyntaxException("@groovy.beans.Bindable cannot 
annotate a static property.",
-                                    node.getLineNumber(), 
node.getColumnNumber(), node.getLastLineNumber(), node.getLastColumnNumber()),
-                            source));
+                    
source.getErrorCollector().addErrorAndContinue("@groovy.beans.Bindable cannot 
annotate a static property.", node, source);
                 } else {
                     if (needsPropertyChangeSupport(declaringClass, source)) {
                         addPropertyChangeSupport(declaringClass);
@@ -151,10 +143,7 @@ public class BindableASTTransformation implements 
ASTTransformation, Opcodes {
             }
         }
         //noinspection ThrowableInstanceNeverThrown
-        source.getErrorCollector().addErrorAndContinue(new SyntaxErrorMessage(
-                new SyntaxException("@groovy.beans.Bindable must be on a 
property, not a field.  Try removing the private, protected, or public 
modifier.",
-                        node.getLineNumber(), node.getColumnNumber(), 
node.getLastLineNumber(), node.getLastColumnNumber()),
-                source));
+        source.getErrorCollector().addErrorAndContinue("@groovy.beans.Bindable 
must be on a property, not a field.  Try removing the private, protected, or 
public modifier.", node, source);
     }
 
     private void addListenerToClass(SourceUnit source, ClassNode classNode) {
diff --git a/src/main/java/groovy/beans/VetoableASTTransformation.java 
b/src/main/java/groovy/beans/VetoableASTTransformation.java
index 315c014..5e35dff 100644
--- a/src/main/java/groovy/beans/VetoableASTTransformation.java
+++ b/src/main/java/groovy/beans/VetoableASTTransformation.java
@@ -34,8 +34,6 @@ import org.codehaus.groovy.ast.tools.PropertyNodeUtils;
 import org.codehaus.groovy.control.CompilePhase;
 import org.codehaus.groovy.control.SourceUnit;
 import org.codehaus.groovy.control.messages.SimpleMessage;
-import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
-import org.codehaus.groovy.syntax.SyntaxException;
 import org.codehaus.groovy.transform.GroovyASTTransformation;
 import org.objectweb.asm.Opcodes;
 
@@ -110,10 +108,7 @@ public class VetoableASTTransformation extends 
BindableASTTransformation {
             addListenerToClass(source, (ClassNode) nodes[1]);
         } else {
             if ((((FieldNode)nodes[1]).getModifiers() & Opcodes.ACC_FINAL) != 
0) {
-                source.getErrorCollector().addErrorAndContinue(new 
SyntaxErrorMessage(
-                        new SyntaxException("@groovy.beans.Vetoable cannot 
annotate a final property.",
-                                node.getLineNumber(), node.getColumnNumber(), 
node.getLastLineNumber(), node.getLastColumnNumber()),
-                        source));
+                
source.getErrorCollector().addErrorAndContinue("@groovy.beans.Vetoable cannot 
annotate a final property.", node, source);
             }
 
             addListenerToProperty(source, node, (AnnotatedNode) nodes[1]);
@@ -131,10 +126,7 @@ public class VetoableASTTransformation extends 
BindableASTTransformation {
             if (propertyNode.getName().equals(fieldName)) {
                 if (field.isStatic()) {
                     //noinspection ThrowableInstanceNeverThrown
-                    source.getErrorCollector().addErrorAndContinue(new 
SyntaxErrorMessage(
-                            new SyntaxException("@groovy.beans.Vetoable cannot 
annotate a static property.",
-                                    node.getLineNumber(), 
node.getColumnNumber(), node.getLastLineNumber(), node.getLastColumnNumber()),
-                            source));
+                    
source.getErrorCollector().addErrorAndContinue("@groovy.beans.Vetoable cannot 
annotate a static property.", node, source);
                 } else {
                     createListenerSetter(source, bindable, declaringClass, 
propertyNode);
                 }
@@ -142,10 +134,7 @@ public class VetoableASTTransformation extends 
BindableASTTransformation {
             }
         }
         //noinspection ThrowableInstanceNeverThrown
-        source.getErrorCollector().addErrorAndContinue(new SyntaxErrorMessage(
-                new SyntaxException("@groovy.beans.Vetoable must be on a 
property, not a field.  Try removing the private, protected, or public 
modifier.",
-                        node.getLineNumber(), node.getColumnNumber(), 
node.getLastLineNumber(), node.getLastColumnNumber()),
-                source));
+        source.getErrorCollector().addErrorAndContinue("@groovy.beans.Vetoable 
must be on a property, not a field.  Try removing the private, protected, or 
public modifier.", node, source);
     }
 
 
diff --git a/src/main/java/org/codehaus/groovy/control/ErrorCollector.java 
b/src/main/java/org/codehaus/groovy/control/ErrorCollector.java
index 60fb05e..85bb723 100644
--- a/src/main/java/org/codehaus/groovy/control/ErrorCollector.java
+++ b/src/main/java/org/codehaus/groovy/control/ErrorCollector.java
@@ -18,6 +18,7 @@
  */
 package org.codehaus.groovy.control;
 
+import org.codehaus.groovy.ast.ASTNode;
 import org.codehaus.groovy.control.messages.ExceptionMessage;
 import org.codehaus.groovy.control.messages.LocatedMessage;
 import org.codehaus.groovy.control.messages.Message;
@@ -94,6 +95,13 @@ public class ErrorCollector implements Serializable {
         errors.add(message);
     }
 
+    public void addErrorAndContinue(String error, ASTNode node, SourceUnit 
source) {
+        addErrorAndContinue(new SyntaxErrorMessage(
+                new SyntaxException(error,
+                        node.getLineNumber(), node.getColumnNumber(), 
node.getLastLineNumber(), node.getLastColumnNumber()),
+                source));
+    }
+
     /**
      * Adds a non-fatal error to the message set, which may cause a failure if 
the error threshold is exceeded.
      * The message is not required to have a source line and column specified, 
but it is best practice to try
diff --git 
a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java 
b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
index 84002f5..15ce131 100644
--- a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
@@ -38,9 +38,7 @@ import org.codehaus.groovy.ast.tools.BeanUtils;
 import org.codehaus.groovy.ast.tools.GeneralUtils;
 import org.codehaus.groovy.ast.tools.GenericsUtils;
 import org.codehaus.groovy.control.SourceUnit;
-import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
 import org.codehaus.groovy.runtime.StringGroovyMethods;
-import org.codehaus.groovy.syntax.SyntaxException;
 import org.objectweb.asm.Opcodes;
 
 import java.lang.annotation.Retention;
@@ -254,11 +252,7 @@ public abstract class AbstractASTTransformation implements 
Opcodes, ASTTransform
     }
 
     public void addError(String msg, ASTNode expr) {
-        sourceUnit.getErrorCollector().addErrorAndContinue(new 
SyntaxErrorMessage(
-                        new SyntaxException(msg + '\n', expr.getLineNumber(), 
expr.getColumnNumber(),
-                                expr.getLastLineNumber(), 
expr.getLastColumnNumber()),
-                        sourceUnit)
-        );
+        sourceUnit.getErrorCollector().addErrorAndContinue(msg + '\n', expr, 
sourceUnit);
     }
 
     protected boolean checkNotInterface(ClassNode cNode, String 
annotationName) {
diff --git 
a/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java 
b/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
index bf94211..c0e3e9b 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
@@ -37,8 +37,6 @@ import org.codehaus.groovy.ast.expr.MapExpression;
 import org.codehaus.groovy.ast.stmt.ReturnStatement;
 import org.codehaus.groovy.ast.stmt.Statement;
 import org.codehaus.groovy.control.SourceUnit;
-import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
-import org.codehaus.groovy.syntax.SyntaxException;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -196,9 +194,7 @@ public class AnnotationCollectorTransform {
      * @param source    the source unit for the error report
      */
     protected void addError(String message, ASTNode node, SourceUnit source) {
-        source.getErrorCollector().addErrorAndContinue(new 
SyntaxErrorMessage(new SyntaxException(
-                message,  node.getLineNumber(), node.getColumnNumber(), 
node.getLastLineNumber(), node.getLastColumnNumber()
-                ), source));
+        source.getErrorCollector().addErrorAndContinue(message, node, source);
     }
 
     private List<AnnotationNode> getTargetListFromValue(AnnotationNode 
collector, AnnotationNode aliasAnnotationUsage, SourceUnit source) {
diff --git 
a/src/main/java/org/codehaus/groovy/transform/CategoryASTTransformation.java 
b/src/main/java/org/codehaus/groovy/transform/CategoryASTTransformation.java
index 443db581..511e2cb 100644
--- a/src/main/java/org/codehaus/groovy/transform/CategoryASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/CategoryASTTransformation.java
@@ -258,16 +258,9 @@ public class CategoryASTTransformation implements 
ASTTransformation, Opcodes {
     }
 
     private static void addUnsupportedError(ASTNode node, SourceUnit unit) {
-        unit.getErrorCollector().addErrorAndContinue(
-                new SyntaxErrorMessage(
-                        new SyntaxException("The @Category transformation does 
not support instance "+
-                                (node instanceof 
FieldNode?"fields":"properties")
-                                + " but found ["+getName(node)+"]",
-                                node.getLineNumber(),
-                                node.getColumnNumber()
-
-                        ), unit
-                ));
+        unit.getErrorCollector().addErrorAndContinue("The @Category 
transformation does not support instance "+
+                (node instanceof FieldNode?"fields":"properties")
+                + " but found ["+getName(node)+"]", node, unit);
     }
 
     private static String getName(ASTNode node) {
@@ -280,10 +273,7 @@ public class CategoryASTTransformation implements 
ASTTransformation, Opcodes {
         Expression value = annotation.getMember("value");
         if (!(value instanceof ClassExpression)) {
             //noinspection ThrowableInstanceNeverThrown
-            source.getErrorCollector().addErrorAndContinue(new 
SyntaxErrorMessage(
-                    new SyntaxException("@groovy.lang.Category must define 
'value' which is the class to apply this category to",
-                            annotation.getLineNumber(), 
annotation.getColumnNumber(), annotation.getLastLineNumber(), 
annotation.getLastColumnNumber()),
-                    source));
+            
source.getErrorCollector().addErrorAndContinue("@groovy.lang.Category must 
define 'value' which is the class to apply this category to", annotation, 
source);
             return null;
         } else {
             ClassExpression ce = (ClassExpression) value;
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 5380f21..fec7971 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -104,9 +104,7 @@ import org.codehaus.groovy.control.CompilationUnit;
 import org.codehaus.groovy.control.ErrorCollector;
 import org.codehaus.groovy.control.ResolveVisitor;
 import org.codehaus.groovy.control.SourceUnit;
-import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
 import org.codehaus.groovy.runtime.DefaultGroovyMethods;
-import org.codehaus.groovy.syntax.SyntaxException;
 import org.codehaus.groovy.syntax.Token;
 import org.codehaus.groovy.syntax.TokenUtil;
 import org.codehaus.groovy.transform.StaticTypesTransformation;
@@ -5426,10 +5424,7 @@ public class StaticTypeCheckingVisitor extends 
ClassCodeVisitorSupport {
     public void addError(final String msg, final ASTNode expr) {
         Long err = ((long) expr.getLineNumber()) << 16 + 
expr.getColumnNumber();
         if ((DEBUG_GENERATED_CODE && expr.getLineNumber() < 0) || 
!typeCheckingContext.reportedErrors.contains(err)) {
-            typeCheckingContext.getErrorCollector().addErrorAndContinue(new 
SyntaxErrorMessage(
-                    new SyntaxException(msg + '\n', expr.getLineNumber(), 
expr.getColumnNumber(), expr.getLastLineNumber(), expr.getLastColumnNumber()),
-                    getSourceUnit())
-            );
+            typeCheckingContext.getErrorCollector().addErrorAndContinue(msg + 
'\n', expr, getSourceUnit());
             typeCheckingContext.reportedErrors.add(err);
         }
     }

Reply via email to