You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2017/05/10 05:37:59 UTC
groovy git commit: fix merge/backport of e23a4b2
Repository: groovy
Updated Branches:
refs/heads/GROOVY_2_6_X 7fca4b25c -> 77156a394
fix merge/backport of e23a4b2
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/77156a39
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/77156a39
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/77156a39
Branch: refs/heads/GROOVY_2_6_X
Commit: 77156a3943dda51e378ddbbe57b1cc6d16ed75c9
Parents: 7fca4b2
Author: paulk <pa...@asert.com.au>
Authored: Wed May 10 15:37:50 2017 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Wed May 10 15:37:50 2017 +1000
----------------------------------------------------------------------
.../groovy/parser/antlr4/AbstractLexer.java | 25 +-
.../groovy/parser/antlr4/AbstractParser.java | 25 +-
.../apache/groovy/parser/antlr4/AstBuilder.java | 318 +------------------
.../groovy/parser/antlr4/ModifierManager.java | 71 +++--
.../parser/antlr4/SyntaxErrorReportable.java | 36 +--
5 files changed, 106 insertions(+), 369 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/77156a39/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractLexer.java
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractLexer.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractLexer.java
index aaec57b..f11e6bf 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractLexer.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractLexer.java
@@ -31,22 +31,33 @@ public abstract class AbstractLexer extends Lexer implements SyntaxErrorReportab
}
public void require(boolean condition, String msg, boolean toAttachPositionInfo) {
+ require(condition, msg, 0, toAttachPositionInfo);
+ }
+ public void require(boolean condition, String msg) {
+ require(condition, msg, true);
+ }
+ public void require(boolean condition, String msg, int offset, boolean toAttachPositionInfo) {
if (condition) {
return;
}
- this.throwSyntaxError(msg, toAttachPositionInfo);
+ this.throwSyntaxError(msg, offset, toAttachPositionInfo);
}
- public void require(boolean condition, String msg) {
- require(condition, msg, true);
+ public void require(boolean condition, String msg, int offset) {
+ require(condition, msg, offset,false);
}
- public void throwSyntaxError(String msg, boolean toAttachPositionInfo) {
- throw new GroovySyntaxError(msg + (toAttachPositionInfo ? this.genPositionInfo() : ""), this.getSyntaxErrorSource());
+ public void throwSyntaxError(String msg, int offset, boolean toAttachPositionInfo) {
+ PositionInfo positionInfo = this.genPositionInfo(offset);
+ throw new GroovySyntaxError(msg + (toAttachPositionInfo ? positionInfo.toString() : ""),
+ this.getSyntaxErrorSource(),
+ positionInfo.getLine(),
+ positionInfo.getColumn()
+ );
}
- public String formatPositionInfo(int line, int column) {
- return " @ line " + line + ", column " + column;
+ public PositionInfo genPositionInfo(int offset) {
+ return new PositionInfo(getErrorLine(), getErrorColumn() + offset);
}
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/77156a39/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java
index 1ba6ca3..8eba93e 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AbstractParser.java
@@ -31,21 +31,32 @@ public abstract class AbstractParser extends Parser implements SyntaxErrorReport
}
public void require(boolean condition, String msg, boolean toAttachPositionInfo) {
+ require(condition, msg, 0, toAttachPositionInfo);
+ }
+ public void require(boolean condition, String msg) {
+ require(condition, msg, true);
+ }
+ public void require(boolean condition, String msg, int offset, boolean toAttachPositionInfo) {
if (condition) {
return;
}
- this.throwSyntaxError(msg, toAttachPositionInfo);
+ this.throwSyntaxError(msg, offset, toAttachPositionInfo);
}
- public void require(boolean condition, String msg) {
- require(condition, msg, true);
+ public void require(boolean condition, String msg, int offset) {
+ require(condition, msg, offset,false);
}
- public void throwSyntaxError(String msg, boolean toAttachPositionInfo) {
- throw new GroovySyntaxError(msg + (toAttachPositionInfo ? this.genPositionInfo() : ""), this.getSyntaxErrorSource());
+ public void throwSyntaxError(String msg, int offset, boolean toAttachPositionInfo) {
+ PositionInfo positionInfo = this.genPositionInfo(offset);
+ throw new GroovySyntaxError(msg + (toAttachPositionInfo ? positionInfo.toString() : ""),
+ this.getSyntaxErrorSource(),
+ positionInfo.getLine(),
+ positionInfo.getColumn()
+ );
}
- public String formatPositionInfo(int line, int column) {
- return " @ line " + line + ", column " + column;
+ public PositionInfo genPositionInfo(int offset) {
+ return new PositionInfo(getErrorLine(), getErrorColumn() + offset);
}
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/77156a39/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 8228ed2..589eb0a 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -35,6 +35,7 @@ import org.apache.groovy.parser.antlr4.util.StringUtils;
import org.codehaus.groovy.GroovyBugError;
import org.codehaus.groovy.antlr.EnumHelper;
import org.codehaus.groovy.ast.ASTNode;
+import org.codehaus.groovy.ast.AnnotatedNode;
import org.codehaus.groovy.ast.AnnotationNode;
import org.codehaus.groovy.ast.ClassHelper;
import org.codehaus.groovy.ast.ClassNode;
@@ -398,14 +399,8 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
return this.visitEnhancedForControl(ctx.enhancedForControl());
}
- if (asBoolean(ctx.SEMI())) { // e.g. for(int i = 0; i < 10; i++) {}
- ClosureListExpression closureListExpression = new ClosureListExpression();
-
- closureListExpression.addExpression(this.visitForInit(ctx.forInit()));
- closureListExpression.addExpression(asBoolean(ctx.expression()) ? (Expression) this.visit(ctx.expression()) : EmptyExpression.INSTANCE);
- closureListExpression.addExpression(this.visitForUpdate(ctx.forUpdate()));
-
- return new Pair<>(ForStatement.FOR_LOOP_DUMMY, (Expression)closureListExpression);
+ if (asBoolean(ctx.classicalForControl())) { // e.g. for(int i = 0; i < 10; i++) {}
+ return this.visitClassicalForControl(ctx.classicalForControl());
}
throw createParsingFailedException("Unsupported for control: " + ctx.getText(), ctx);
@@ -474,7 +469,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
closureListExpression.addExpression(asBoolean(ctx.expression()) ? (Expression) this.visit(ctx.expression()) : EmptyExpression.INSTANCE);
closureListExpression.addExpression(this.visitForUpdate(ctx.forUpdate()));
- return new Pair<>(ForStatement.FOR_LOOP_DUMMY, closureListExpression);
+ return new Pair<Parameter, Expression>(ForStatement.FOR_LOOP_DUMMY, closureListExpression);
}
@Override
@@ -1101,7 +1096,9 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
ListExpression listExpression = new ListExpression();
if (expression instanceof ListExpression) {
- ((ListExpression) expression).getExpressions().forEach(listExpression::addExpression);
+ for (Expression e : ((ListExpression) expression).getExpressions()) {
+ listExpression.addExpression(e);
+ }
} else {
listExpression.addExpression(expression);
}
@@ -1264,11 +1261,11 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
return;
}
- Arrays.stream(parameters).forEach(e -> {
+ for (Parameter e : parameters) {
if (e.hasInitialExpression()) {
throw createParsingFailedException("Cannot specify default value for method parameter '" + e.getName() + " = " + e.getInitialExpression().getText() + "' inside an interface", e);
}
- });
+ }
}
@Override
@@ -3542,12 +3539,14 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
@Override
public BlockStatement visitBlockStatements(BlockStatementsContext ctx) {
- List<Statement> list = new ArrayList<>();
+ List<Statement> result = new ArrayList<>();
for (BlockStatementContext blockStatementContext : ctx.blockStatement()) {
- Statement statement = visitBlockStatement(blockStatementContext);
- list.add(statement);
+ Statement e = visitBlockStatement(blockStatementContext);
+ if (asBoolean(e)) {
+ result.add(e);
+ }
}
- return this.configureAST(this.createBlockStatement(list), ctx);
+ return this.configureAST(this.createBlockStatement(result), ctx);
}
@Override
@@ -4354,293 +4353,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
}
}
-<<<<<<< HEAD
- /**
- * Process modifiers for AST nodes
- * <p>
- * Created by Daniel.Sun on 2016/08/27.
- */
- private class ModifierManager {
- private List<ModifierNode> modifierNodeList;
-
- public ModifierManager(List<ModifierNode> modifierNodeList) {
- this.validate(modifierNodeList);
- this.modifierNodeList = Collections.unmodifiableList(asBoolean((Object) modifierNodeList) ? modifierNodeList : Collections.<ModifierNode>emptyList());
- }
-
- private void validate(List<ModifierNode> modifierNodeList) {
- Map<ModifierNode, Integer> modifierNodeCounter = new LinkedHashMap<>(modifierNodeList.size());
- int visibilityModifierCnt = 0;
-
- for (ModifierNode modifierNode : modifierNodeList) {
- Integer cnt = modifierNodeCounter.get(modifierNode);
-
- if (null == cnt) {
- modifierNodeCounter.put(modifierNode, 1);
- } else if (1 == cnt && !modifierNode.isRepeatable()) {
- throw createParsingFailedException("Cannot repeat modifier[" + modifierNode.getText() + "]", modifierNode);
- }
-
- if (modifierNode.isVisibilityModifier()) {
- visibilityModifierCnt++;
-
- if (visibilityModifierCnt > 1) {
- throw createParsingFailedException("Cannot specify modifier[" + modifierNode.getText() + "] when access scope has already been defined", modifierNode);
- }
- }
- }
- }
-
- // t 1: class modifiers value; 2: class member modifiers value
- private int calcModifiersOpValue(int t) {
- int result = 0;
-
- for (ModifierNode modifierNode : modifierNodeList) {
- result |= modifierNode.getOpcode();
- }
-
- if (!this.containsVisibilityModifier()) {
- if (1 == t) {
- result |= Opcodes.ACC_SYNTHETIC | Opcodes.ACC_PUBLIC;
- } else if (2 == t) {
- result |= Opcodes.ACC_PUBLIC;
- }
- }
-
- return result;
- }
-
- public int getClassModifiersOpValue() {
- return this.calcModifiersOpValue(1);
- }
-
- public int getClassMemberModifiersOpValue() {
- return this.calcModifiersOpValue(2);
- }
-
- public List<AnnotationNode> getAnnotations() {
- List<AnnotationNode> list = new ArrayList<>();
- for (ModifierNode modifierNode : modifierNodeList) {
- if (modifierNode.isAnnotation()) {
- AnnotationNode annotationNode = modifierNode.getAnnotationNode();
- list.add(annotationNode);
- }
- }
- return list;
- }
-
- public boolean contains(int modifierType) {
- for (ModifierNode e : modifierNodeList) {
- if (modifierType == e.getType()) {
- return true;
- }
- }
- return false;
- }
-
- public boolean containsAnnotations() {
- for (ModifierNode modifierNode : modifierNodeList) {
- if (modifierNode.isAnnotation()) {
- return true;
- }
- }
- return false;
- }
-
- public boolean containsVisibilityModifier() {
- for (ModifierNode modifierNode : modifierNodeList) {
- if (modifierNode.isVisibilityModifier()) {
- return true;
- }
- }
- return false;
- }
-
- public boolean containsNonVisibilityModifier() {
- for (ModifierNode modifierNode : modifierNodeList) {
- if (modifierNode.isNonVisibilityModifier()) {
- return true;
- }
- }
- return false;
- }
-
- public Parameter processParameter(Parameter parameter) {
- for (ModifierNode e : modifierNodeList) {
- parameter.setModifiers(parameter.getModifiers() | e.getOpcode());
-
- if (e.isAnnotation()) {
- parameter.addAnnotation(e.getAnnotationNode());
- }
- }
-
- return parameter;
- }
-
- public MethodNode processMethodNode(MethodNode mn) {
- for (ModifierNode e : modifierNodeList) {
- mn.setModifiers(mn.getModifiers() | e.getOpcode());
-
- if (e.isAnnotation()) {
- mn.addAnnotation(e.getAnnotationNode());
- }
- }
-
- return mn;
- }
-
- public VariableExpression processVariableExpression(VariableExpression ve) {
- for (ModifierNode e : modifierNodeList) {
- ve.setModifiers(ve.getModifiers() | e.getOpcode());
-
- // local variable does not attach annotations
- }
-
- return ve;
- }
-
- public <T extends AnnotatedNode> T attachAnnotations(T node) {
- for (AnnotationNode a : this.getAnnotations()) {
- node.addAnnotation(a);
- }
-
- return node;
- }
- }
-
- /**
- * Represents a modifier, which is better to place in the package org.codehaus.groovy.ast
- * <p>
- * Created by Daniel.Sun on 2016/08/23.
- */
- public static class ModifierNode extends ASTNode {
- private Integer type;
- private Integer opcode; // ASM opcode
- private String text;
- private AnnotationNode annotationNode;
- private boolean repeatable;
-
- public static final int ANNOTATION_TYPE = -999;
- public static final Map<Integer, Integer> MODIFIER_OPCODE_MAP = Collections.unmodifiableMap(new HashMap<Integer, Integer>() {
- {
- put(ANNOTATION_TYPE, 0);
- put(DEF, 0);
-
- put(NATIVE, Opcodes.ACC_NATIVE);
- put(SYNCHRONIZED, Opcodes.ACC_SYNCHRONIZED);
- put(TRANSIENT, Opcodes.ACC_TRANSIENT);
- put(VOLATILE, Opcodes.ACC_VOLATILE);
-
- put(PUBLIC, Opcodes.ACC_PUBLIC);
- put(PROTECTED, Opcodes.ACC_PROTECTED);
- put(PRIVATE, Opcodes.ACC_PRIVATE);
- put(STATIC, Opcodes.ACC_STATIC);
- put(ABSTRACT, Opcodes.ACC_ABSTRACT);
- put(FINAL, Opcodes.ACC_FINAL);
- put(STRICTFP, Opcodes.ACC_STRICT);
- put(DEFAULT, 0); // no flag for specifying a default method in the JVM spec, hence no ACC_DEFAULT flag in ASM
- }
- });
-
- public ModifierNode(Integer type) {
- this.type = type;
- this.opcode = MODIFIER_OPCODE_MAP.get(type);
- this.repeatable = ANNOTATION_TYPE == type; // Only annotations are repeatable
-
- if (!asBoolean((Object) this.opcode)) {
- throw new IllegalArgumentException("Unsupported modifier type: " + type);
- }
- }
-
- /**
- * @param type the modifier type, which is same as the token type
- * @param text text of the ast node
- */
- public ModifierNode(Integer type, String text) {
- this(type);
- this.text = text;
- }
-
- /**
- * @param annotationNode the annotation node
- * @param text text of the ast node
- */
- public ModifierNode(AnnotationNode annotationNode, String text) {
- this(ModifierNode.ANNOTATION_TYPE, text);
- this.annotationNode = annotationNode;
-
- if (!asBoolean(annotationNode)) {
- throw new IllegalArgumentException("annotationNode can not be null");
- }
- }
-
- /**
- * Check whether the modifier is not an imagined modifier(annotation, def)
- */
- public boolean isModifier() {
- return !this.isAnnotation() && !this.isDef();
- }
-
- public boolean isVisibilityModifier() {
- return Objects.equals(PUBLIC, this.type)
- || Objects.equals(PROTECTED, this.type)
- || Objects.equals(PRIVATE, this.type);
- }
-
- public boolean isNonVisibilityModifier() {
- return this.isModifier() && !this.isVisibilityModifier();
- }
-
- public boolean isAnnotation() {
- return Objects.equals(ANNOTATION_TYPE, this.type);
- }
-
- public boolean isDef() {
- return Objects.equals(DEF, this.type);
- }
-
- public Integer getType() {
- return type;
- }
-
- public Integer getOpcode() {
- return opcode;
- }
-
- public boolean isRepeatable() {
- return repeatable;
- }
-
- @Override
- public String getText() {
- return text;
- }
-
- public AnnotationNode getAnnotationNode() {
- return annotationNode;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- ModifierNode that = (ModifierNode) o;
- return Objects.equals(type, that.type) &&
- Objects.equals(text, that.text) &&
- Objects.equals(annotationNode, that.annotationNode);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(type, text, annotationNode);
- }
-
- @Override
- public String toString() {
- return this.text;
- }
- }
-
private final ModuleNode moduleNode;
private final SourceUnit sourceUnit;
private final ClassLoader classLoader; // Our ClassLoader, which provides information on external types
http://git-wip-us.apache.org/repos/asf/groovy/blob/77156a39/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierManager.java
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierManager.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierManager.java
index a45e36c..23ce68e 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierManager.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierManager.java
@@ -26,6 +26,7 @@ import org.codehaus.groovy.ast.Parameter;
import org.codehaus.groovy.ast.expr.VariableExpression;
import org.objectweb.asm.Opcodes;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
@@ -56,7 +57,7 @@ class ModifierManager {
public ModifierManager(AstBuilder astBuilder, List<ModifierNode> modifierNodeList) {
this.astBuilder = astBuilder;
this.validate(modifierNodeList);
- this.modifierNodeList = Collections.unmodifiableList(asBoolean((Object) modifierNodeList) ? modifierNodeList : Collections.emptyList());
+ this.modifierNodeList = Collections.unmodifiableList(asBoolean((Object) modifierNodeList) ? modifierNodeList : Collections.<ModifierNode>emptyList());
}
private void validate(List<ModifierNode> modifierNodeList) {
@@ -91,11 +92,11 @@ class ModifierManager {
}
private void validate(List<Integer> invalidModifierList, MethodNode methodNode) {
- modifierNodeList.forEach(e -> {
+ for (ModifierNode e : modifierNodeList) {
if (invalidModifierList.contains(e.getType())) {
throw astBuilder.createParsingFailedException(methodNode.getClass().getSimpleName().replace("Node", "") + " has an incorrect modifier '" + e + "'.", methodNode);
}
- });
+ }
}
// t 1: class modifiers value; 2: class member modifiers value
@@ -126,40 +127,68 @@ class ModifierManager {
}
public List<AnnotationNode> getAnnotations() {
- return modifierNodeList.stream()
- .filter(ModifierNode::isAnnotation)
- .map(ModifierNode::getAnnotationNode)
- .collect(Collectors.toList());
+ List<AnnotationNode> result = new ArrayList<AnnotationNode>();
+ for (ModifierNode m : modifierNodeList) {
+ if (m.isAnnotation()) {
+ result.add(m.getAnnotationNode());
+ }
+ }
+ return result;
}
public boolean contains(int modifierType) {
- return modifierNodeList.stream().anyMatch(e -> modifierType == e.getType());
+ for (ModifierNode e : modifierNodeList) {
+ if (modifierType == e.getType()) {
+ return true;
+ }
+ }
+ return false;
}
- public Optional<ModifierNode> get(int modifierType) {
- return modifierNodeList.stream().filter(e -> modifierType == e.getType()).findFirst();
+ public ModifierNode get(int modifierType) {
+ for (ModifierNode e : modifierNodeList) {
+ if (modifierType == e.getType()) {
+ return e;
+ }
+ }
+ return null;
}
public boolean containsAnnotations() {
- return modifierNodeList.stream().anyMatch(ModifierNode::isAnnotation);
+ for (ModifierNode e : modifierNodeList) {
+ if (e.isAnnotation()) {
+ return true;
+ }
+ }
+ return false;
}
public boolean containsVisibilityModifier() {
- return modifierNodeList.stream().anyMatch(ModifierNode::isVisibilityModifier);
+ for (ModifierNode e : modifierNodeList) {
+ if (e.isVisibilityModifier()) {
+ return true;
+ }
+ }
+ return false;
}
public boolean containsNonVisibilityModifier() {
- return modifierNodeList.stream().anyMatch(ModifierNode::isNonVisibilityModifier);
+ for (ModifierNode e : modifierNodeList) {
+ if (e.isNonVisibilityModifier()) {
+ return true;
+ }
+ }
+ return false;
}
public Parameter processParameter(Parameter parameter) {
- modifierNodeList.forEach(e -> {
+ for (ModifierNode e : modifierNodeList) {
parameter.setModifiers(parameter.getModifiers() | e.getOpcode());
if (e.isAnnotation()) {
parameter.addAnnotation(e.getAnnotationNode());
}
- });
+ };
return parameter;
}
@@ -169,29 +198,31 @@ class ModifierManager {
}
public MethodNode processMethodNode(MethodNode mn) {
- modifierNodeList.forEach(e -> {
+ for (ModifierNode e : modifierNodeList) {
mn.setModifiers((e.isVisibilityModifier() ? clearVisibilityModifiers(mn.getModifiers()) : mn.getModifiers()) | e.getOpcode());
if (e.isAnnotation()) {
mn.addAnnotation(e.getAnnotationNode());
}
- });
+ };
return mn;
}
public VariableExpression processVariableExpression(VariableExpression ve) {
- modifierNodeList.forEach(e -> {
+ for (ModifierNode e : modifierNodeList) {
ve.setModifiers(ve.getModifiers() | e.getOpcode());
// local variable does not attach annotations
- });
+ };
return ve;
}
public <T extends AnnotatedNode> T attachAnnotations(T node) {
- this.getAnnotations().forEach(node::addAnnotation);
+ for (AnnotationNode an : getAnnotations()) {
+ node.addAnnotation(an);
+ }
return node;
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/77156a39/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SyntaxErrorReportable.java
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SyntaxErrorReportable.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SyntaxErrorReportable.java
index f9d0caa..c926676 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SyntaxErrorReportable.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SyntaxErrorReportable.java
@@ -24,41 +24,13 @@ package org.apache.groovy.parser.antlr4;
public interface SyntaxErrorReportable {
void require(boolean condition, String msg, boolean toAttachPositionInfo);
void require(boolean condition, String msg);
- void throwSyntaxError(String msg, boolean toAttachPositionInfo);
- String formatPositionInfo(int line, int column);
- int getSyntaxErrorSource();
- String genPositionInfo();
-
- default void require(boolean condition, String msg, int offset, boolean toAttachPositionInfo) {
- if (condition) {
- return;
- }
-
- this.throwSyntaxError(msg, offset, toAttachPositionInfo);
- }
- default void require(boolean condition, String msg, boolean toAttachPositionInfo) {
- require(condition, msg, 0, toAttachPositionInfo);
- }
- default void require(boolean condition, String msg, int offset) {
- require(condition, msg, offset,false);
- }
- default void require(boolean condition, String msg) {
- require(condition, msg, false);
- }
+ void require(boolean condition, String msg, int offset, boolean toAttachPositionInfo);
+ void require(boolean condition, String msg, int offset);
- default void throwSyntaxError(String msg, int offset, boolean toAttachPositionInfo) {
- PositionInfo positionInfo = this.genPositionInfo(offset);
- throw new GroovySyntaxError(msg + (toAttachPositionInfo ? positionInfo.toString() : ""),
- this.getSyntaxErrorSource(),
- positionInfo.getLine(),
- positionInfo.getColumn()
- );
- }
+ void throwSyntaxError(String msg, int offset, boolean toAttachPositionInfo);
int getSyntaxErrorSource();
- default PositionInfo genPositionInfo(int offset) {
- return new PositionInfo(getErrorLine(), getErrorColumn() + offset);
- }
+ PositionInfo genPositionInfo(int offset);
int getErrorLine();
int getErrorColumn();