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