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/04/11 11:10:22 UTC
[groovy] branch master updated: Eliminate duplicated code in AST
transformations
This is an automated email from the ASF dual-hosted git repository.
sunlan 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 38f1025 Eliminate duplicated code in AST transformations
38f1025 is described below
commit 38f10257e3b7315b72d866b7c2d172a70d82b574
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sat Apr 11 18:41:04 2020 +0800
Eliminate duplicated code in AST transformations
---
.../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 3e5a404..e8fa9f6 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;
@@ -227,11 +225,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);
}
}