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/08 00:27:14 UTC
[14/17] groovy git commit: rename antlr4 parser to remove groovy-
prefix since that is by convention for modules
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovyLangLexer.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovyLangLexer.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovyLangLexer.java
deleted file mode 100644
index d3b7538..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovyLangLexer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4;
-
-import org.antlr.v4.runtime.CharStream;
-import org.antlr.v4.runtime.Lexer;
-import org.antlr.v4.runtime.LexerNoViableAltException;
-import org.antlr.v4.runtime.atn.ATN;
-import org.antlr.v4.runtime.atn.LexerATNSimulator;
-import org.apache.groovy.parser.antlr4.internal.AtnManager;
-
-/**
- * The lexer for Groovy programming language, which is based on the lexer generated by Antlr4
- *
- * @author <a href="mailto:realbluesun@hotmail.com">Daniel.Sun</a>
- * Created on 2016/08/14
- */
-public class GroovyLangLexer extends GroovyLexer {
- public GroovyLangLexer(CharStream input) {
- super(input);
-
- this.setInterpreter(new PositionAdjustingLexerATNSimulator(this, new AtnManager(this).getATN()));
- }
-
- @Override
- public void recover(LexerNoViableAltException e) {
- throw e; // if some lexical error occurred, stop parsing!
- }
-
- @Override
- protected void rollbackOneChar() {
- ((PositionAdjustingLexerATNSimulator) getInterpreter()).resetAcceptPosition(getInputStream(), _tokenStartCharIndex - 1, _tokenStartLine, _tokenStartCharPositionInLine - 1);
- }
-
- private static class PositionAdjustingLexerATNSimulator extends LexerATNSimulator {
- public PositionAdjustingLexerATNSimulator(Lexer recog, ATN atn) {
- super(recog, atn);
- }
-
- protected void resetAcceptPosition(CharStream input, int index, int line, int charPositionInLine) {
- input.seek(index);
- this.line = line;
- this.charPositionInLine = charPositionInLine;
- this.consume(input);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovyLangParser.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovyLangParser.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovyLangParser.java
deleted file mode 100644
index fa33c6e..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovyLangParser.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.groovy.parser.antlr4;
-
-import org.antlr.v4.runtime.TokenStream;
-import org.antlr.v4.runtime.atn.ParserATNSimulator;
-import org.apache.groovy.parser.antlr4.internal.AtnManager;
-
-/**
- * The parser for Groovy programming language, which is based on the parser generated by Antlr4
- *
- * @author <a href="mailto:realbluesun@hotmail.com">Daniel.Sun</a>
- * Created on 2016/08/14
- */
-public class GroovyLangParser extends GroovyParser {
- public GroovyLangParser(TokenStream input) {
- super(input);
-
- this.setInterpreter(new ParserATNSimulator(this, new AtnManager(this).getATN()));
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovySyntaxError.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovySyntaxError.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovySyntaxError.java
deleted file mode 100644
index 7ca8bba..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovySyntaxError.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4;
-
-/**
- * Represents a syntax error of groovy program
- */
-public class GroovySyntaxError extends AssertionError {
- public static final int LEXER = 0;
- public static final int PARSER = 1;
- private int source;
- private int line;
- private int column;
-
- public GroovySyntaxError(String message, int source, int line, int column) {
- super(message, null);
-
- if (source != LEXER && source != PARSER) {
- throw new IllegalArgumentException("Invalid syntax error source: " + source);
- }
-
- this.source = source;
- this.line = line;
- this.column = column;
- }
-
- public int getSource() {
- return source;
- }
- public int getLine() {
- return line;
- }
-
- public int getColumn() {
- return column;
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
deleted file mode 100644
index 449b2e7..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4;
-
-import groovy.lang.Groovydoc;
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.tree.ParseTree;
-import org.antlr.v4.runtime.tree.TerminalNode;
-import org.codehaus.groovy.GroovyBugError;
-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.expr.ConstantExpression;
-
-import java.util.List;
-
-import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
-
-/**
- * A utilities for managing groovydoc, e.g.
- * 1) extracting groovydoc from groovy AST;
- * 2) TODO extracting tags from groovydoc;
- * 3) attach groovydoc to AST node as metadata
- */
-public class GroovydocManager {
- public static final String DOC_COMMENT = "_DOC_COMMENT"; // keys for meta data
- private static final String DOC_COMMENT_PREFIX = "/**";
- private static final String EXTRACT_DOC_COMMENT = "groovy.extract.doc.comment";
- private static final String TRUE_STR = "true";
- private static final boolean EXTRACTING_DOC_COMMENT_ENABLED;
- private static final String VALUE = "value";
- private static final String RUNTIME_GROOVYDOC_PATTERN = "(?s)/[*][*]\\s+(\\s+[*]\\s*)*@Groovydoc\\b.+?[*]/";
- private AstBuilder astBuilder;
-
- static {
- boolean edce;
- try {
- edce = TRUE_STR.equals(System.getProperty(EXTRACT_DOC_COMMENT));
- } catch (Exception e) {
- edce = false;
- }
-
- EXTRACTING_DOC_COMMENT_ENABLED = edce;
- }
-
- public GroovydocManager(AstBuilder astBuilder) {
- this.astBuilder = astBuilder;
- }
-
- /**
- * Attach doc comment to member node as meta data
- *
- */
- public void handle(ASTNode node, GroovyParser.GroovyParserRuleContext ctx) {
- if (!asBoolean(node) || !asBoolean(ctx)) {
- return;
- }
-
- String docCommentNodeText = this.findDocCommentByNode(ctx);
- if (null == docCommentNodeText) {
- return;
- }
-
- attachDocCommentAsMetaData(node, docCommentNodeText);
- attachGroovydocAnnotation(node, docCommentNodeText);
- }
-
- /*
- * Attach doc comment to member node as meta data
- */
- private void attachDocCommentAsMetaData(ASTNode node, String docCommentNodeText) {
- if (!EXTRACTING_DOC_COMMENT_ENABLED) {
- return;
- }
-
- node.putNodeMetaData(DOC_COMMENT, docCommentNodeText);
- }
-
- /*
- * Attach Groovydoc annotation to the target element
- */
- private void attachGroovydocAnnotation(ASTNode node, String docCommentNodeText) {
- if (!(node instanceof AnnotatedNode)) {
- return;
- }
-
- if (!docCommentNodeText.matches(RUNTIME_GROOVYDOC_PATTERN)) {
- return;
- }
-
- AnnotatedNode annotatedNode = (AnnotatedNode) node;
- AnnotationNode annotationNode = new AnnotationNode(ClassHelper.make(Groovydoc.class));
- annotationNode.addMember(VALUE, new ConstantExpression(docCommentNodeText));
- annotatedNode.addAnnotation(annotationNode);
- }
-
- private String findDocCommentByNode(ParserRuleContext node) {
- if (!asBoolean(node)) {
- return null;
- }
-
- if (node instanceof GroovyParser.ClassBodyContext) {
- return null;
- }
-
- ParserRuleContext parentContext = node.getParent();
-
- if (!asBoolean(parentContext)) {
- return null;
- }
-
- String docCommentNodeText = null;
- boolean sameTypeNodeBefore = false;
- for (ParseTree child : parentContext.children) {
-
- if (node == child) {
- // if no doc comment node found and no siblings of same type before the node,
- // try to find doc comment node of its parent
- if (!asBoolean((Object) docCommentNodeText) && !sameTypeNodeBefore) {
- return findDocCommentByNode(parentContext);
- }
-
- return docCommentNodeText;
- }
-
- if (node.getClass() == child.getClass()) { // e.g. ClassBodyDeclarationContext == ClassBodyDeclarationContext
- docCommentNodeText = null;
- sameTypeNodeBefore = true;
- continue;
- }
-
- if (!(child instanceof GroovyParser.NlsContext || child instanceof GroovyParser.SepContext)) {
- continue;
- }
-
- // doc comments are treated as NL
- List<? extends TerminalNode> nlList =
- child instanceof GroovyParser.NlsContext
- ? ((GroovyParser.NlsContext) child).NL()
- : ((GroovyParser.SepContext) child).NL();
-
- int nlListSize = nlList.size();
- if (0 == nlListSize) {
- continue;
- }
-
- for (int i = nlListSize - 1; i >= 0; i--) {
- String text = nlList.get(i).getText();
-
- if (text.matches("\\s+")) {
- continue;
- }
-
- if (text.startsWith(DOC_COMMENT_PREFIX)) {
- docCommentNodeText = text;
- } else {
- docCommentNodeText = null;
- }
-
- break;
- }
- }
-
- throw new GroovyBugError("node can not be found: " + node.getText()); // The exception should never be thrown!
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierManager.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierManager.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierManager.java
deleted file mode 100644
index a45e36c..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierManager.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4;
-
-import org.codehaus.groovy.ast.AnnotatedNode;
-import org.codehaus.groovy.ast.AnnotationNode;
-import org.codehaus.groovy.ast.ConstructorNode;
-import org.codehaus.groovy.ast.MethodNode;
-import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.expr.VariableExpression;
-import org.objectweb.asm.Opcodes;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
-import static org.apache.groovy.parser.antlr4.GroovyParser.*;
-import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
-
-/**
- * Process modifiers for AST nodes
- * <p>
- * Created by Daniel.Sun on 2016/08/27.
- */
-class ModifierManager {
- private static final Map<Class, List<Integer>> INVALID_MODIFIERS_MAP = Collections.unmodifiableMap(new HashMap<Class, List<Integer>>() {
- {
- put(ConstructorNode.class, Arrays.asList(STATIC, FINAL, ABSTRACT, NATIVE));
- put(MethodNode.class, Arrays.asList(VOLATILE/*, TRANSIENT*/));
- }
- });
- private AstBuilder astBuilder;
- private List<ModifierNode> modifierNodeList;
-
- public ModifierManager(AstBuilder astBuilder, List<ModifierNode> modifierNodeList) {
- this.astBuilder = astBuilder;
- this.validate(modifierNodeList);
- this.modifierNodeList = Collections.unmodifiableList(asBoolean((Object) modifierNodeList) ? modifierNodeList : Collections.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 astBuilder.createParsingFailedException("Cannot repeat modifier[" + modifierNode.getText() + "]", modifierNode);
- }
-
- if (modifierNode.isVisibilityModifier()) {
- visibilityModifierCnt++;
-
- if (visibilityModifierCnt > 1) {
- throw astBuilder.createParsingFailedException("Cannot specify modifier[" + modifierNode.getText() + "] when access scope has already been defined", modifierNode);
- }
- }
- }
- }
-
- public void validate(MethodNode methodNode) {
- validate(INVALID_MODIFIERS_MAP.get(MethodNode.class), methodNode);
- }
-
- public void validate(ConstructorNode constructorNode) {
- validate(INVALID_MODIFIERS_MAP.get(ConstructorNode.class), constructorNode);
- }
-
- private void validate(List<Integer> invalidModifierList, MethodNode methodNode) {
- modifierNodeList.forEach(e -> {
- 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
- 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() {
- return modifierNodeList.stream()
- .filter(ModifierNode::isAnnotation)
- .map(ModifierNode::getAnnotationNode)
- .collect(Collectors.toList());
- }
-
- public boolean contains(int modifierType) {
- return modifierNodeList.stream().anyMatch(e -> modifierType == e.getType());
- }
-
- public Optional<ModifierNode> get(int modifierType) {
- return modifierNodeList.stream().filter(e -> modifierType == e.getType()).findFirst();
- }
-
- public boolean containsAnnotations() {
- return modifierNodeList.stream().anyMatch(ModifierNode::isAnnotation);
- }
-
- public boolean containsVisibilityModifier() {
- return modifierNodeList.stream().anyMatch(ModifierNode::isVisibilityModifier);
- }
-
- public boolean containsNonVisibilityModifier() {
- return modifierNodeList.stream().anyMatch(ModifierNode::isNonVisibilityModifier);
- }
-
- public Parameter processParameter(Parameter parameter) {
- modifierNodeList.forEach(e -> {
- parameter.setModifiers(parameter.getModifiers() | e.getOpcode());
-
- if (e.isAnnotation()) {
- parameter.addAnnotation(e.getAnnotationNode());
- }
- });
-
- return parameter;
- }
-
- public int clearVisibilityModifiers(int modifiers) {
- return modifiers & ~Opcodes.ACC_PUBLIC & ~Opcodes.ACC_PROTECTED & ~Opcodes.ACC_PRIVATE;
- }
-
- public MethodNode processMethodNode(MethodNode mn) {
- modifierNodeList.forEach(e -> {
- 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 -> {
- 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);
-
- return node;
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierNode.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierNode.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierNode.java
deleted file mode 100644
index 5d1007b..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/ModifierNode.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4;
-
-import org.codehaus.groovy.ast.ASTNode;
-import org.codehaus.groovy.ast.AnnotationNode;
-import org.objectweb.asm.Opcodes;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-import static org.apache.groovy.parser.antlr4.GroovyParser.*;
-import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
-
-/**
- * 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 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;
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/PositionInfo.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/PositionInfo.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/PositionInfo.java
deleted file mode 100644
index b59aabb..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/PositionInfo.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4;
-
-import java.util.Objects;
-
-/**
- * Created by Daniel on 2017/4/22.
- */
-public class PositionInfo {
- private int line;
- private int column;
-
- public PositionInfo(int line, int column) {
- this.line = line;
- this.column = column;
- }
-
- public int getLine() {
- return line;
- }
-
- public void setLine(int line) {
- this.line = line;
- }
-
- public int getColumn() {
- return column;
- }
-
- public void setColumn(int column) {
- this.column = column;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- PositionInfo that = (PositionInfo) o;
- return line == that.line &&
- column == that.column;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(line, column);
- }
-
- @Override
- public String toString() {
- if (-1 == line || -1 == column) {
- return "";
- }
-
- return " @ line " + line + ", column " + column;
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SemanticPredicates.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SemanticPredicates.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SemanticPredicates.java
deleted file mode 100644
index eb3dbd9..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SemanticPredicates.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4;
-
-import org.antlr.v4.runtime.CharStream;
-import org.antlr.v4.runtime.Token;
-import org.antlr.v4.runtime.TokenStream;
-
-import java.util.Collections;
-import java.util.Set;
-
-import static org.apache.groovy.parser.antlr4.GroovyParser.*;
-
-/**
- * Some semantic predicates for altering the behaviour of the lexer and parser
- *
- * @author <a href="mailto:realbluesun@hotmail.com">Daniel.Sun</a>
- * Created on 2016/08/20
- */
-public class SemanticPredicates {
- public static boolean isFollowedByWhiteSpaces(CharStream cs) {
- for (int index = 1, c = cs.LA(index); !('\r' == c || '\n' == c || CharStream.EOF == c); index++, c = cs.LA(index)) {
- if (String.valueOf((char) c).matches("\\S+?")) {
- return false;
- }
- }
-
- return true;
- }
-
- public static boolean isFollowedBy(CharStream cs, char... chars) {
- int c1 = cs.LA(1);
-
- for (char c : chars) {
- if (c1 == c) {
- return true;
- }
- }
-
- return false;
- }
-
- public static boolean isFollowedByJavaLetterInGString(CharStream cs) {
- int c1 = cs.LA(1);
-
- if ('$' == c1) { // single $ is not a valid identifier
- return false;
- }
-
- String str1 = String.valueOf((char) c1);
-
- if (str1.matches("[a-zA-Z_{]")) {
- return true;
- }
-
- if (str1.matches("[^\u0000-\u007F\uD800-\uDBFF]")
- && Character.isJavaIdentifierPart(c1)) {
- return true;
- }
-
- int c2 = cs.LA(2);
- String str2 = String.valueOf((char) c2);
-
- if (str1.matches("[\uD800-\uDBFF]")
- && str2.matches("[\uDC00-\uDFFF]")
- && Character.isJavaIdentifierPart(Character.toCodePoint((char) c1, (char) c2))) {
-
- return true;
- }
-
- return false;
- }
-
- /**
- * Check whether following a method name of command expression.
- * Method name should not end with "2: arguments" and "3: closure"
- *
- * @param t the type of pathExpression
- * @return
- */
- public static boolean isFollowingMethodName(int t) {
- return !(2 == t || 3 == t);
- }
-
- /**
- * Distinguish between method declaration and method call/constructor declaration
- */
- public static boolean isInvalidMethodDeclaration(TokenStream ts) {
- int tokenType = ts.LT(1).getType();
-
- return (Identifier == tokenType || CapitalizedIdentifier == tokenType || StringLiteral == tokenType)
- && LPAREN == (ts.LT(2).getType());
- }
-
- private static final Set<Integer> MODIFIER_SET =
- Collections.unmodifiableSet(ModifierNode.MODIFIER_OPCODE_MAP.keySet());
- /**
- * Distinguish between local variable declaration and method call, e.g. `a b`
- */
- public static boolean isInvalidLocalVariableDeclaration(TokenStream ts) {
- int index = 2;
- Token token;
- int tokenType;
- int tokenType2 = ts.LT(index).getType();
- int tokenType3;
-
- if (DOT == tokenType2) {
- int tokeTypeN = tokenType2;
-
- do {
- index = index + 2;
- tokeTypeN = ts.LT(index).getType();
- } while (DOT == tokeTypeN);
-
- if (LT == tokeTypeN || LBRACK == tokeTypeN) {
- return false;
- }
-
- index = index - 1;
- tokenType2 = ts.LT(index + 1).getType();
- } else {
- index = 1;
- }
-
- token = ts.LT(index);
- tokenType = token.getType();
- tokenType3 = ts.LT(index + 2).getType();
-
- return //VOID == tokenType ||
- !(BuiltInPrimitiveType == tokenType || MODIFIER_SET.contains(tokenType))
- && Character.isLowerCase(token.getText().codePointAt(0))
- && !(ASSIGN == tokenType3 || (LT == tokenType2 || LBRACK == tokenType2));
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SyntaxErrorReportable.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SyntaxErrorReportable.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SyntaxErrorReportable.java
deleted file mode 100644
index 021e2f5..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/SyntaxErrorReportable.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4;
-
-/**
- * A SyntaxErrorReportable is a recognizer that can report syntax error
- */
-public interface SyntaxErrorReportable {
- 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);
- }
-
- 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()
- );
- }
-
- int getSyntaxErrorSource();
- default PositionInfo genPositionInfo(int offset) {
- return new PositionInfo(getErrorLine(), getErrorColumn() + offset);
- }
-
- int getErrorLine();
- int getErrorColumn();
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
deleted file mode 100644
index cbe3697..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4;
-
-import org.codehaus.groovy.ast.ClassHelper;
-import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.expr.ArgumentListExpression;
-import org.codehaus.groovy.ast.expr.BinaryExpression;
-import org.codehaus.groovy.ast.expr.BooleanExpression;
-import org.codehaus.groovy.ast.expr.ConstantExpression;
-import org.codehaus.groovy.ast.expr.DeclarationExpression;
-import org.codehaus.groovy.ast.expr.MethodCallExpression;
-import org.codehaus.groovy.ast.expr.VariableExpression;
-import org.codehaus.groovy.ast.stmt.BlockStatement;
-import org.codehaus.groovy.ast.stmt.CatchStatement;
-import org.codehaus.groovy.ast.stmt.EmptyStatement;
-import org.codehaus.groovy.ast.stmt.ExpressionStatement;
-import org.codehaus.groovy.ast.stmt.IfStatement;
-import org.codehaus.groovy.ast.stmt.Statement;
-import org.codehaus.groovy.ast.stmt.ThrowStatement;
-import org.codehaus.groovy.ast.stmt.TryCatchStatement;
-import org.codehaus.groovy.syntax.Types;
-import org.objectweb.asm.Opcodes;
-
-import java.util.Collections;
-import java.util.List;
-
-import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
-
-/**
- * Transform try-with-resources to try-catch-finally
- * Reference JLS "14.20.3. try-with-resources"(https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html)
- *
- * @author <a href="mailto:realbluesun@hotmail.com">Daniel.Sun</a>
- * Created on 2016/11/04
- */
-public class TryWithResourcesASTTransformation {
- private AstBuilder astBuilder;
-
- public TryWithResourcesASTTransformation(AstBuilder astBuilder) {
- this.astBuilder = astBuilder;
- }
-
- /**
- * Reference JLS "14.20.3. try-with-resources"(https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html)
- *
- * @param tryCatchStatement the try-with-resources statement to transform
- * @return try-catch-finally statement, which contains no resources clause
- */
- public Statement transform(TryCatchStatement tryCatchStatement) {
- if (!asBoolean(tryCatchStatement.getResourceStatements())) {
- return tryCatchStatement;
- }
-
- if (this.isBasicTryWithResourcesStatement(tryCatchStatement)) {
- return this.transformBasicTryWithResourcesStatement(tryCatchStatement);
- } else {
- return this.transformExtendedTryWithResourcesStatement(tryCatchStatement);
- }
- }
-
- private boolean isBasicTryWithResourcesStatement(TryCatchStatement tryCatchStatement) {
- if (EmptyStatement.INSTANCE.equals(tryCatchStatement.getFinallyStatement())
- && !asBoolean(tryCatchStatement.getCatchStatements())) {
- return true;
- }
-
- return false;
- }
-
- private ExpressionStatement makeVariableDeclarationFinal(ExpressionStatement variableDeclaration) {
- if (!asBoolean(variableDeclaration)) {
- return variableDeclaration;
- }
-
- if (!(variableDeclaration.getExpression() instanceof DeclarationExpression)) {
- throw new IllegalArgumentException("variableDeclaration is not a declaration statement");
- }
-
- DeclarationExpression declarationExpression = (DeclarationExpression) variableDeclaration.getExpression();
- if (!(declarationExpression.getLeftExpression() instanceof VariableExpression)) {
- throw astBuilder.createParsingFailedException("The expression statement is not a variable delcaration statement", variableDeclaration);
- }
-
- VariableExpression variableExpression = (VariableExpression) declarationExpression.getLeftExpression();
- variableExpression.setModifiers(variableExpression.getModifiers() | Opcodes.ACC_FINAL);
-
- return variableDeclaration;
- }
-
- private int primaryExcCnt = 0;
- private String genPrimaryExcName() {
- return "__$$primaryExc" + primaryExcCnt++;
- }
-
- /*
- * try ResourceSpecification
- * Block
- * Catchesopt
- * Finallyopt
- *
- * **The above AST should be transformed to the following AST**
- *
- * try {
- * try ResourceSpecification
- * Block
- * }
- * Catchesopt
- * Finallyopt
- */
- private Statement transformExtendedTryWithResourcesStatement(TryCatchStatement tryCatchStatement) {
- /*
- * try ResourceSpecification
- * Block
- */
- TryCatchStatement newTryWithResourcesStatement =
- new TryCatchStatement(
- tryCatchStatement.getTryStatement(),
- EmptyStatement.INSTANCE);
- tryCatchStatement.getResourceStatements().forEach(newTryWithResourcesStatement::addResource);
-
-
- /*
- * try {
- * << the following try-with-resources has been transformed >>
- * try ResourceSpecification
- * Block
- * }
- * Catchesopt
- * Finallyopt
- */
- TryCatchStatement newTryCatchStatement =
- new TryCatchStatement(
- astBuilder.createBlockStatement(this.transform(newTryWithResourcesStatement)),
- tryCatchStatement.getFinallyStatement());
-
- tryCatchStatement.getCatchStatements().forEach(newTryCatchStatement::addCatch);
-
- return newTryCatchStatement;
- }
-
- /*
- * try (VariableModifiersopt R Identifier = Expression ...)
- * Block
- *
- * **The above AST should be transformed to the following AST**
- *
- * {
- * final VariableModifiers_minus_final R Identifier = Expression;
- * Throwable #primaryExc = null;
- *
- * try ResourceSpecification_tail
- * Block
- * catch (Throwable #t) {
- * #primaryExc = #t;
- * throw #t;
- * } finally {
- * if (Identifier != null) {
- * if (#primaryExc != null) {
- * try {
- * Identifier.close();
- * } catch (Throwable #suppressedExc) {
- * #primaryExc.addSuppressed(#suppressedExc);
- * }
- * } else {
- * Identifier.close();
- * }
- * }
- * }
- * }
- *
- */
- private Statement transformBasicTryWithResourcesStatement(TryCatchStatement tryCatchStatement) {
- // { ... }
- BlockStatement blockStatement = new BlockStatement();
-
- // final VariableModifiers_minus_final R Identifier = Expression;
- ExpressionStatement firstResourceStatement =
- this.makeVariableDeclarationFinal(
- tryCatchStatement.getResourceStatement(0));
- astBuilder.appendStatementsToBlockStatement(blockStatement, firstResourceStatement);
-
- // Throwable #primaryExc = null;
- String primaryExcName = this.genPrimaryExcName();
- ExpressionStatement primaryExcDeclarationStatement =
- new ExpressionStatement(
- new DeclarationExpression(
- new VariableExpression(primaryExcName, ClassHelper.make(Throwable.class)),
- org.codehaus.groovy.syntax.Token.newSymbol(Types.ASSIGN, -1, -1),
- new ConstantExpression(null)
- )
- );
- astBuilder.appendStatementsToBlockStatement(blockStatement, primaryExcDeclarationStatement);
-
-
- // The generated try-catch-finally statement
- String firstResourceIdentifierName =
- ((DeclarationExpression) tryCatchStatement.getResourceStatement(0).getExpression()).getLeftExpression().getText();
-
- TryCatchStatement newTryCatchStatement =
- new TryCatchStatement(
- tryCatchStatement.getTryStatement(),
- this.createFinallyBlockForNewTryCatchStatement(primaryExcName, firstResourceIdentifierName));
-
- List<ExpressionStatement> resourceStatements = tryCatchStatement.getResourceStatements();
- // 2nd, 3rd, ..., n'th resources declared in resources
- List<ExpressionStatement> tailResourceStatements = resourceStatements.subList(1, resourceStatements.size());
- tailResourceStatements.stream().forEach(newTryCatchStatement::addResource);
-
- newTryCatchStatement.addCatch(this.createCatchBlockForOuterNewTryCatchStatement(primaryExcName));
- astBuilder.appendStatementsToBlockStatement(blockStatement, this.transform(newTryCatchStatement));
-
- return blockStatement;
- }
-
- /*
- * catch (Throwable #t) {
- * #primaryExc = #t;
- * throw #t;
- * }
- *
- */
- private CatchStatement createCatchBlockForOuterNewTryCatchStatement(String primaryExcName) {
- // { ... }
- BlockStatement blockStatement = new BlockStatement();
- String tExcName = this.genTExcName();
-
- // #primaryExc = #t;
- ExpressionStatement primaryExcAssignStatement =
- new ExpressionStatement(
- new BinaryExpression(
- new VariableExpression(primaryExcName),
- org.codehaus.groovy.syntax.Token.newSymbol(Types.ASSIGN, -1, -1),
- new VariableExpression(tExcName)));
- astBuilder.appendStatementsToBlockStatement(blockStatement, primaryExcAssignStatement);
-
- // throw #t;
- ThrowStatement throwTExcStatement = new ThrowStatement(new VariableExpression(tExcName));
- astBuilder.appendStatementsToBlockStatement(blockStatement, throwTExcStatement);
-
- // Throwable #t
- Parameter tExcParameter = new Parameter(ClassHelper.make(Throwable.class), tExcName);
-
- return new CatchStatement(tExcParameter, blockStatement);
- }
-
- private int tExcCnt = 0;
- private String genTExcName() {
- return "__$$t" + tExcCnt++;
- }
-
- /*
- * finally {
- * if (Identifier != null) {
- * if (#primaryExc != null) {
- * try {
- * Identifier.close();
- * } catch (Throwable #suppressedExc) {
- * #primaryExc.addSuppressed(#suppressedExc);
- * }
- * } else {
- * Identifier.close();
- * }
- * }
- * }
- *
- * We can simplify the above code to a Groovy version as follows:
- *
- * finally {
- * if (#primaryExc != null)
- * try {
- * Identifier?.close();
- * } catch (Throwable #suppressedExc) {
- * #primaryExc.addSuppressed(#suppressedExc);
- * }
- * else
- * Identifier?.close();
- *
- * }
- *
- */
- private BlockStatement createFinallyBlockForNewTryCatchStatement(String primaryExcName, String firstResourceIdentifierName) {
- BlockStatement finallyBlock = new BlockStatement();
-
- // primaryExc != null
- BooleanExpression conditionExpression =
- new BooleanExpression(
- new BinaryExpression(
- new VariableExpression(primaryExcName),
- org.codehaus.groovy.syntax.Token.newSymbol(Types.COMPARE_NOT_EQUAL, -1, -1),
- new ConstantExpression(null)));
-
- // try-catch statement
- TryCatchStatement newTryCatchStatement =
- new TryCatchStatement(
- astBuilder.createBlockStatement(this.createCloseResourceStatement(firstResourceIdentifierName)), // { Identifier?.close(); }
- EmptyStatement.INSTANCE);
-
-
- String suppressedExcName = this.genSuppressedExcName();
- newTryCatchStatement.addCatch(
- // catch (Throwable #suppressedExc) { .. }
- new CatchStatement(
- new Parameter(ClassHelper.make(Throwable.class), suppressedExcName),
- astBuilder.createBlockStatement(this.createAddSuppressedStatement(primaryExcName, suppressedExcName)) // #primaryExc.addSuppressed(#suppressedExc);
- )
- );
-
- // if (#primaryExc != null) { ... }
- IfStatement ifStatement =
- new IfStatement(
- conditionExpression,
- newTryCatchStatement,
- this.createCloseResourceStatement(firstResourceIdentifierName) // Identifier?.close();
- );
- astBuilder.appendStatementsToBlockStatement(finallyBlock, ifStatement);
-
- return astBuilder.createBlockStatement(finallyBlock);
- }
-
- private int suppressedExcCnt = 0;
- private String genSuppressedExcName() {
- return "__$$suppressedExc" + suppressedExcCnt++;
- }
-
- /*
- * Identifier?.close();
- */
- private ExpressionStatement createCloseResourceStatement(String firstResourceIdentifierName) {
- MethodCallExpression closeMethodCallExpression =
- new MethodCallExpression(new VariableExpression(firstResourceIdentifierName), "close", new ArgumentListExpression());
-
- closeMethodCallExpression.setImplicitThis(false);
- closeMethodCallExpression.setSafe(true);
-
- return new ExpressionStatement(closeMethodCallExpression);
- }
-
- /*
- * #primaryExc.addSuppressed(#suppressedExc);
- */
- private ExpressionStatement createAddSuppressedStatement(String primaryExcName, String suppressedExcName) {
- MethodCallExpression addSuppressedMethodCallExpression =
- new MethodCallExpression(
- new VariableExpression(primaryExcName),
- "addSuppressed",
- new ArgumentListExpression(Collections.singletonList(new VariableExpression(suppressedExcName))));
- addSuppressedMethodCallExpression.setImplicitThis(false);
- addSuppressedMethodCallExpression.setSafe(true);
-
- return new ExpressionStatement(addSuppressedMethodCallExpression);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/internal/AtnManager.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/internal/AtnManager.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/internal/AtnManager.java
deleted file mode 100644
index 02cc152..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/internal/AtnManager.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4.internal;
-
-import org.antlr.v4.runtime.atn.ATN;
-import org.apache.groovy.parser.antlr4.GroovyLangLexer;
-import org.apache.groovy.parser.antlr4.GroovyLangParser;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-/**
- * Manage ATN for lexer and parser to avoid memory leak
- *
- * @author <a href="mailto:realbluesun@hotmail.com">Daniel.Sun</a>
- * Created on 2016/08/14
- */
-public class AtnManager {
- public static final ReentrantReadWriteLock RRWL = new ReentrantReadWriteLock(true);
- private static final String CACHE_THRESHOLD_NAME = "groovy.antlr4.cache.threshold";
- private static final int CACHE_THRESHOLD;
- private final Class ownerClass;
- private final ATN atn;
- private static final Map<Class, AtnWrapper> ATN_MAP =
- Collections.unmodifiableMap(new HashMap<Class, AtnWrapper>() {
- {
- put(GroovyLangLexer.class, new AtnWrapper(GroovyLangLexer._ATN));
- put(GroovyLangParser.class, new AtnWrapper(GroovyLangParser._ATN));
- }
- });
-
- static {
- int t = 50;
-
- try {
- t = Integer.parseInt(System.getProperty(CACHE_THRESHOLD_NAME));
-
- // cache threshold should be at least 50 for better performance
- t = t < 50 ? 50 : t;
- } catch (Exception e) {
- // ignored
- }
-
- CACHE_THRESHOLD = t;
- }
-
- public AtnManager(GroovyLangLexer lexer) {
- this.ownerClass = lexer.getClass();
- this.atn = GroovyLangLexer._ATN; //getAtnWrapper(this.ownerClass).checkAndClear();
- }
-
- public AtnManager(GroovyLangParser parser) {
- this.ownerClass = parser.getClass();
- this.atn = getAtnWrapper(this.ownerClass).checkAndClear();
- }
-
- public ATN getATN() {
- return this.atn;
- }
-
- private AtnWrapper getAtnWrapper(Class ownerClass) {
- return ATN_MAP.get(ownerClass);
- }
-
- private static class AtnWrapper {
- private final ATN atn;
- private final AtomicLong counter = new AtomicLong(0);
-
- public AtnWrapper(ATN atn) {
- this.atn = atn;
- }
-
- public ATN checkAndClear() {
- if (0 != counter.incrementAndGet() % CACHE_THRESHOLD) {
- return atn;
- }
-
- RRWL.writeLock().lock();
- try {
- atn.clearDFA();
- } finally {
- RRWL.writeLock().unlock();
- }
-
- return atn;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/internal/DescriptiveErrorStrategy.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/internal/DescriptiveErrorStrategy.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/internal/DescriptiveErrorStrategy.java
deleted file mode 100644
index 12081ed..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/internal/DescriptiveErrorStrategy.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4.internal;
-
-import org.antlr.v4.runtime.BailErrorStrategy;
-import org.antlr.v4.runtime.FailedPredicateException;
-import org.antlr.v4.runtime.InputMismatchException;
-import org.antlr.v4.runtime.NoViableAltException;
-import org.antlr.v4.runtime.Parser;
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.RecognitionException;
-import org.antlr.v4.runtime.Token;
-import org.antlr.v4.runtime.TokenStream;
-import org.antlr.v4.runtime.atn.PredictionMode;
-import org.antlr.v4.runtime.misc.NotNull;
-import org.antlr.v4.runtime.misc.ParseCancellationException;
-
-/**
- * Provide friendly error messages when parsing errors occurred.
- *
- * @author <a href="mailto:realbluesun@hotmail.com">Daniel.Sun</a>
- * Created on 2016/10/19
- */
-public class DescriptiveErrorStrategy extends BailErrorStrategy {
- @Override
- public void recover(Parser recognizer, RecognitionException e) {
- for (ParserRuleContext context = recognizer.getContext(); context != null; context = context.getParent()) {
- context.exception = e;
- }
-
- if (PredictionMode.LL.equals(recognizer.getInterpreter().getPredictionMode())) {
- if (e instanceof NoViableAltException) {
- this.reportNoViableAlternative(recognizer, (NoViableAltException) e);
- } else if (e instanceof InputMismatchException) {
- this.reportInputMismatch(recognizer, (InputMismatchException) e);
- } else if (e instanceof FailedPredicateException) {
- this.reportFailedPredicate(recognizer, (FailedPredicateException) e);
- }
- }
-
- throw new ParseCancellationException(e);
- }
-
- @Override
- public Token recoverInline(Parser recognizer)
- throws RecognitionException {
-
- this.recover(recognizer, new InputMismatchException(recognizer)); // stop parsing
- return null;
- }
-
- protected String createNoViableAlternativeErrorMessage(Parser recognizer, NoViableAltException e) {
- TokenStream tokens = recognizer.getInputStream();
- String input;
- if (tokens != null) {
- if (e.getStartToken().getType() == Token.EOF) input = "<EOF>";
- else input = tokens.getText(e.getStartToken(), e.getOffendingToken());
- } else {
- input = "<unknown input>";
- }
-
- return "Unexpected input: " + escapeWSAndQuote(input);
- }
-
- @Override
- protected void reportNoViableAlternative(@NotNull Parser recognizer,
- @NotNull NoViableAltException e) {
-
- notifyErrorListeners(recognizer, this.createNoViableAlternativeErrorMessage(recognizer, e), e);
- }
-
- protected String createInputMismatchErrorMessage(@NotNull Parser recognizer,
- @NotNull InputMismatchException e) {
- return "Unexpected input: " + getTokenErrorDisplay(e.getOffendingToken(recognizer)) +
- "; Expecting " + e.getExpectedTokens().toString(recognizer.getVocabulary());
- }
-
- protected void reportInputMismatch(@NotNull Parser recognizer,
- @NotNull InputMismatchException e) {
-
- notifyErrorListeners(recognizer, this.createInputMismatchErrorMessage(recognizer, e), e);
- }
-
-
- protected String createFailedPredicateErrorMessage(@NotNull Parser recognizer,
- @NotNull FailedPredicateException e) {
- return e.getMessage();
- }
-
- protected void reportFailedPredicate(@NotNull Parser recognizer,
- @NotNull FailedPredicateException e) {
- notifyErrorListeners(recognizer, this.createFailedPredicateErrorMessage(recognizer, e), e);
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
deleted file mode 100644
index 739a737..0000000
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4.util;
-
-import groovy.lang.Closure;
-import org.codehaus.groovy.runtime.StringGroovyMethods;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-/**
- * Utilities for handling strings
- *
- * @author <a href="mailto:realbluesun@hotmail.com">Daniel.Sun</a>
- * Created on 2016/08/20
- */
-public class StringUtils {
- public static String replaceHexEscapes(String text) {
- Pattern p = Pattern.compile("(\\\\*)\\\\u+([0-9abcdefABCDEF]{4})");
- return StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
- Object doCall(String _0, String _1, String _2) {
- if (isLengthOdd(_1)) {
- return _0;
- }
-
- return _1 + new String(Character.toChars(Integer.parseInt(_2, 16)));
- }
- });
- }
-
- public static String replaceOctalEscapes(String text) {
- Pattern p = Pattern.compile("(\\\\*)\\\\([0-3]?[0-7]?[0-7])");
- return StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
- Object doCall(String _0, String _1, String _2) {
- if (isLengthOdd(_1)) {
- return _0;
- }
-
- return _1 + new String(Character.toChars(Integer.parseInt(_2, 8)));
- }
- });
- }
-
- private static Map<Character, Character> STANDARD_ESCAPES = new HashMap<Character, Character>() {
- {
- this.put('b', '\b');
- this.put('t', '\t');
- this.put('n', '\n');
- this.put('f', '\f');
- this.put('r', '\r');
- }
- };
-
- public static String replaceStandardEscapes(String text) {
- Pattern p = Pattern.compile("(\\\\*)\\\\([btnfr\"'])");
-
- String result = StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
- Object doCall(String _0, String _1, String _2) {
- if (isLengthOdd(_1)) {
- return _0;
- }
-
- Character character = STANDARD_ESCAPES.get(_2.charAt(0));
- return _1 + (character != null ? character : _2);
- }
- });
-
- return result.replace("\\\\", "\\");
- }
-
- public static final int NONE_SLASHY = 0;
- public static final int SLASHY = 1;
- public static final int DOLLAR_SLASHY = 2;
-
- public static String replaceEscapes(String text, int slashyType) {
- if (slashyType == SLASHY || slashyType == DOLLAR_SLASHY) {
- text = StringUtils.replaceHexEscapes(text);
- text = StringUtils.replaceLineEscape(text);
-
- if (slashyType == SLASHY) {
- text = text.replace("\\/", "/");
- }
-
- if (slashyType == DOLLAR_SLASHY) {
- text = text.replace("$$", "$");
- text = text.replace("$/", "/");
- }
-
- } else if (slashyType == NONE_SLASHY) {
- text = StringUtils.replaceEscapes(text);
- } else {
- throw new IllegalArgumentException("Invalid slashyType: " + slashyType);
- }
-
- return text;
- }
-
- private static String replaceEscapes(String text) {
- text = text.replace("\\$", "$");
-
- text = StringUtils.replaceLineEscape(text);
-
- return StringUtils.replaceStandardEscapes(replaceHexEscapes(replaceOctalEscapes(text)));
- }
-
- private static String replaceLineEscape(String text) {
- Pattern p = Pattern.compile("(\\\\*)\\\\\r?\n");
- text = StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
- Object doCall(String _0, String _1) {
- if (isLengthOdd(_1)) {
- return _0;
- }
-
- return _1;
- }
- });
-
- return text;
- }
-
- private static boolean isLengthOdd(String str) {
- return null != str && str.length() % 2 == 1;
- }
-
- public static String removeCR(String text) {
- return text.replace("\r\n", "\n");
- }
-
- public static long countChar(String text, char c) {
- return text.chars().filter(e -> c == e).count();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/groovy/blob/73acbcfe/subprojects/groovy-parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy b/subprojects/groovy-parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
deleted file mode 100644
index 480d2ab..0000000
--- a/subprojects/groovy-parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.groovy.parser.antlr4
-
-import org.codehaus.groovy.ast.ClassNode
-import org.codehaus.groovy.ast.FieldNode
-import org.codehaus.groovy.ast.MethodNode
-import org.codehaus.groovy.ast.Parameter
-import org.codehaus.groovy.ast.PropertyNode
-import org.codehaus.groovy.ast.stmt.AssertStatement
-import org.codehaus.groovy.ast.stmt.ExpressionStatement
-import org.codehaus.groovy.syntax.Token
-
-import static org.apache.groovy.parser.antlr4.TestUtils.doTest
-import static org.apache.groovy.parser.antlr4.TestUtils.doRunAndTest
-
-/**
- * Some basic test cases for the new parser
- *
- * @author <a href="mailto:realbluesun@hotmail.com">Daniel.Sun</a>
- * Created on 2016/08/14
- */
-class GroovyParserTest extends GroovyTestCase {
-
- void setUp() {}
-
- void tearDown() {}
-
- void "test groovy core - Comments"() {
- doTest('core/Comments_01.groovy', [ExpressionStatement]);
- doTestAttachedComments();
- }
-
- private static doTestAttachedComments() {
- def (newAST, oldAST) = doTest('core/Comments_02.groovy');
- List<ClassNode> classes = new ArrayList<>(newAST.classes).sort { c1, c2 -> c1.name <=> c2.name };
- List<MethodNode> methods = new ArrayList<>(newAST.methods).sort { m1, m2 -> m1.name <=> m2.name };
-
- assert classes[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test class Comments */'
- assert classes[0].fields[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test Comments.SOME_VAR */'
- assert classes[0].fields[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test Comments.SOME_VAR2 */'
- assert classes[0].fields[2].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
- assert classes[0].fields[3].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
- assert classes[0].declaredConstructors[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test Comments.constructor1 */'
- assert classes[0].methods[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test Comments.m1 */'
- assert classes[0].methods[1].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
- assert classes[0].methods[2].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test Comments.m3 */'
-
- assert classes[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test class InnerClazz */'
- assert classes[1].fields[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test InnerClazz.SOME_VAR3 */'
- assert classes[1].fields[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test InnerClazz.SOME_VAR4 */'
- assert classes[1].methods[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test Comments.m4 */'
- assert classes[1].methods[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test Comments.m5 */'
-
- assert classes[2].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test class InnerEnum */'
- assert classes[2].fields[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * InnerEnum.NEW */'
- assert classes[2].fields[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * InnerEnum.OLD */'
-
- assert classes[3].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
-
- assert classes[4].fields[0].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
-
- assert classes[5].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
-
- assert methods[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') == '/** * test someScriptMethod1 */'
- assert methods[1].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
- }
-
- void "test groovy core - PackageDeclaration"() {
- doTest('core/PackageDeclaration_01.groovy');
- doTest('core/PackageDeclaration_02.groovy');
- doTest('core/PackageDeclaration_03.groovy');
- doTest('core/PackageDeclaration_04.groovy');
- doTest('core/PackageDeclaration_05.groovy');
- doTest('core/PackageDeclaration_06.groovy');
- }
-
- void "test groovy core - ImportDeclaration"() {
- doTest('core/ImportDeclaration_01.groovy');
- doTest('core/ImportDeclaration_02.groovy');
- doTest('core/ImportDeclaration_03.groovy');
- doTest('core/ImportDeclaration_04.groovy');
- doTest('core/ImportDeclaration_05.groovy');
- doTest('core/ImportDeclaration_06.groovy');
- doTest('core/ImportDeclaration_07.groovy');
- doTest('core/ImportDeclaration_08.groovy');
- }
-
- void "test groovy core - Annotation"() {
- doTest('core/Annotation_01.groovy');
- doTest('core/Annotation_02.groovy');
- doTest('core/Annotation_03.groovy');
- doTest('core/Annotation_04.groovy');
- doTest('core/Annotation_05.groovy');
- doTest('core/Annotation_06.groovy');
- doTest('core/Annotation_07.groovy');
- doTest('core/Annotation_08.groovy');
- doTest('core/Annotation_09.groovy');
- doRunAndTest('core/Annotation_10x.groovy');
- }
-
- void "test groovy core - Literal"() {
- doTest('core/Literal_01.groovy');
- doTest('core/Literal_02.groovy', [ExpressionStatement]);
- doTest('core/Literal_03.groovy');
- }
-
- void "test groovy core - GString"() {
- doTest('core/GString_01.groovy');
- doTest('core/GString_02.groovy');
- doTest('core/GString_03.groovy');
- doTest('core/GString_04.groovy');
- doTest('core/GString_05.groovy');
- doTest('core/GString_06.groovy');
- }
-
- void "test groovy core - Closure"() {
- doTest('core/Closure_01.groovy');
- doTest('core/Closure_02.groovy');
- doTest('core/Closure_03.groovy');
- doTest('core/Closure_04.groovy');
- doTest('core/Closure_05.groovy', [Parameter]);
- doTest('core/Closure_06.groovy', [Parameter]);
- doTest('core/Closure_07.groovy', [Parameter]);
- doTest('core/Closure_08.groovy', [Parameter]);
- doTest('core/Closure_09.groovy', [Parameter]);
- doTest('core/Closure_10.groovy', [Parameter]);
- }
-
- void "test groovy core - Lambda"() {
- doRunAndTest('core/Lambda_01x.groovy');
- }
-
- void "test groovy core - MethodReference"() {
- doRunAndTest('core/MethodReference_01x.groovy');
- }
-
- void "test groovy core - MethodPointer"() {
- doRunAndTest('core/MethodPointer_01x.groovy');
- }
-
- void "test groovy core - ElvisAssignment"() {
- doRunAndTest('core/ElvisAssignment_01x.groovy');
- }
-
- void "test groovy core - List"() {
- doTest('core/List_01.groovy');
- }
-
- void "test groovy core - Map"() {
- doTest('core/Map_01.groovy');
- }
-
- void "test groovy core - Expression"() {
- doTest('core/Expression_01.groovy');
- doTest('core/Expression_02.groovy');
- doTest('core/Expression_03.groovy');
- doTest('core/Expression_04.groovy');
- doTest('core/Expression_05.groovy');
- doTest('core/Expression_06.groovy');
- doTest('core/Expression_07.groovy');
- doTest('core/Expression_08.groovy');
- doTest('core/Expression_09.groovy');
- doTest('core/Expression_10.groovy');
- doTest('core/Expression_11.groovy');
- doTest('core/Expression_12.groovy');
- doTest('core/Expression_13.groovy');
- doTest('core/Expression_14.groovy');
- doTest('core/Expression_15.groovy');
- doTest('core/Expression_16.groovy', [Parameter, ExpressionStatement]);
- doTest('core/Expression_17.groovy');
- doTest('core/Expression_18.groovy');
- doTest('core/Expression_19.groovy');
- doTest('core/Expression_20.groovy');
- doRunAndTest('core/Expression_21x.groovy');
- doTest('core/Expression_22x.groovy');
- doRunAndTest('core/Expression_22x.groovy');
- doRunAndTest('core/Expression_23x.groovy');
- }
-
- void "test groovy core - IdenticalOp"() {
- doRunAndTest('core/IdenticalOp_01x.groovy');
- }
-
- void "test groovy core - Assert"() {
- doTest('core/Assert_01.groovy');
- doRunAndTest('core/Assert_02x.groovy');
- doRunAndTest('core/Assert_03x.groovy');
- }
-
- void "test groovy core - IfElse"() {
- doTest('core/IfElse_01.groovy', [AssertStatement]);
- }
-
- void "test groovy core - For"() {
- doTest('core/For_01.groovy', [AssertStatement]);
- doTest('core/For_02.groovy');
- doTest('core/For_03.groovy');
- doRunAndTest('core/For_04x.groovy');
- doRunAndTest('core/For_05x.groovy');
- }
-
- void "test groovy core - While"() {
- doTest('core/While_01.groovy');
- doRunAndTest('core/While_02x.groovy');
- }
-
- void "test groovy core - CodeBlock"() {
- doRunAndTest('core/CodeBlock_01x.groovy');
- }
-
- void "test groovy core - DoWhile"() {
- doRunAndTest('core/DoWhile_01x.groovy');
- doRunAndTest('core/DoWhile_02x.groovy');
- doRunAndTest('core/DoWhile_03x.groovy');
- doRunAndTest('core/DoWhile_04x.groovy');
- }
-
-
- void "test groovy core - TryCatch"() {
- doTest('core/TryCatch_01.groovy');
- }
-
- void "test groovy core - TryWithResources"() {
- doRunAndTest('core/TryWithResources_01x.groovy');
- }
-
- void "test groovy core - SafeIndex"() {
- doRunAndTest('core/SafeIndex_01x.groovy');
- doRunAndTest('core/SafeIndex_02x.groovy');
- doRunAndTest('core/SafeIndex_03x.groovy');
- }
-
- void "test groovy core - NegativeRelationalOperators"() {
- doRunAndTest('core/NegativeRelationalOperators_01x.groovy');
- doRunAndTest('core/NegativeRelationalOperators_02x.groovy');
- }
-
- void "test groovy core - DefaultMethod"() {
- doRunAndTest('core/DefaultMethod_01x.groovy');
- doRunAndTest('core/DefaultMethod_02x.groovy');
- }
-
-
- void "test groovy core - Switch"() {
- doTest('core/Switch_01.groovy');
- }
-
- void "test groovy core - Synchronized"() {
- doTest('core/Synchronized_01.groovy');
- }
-
- void "test groovy core - Return"() {
- doTest('core/Return_01.groovy');
- }
-
- void "test groovy core - Throw"() {
- doTest('core/Throw_01.groovy');
- }
-
- void "test groovy core - Label"() {
- doTest('core/Label_01.groovy');
- }
-
- void "test groovy core - LocalVariableDeclaration"() {
- doTest('core/LocalVariableDeclaration_01.groovy', [Token]); // [class org.codehaus.groovy.syntax.Token][startLine]:: 9 != 8
- }
-
- void "test groovy core - MethodDeclaration"() {
- doTest('core/MethodDeclaration_01.groovy');
- doTest('core/MethodDeclaration_02.groovy');
- }
-
- void "test groovy core - ClassDeclaration"() {
- doTest('core/ClassDeclaration_01.groovy');
- doTest('core/ClassDeclaration_02.groovy');
- doTest('core/ClassDeclaration_03.groovy');
- doTest('core/ClassDeclaration_04.groovy', [PropertyNode, FieldNode]);
- doTest('core/ClassDeclaration_05.groovy', [ExpressionStatement]);
- doTest('core/ClassDeclaration_06.groovy');
- doTest('core/ClassDeclaration_07.groovy');
- }
-
- void "test groovy core - InterfaceDeclaration"() {
- doTest('core/InterfaceDeclaration_01.groovy');
- doTest('core/InterfaceDeclaration_02.groovy');
- doTest('core/InterfaceDeclaration_03.groovy');
- }
-
- void "test groovy core - EnumDeclaration"() {
- doTest('core/EnumDeclaration_01.groovy');
- doTest('core/EnumDeclaration_02.groovy', [ExpressionStatement]);
- doTest('core/EnumDeclaration_03.groovy');
- doTest('core/EnumDeclaration_04.groovy');
- doTest('core/EnumDeclaration_05.groovy');
- }
-
- void "test groovy core - TraitDeclaration"() {
- doTest('core/TraitDeclaration_01.groovy');
- doTest('core/TraitDeclaration_02.groovy');
- doTest('core/TraitDeclaration_03.groovy');
- doTest('core/TraitDeclaration_04.groovy', [PropertyNode, FieldNode]);
- doTest('core/TraitDeclaration_05.groovy');
- }
-
- void "test groovy core - AnnotationDeclaration"() {
- doTest('core/AnnotationDeclaration_01.groovy');
- }
-
- void "test groovy core - Command"() {
- doTest('core/Command_01.groovy');
- doTest('core/Command_02.groovy');
- doTest('core/Command_03.groovy', [ExpressionStatement, Parameter]);
- doTest('core/Command_04.groovy', [ExpressionStatement]);
- doTest('core/Command_05.groovy');
- doRunAndTest('core/Command_06x.groovy')
- }
-
- void "test groovy core - Unicode"() {
- doTest('core/Unicode_01.groovy');
- }
-
- void "test groovy core - BreakingChanges"() {
- doRunAndTest('core/BreakingChange_01x.groovy');
- doRunAndTest('core/BreakingChange_02x.groovy');
- doRunAndTest('core/BreakingChange_03x.groovy');
- doRunAndTest('core/BreakingChange_04x.groovy');
- }
-
- void "test groovy core - Array"() {
- doRunAndTest('core/Array_01x.groovy');
- }
-
- void "test groovy core - Groovydoc"() {
- doRunAndTest('core/Groovydoc_01x.groovy');
- }
-
- void "test groovy core - Script"() {
- doRunAndTest('core/Script_01x.groovy');
- }
-
- void "test groovy core - BUG"() {
- doRunAndTest('bugs/BUG-GROOVY-4757.groovy');
- doRunAndTest('bugs/GROOVY-3898.groovy');
- doRunAndTest('bugs/BUG-GROOVY-5652.groovy');
- doRunAndTest('bugs/BUG-GROOVY-4762.groovy');
- doRunAndTest('bugs/BUG-GROOVY-4438.groovy');
- doRunAndTest('bugs/BUG-GROOVY-6038.groovy');
- doRunAndTest('bugs/BUG-GROOVY-2324.groovy');
- doTest('bugs/BUG-GROOVY-8161.groovy');
- }
-}