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/04/11 01:37:37 UTC

[01/50] groovy git commit: Add test case for GROOVY-4757: Can't compile method with generic signatures and default visibility access

Repository: groovy
Updated Branches:
  refs/heads/master e0d559663 -> a3f8671b5


Add test case for GROOVY-4757: Can't compile method with generic signatures and default visibility access


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/348465a1
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/348465a1
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/348465a1

Branch: refs/heads/master
Commit: 348465a1b193703c43aafeaabf2b286657d8493b
Parents: 1cb1260
Author: sunlan <su...@apache.org>
Authored: Thu Jan 19 18:53:34 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Thu Jan 19 18:53:34 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/GroovyParserTest.groovy | 5 +++++
 .../src/test/resources/bugs/BUG-GROOVY-4757.groovy          | 9 +++++++++
 2 files changed, 14 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/348465a1/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
index 4344f30..3f3a63c 100644
--- 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
@@ -325,4 +325,9 @@ class GroovyParserTest extends GroovyTestCase {
     void "test groovy core - Unicode"() {
         doTest('core/Unicode_01.groovy');
     }
+
+    void "test groovy core - BUG"() {
+        doRunAndTest('bugs/BUG-GROOVY-4757.groovy');
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/348465a1/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4757.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4757.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4757.groovy
new file mode 100644
index 0000000..cf2da99
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4757.groovy
@@ -0,0 +1,9 @@
+package bugs
+
+class Foo {
+    <T extends Object> T foo(T t) {
+        return t
+    }
+}
+
+assert 'abc' == new Foo().foo('abc')
\ No newline at end of file


[23/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/5a773a8a
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/5a773a8a
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/5a773a8a

Branch: refs/heads/master
Commit: 5a773a8a6283a793732f32197d53a39d5995f3e4
Parents: 7d0c690
Author: sunlan <su...@apache.org>
Authored: Fri Jan 27 01:02:02 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Jan 27 01:02:02 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/AstBuilder.java     |  2 ++
 .../apache/groovy/parser/antlr4/util/StringUtils.java   | 12 ++++++++----
 2 files changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/5a773a8a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index d46019c..522ca5b 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -3844,6 +3844,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         );
     }
 
+    /*
     private org.codehaus.groovy.syntax.Token createGroovyToken(String text, int startLine, int startColumn) {
         return new org.codehaus.groovy.syntax.Token(
                 Types.lookup(text, Types.ANY),
@@ -3852,6 +3853,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
                 startColumn
         );
     }
+    */
 
     /**
      * set the script source position

http://git-wip-us.apache.org/repos/asf/groovy/blob/5a773a8a/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
index 1c16679..739a737 100644
--- 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
@@ -36,7 +36,7 @@ public class StringUtils {
         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 (null != _1 && _1.length() % 2 == 1) {
+				if (isLengthOdd(_1)) {
 					return _0;
 				}
 
@@ -49,7 +49,7 @@ public class StringUtils {
 	    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 (null != _1 && _1.length() % 2 == 1) {
+				if (isLengthOdd(_1)) {
 					return _0;
 				}
 
@@ -73,7 +73,7 @@ public class StringUtils {
 
 	    String result = StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
 							Object doCall(String _0, String _1, String _2) {
-								if (null != _1 && _1.length() % 2 == 1) {
+								if (isLengthOdd(_1)) {
 									return _0;
 								}
 
@@ -124,7 +124,7 @@ public class StringUtils {
 		Pattern p = Pattern.compile("(\\\\*)\\\\\r?\n");
 		text = StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
 			Object doCall(String _0, String _1) {
-				if (null != _1 && _1.length() % 2 == 1) {
+				if (isLengthOdd(_1)) {
 					return _0;
 				}
 
@@ -135,6 +135,10 @@ public class StringUtils {
 		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");
     }


[27/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/4e3b987a
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/4e3b987a
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/4e3b987a

Branch: refs/heads/master
Commit: 4e3b987aae15597858825bad4b58b3bf1217ce05
Parents: 35ec215
Author: sunlan <su...@apache.org>
Authored: Sat Jan 28 22:29:29 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sat Jan 28 22:29:29 2017 +0800

----------------------------------------------------------------------
 .../groovy/classgen/asm/StatementWriter.java      | 18 ++++++++++--------
 .../apache/groovy/parser/antlr4/AstBuilder.java   | 15 +--------------
 2 files changed, 11 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/4e3b987a/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java b/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java
index c36916f..719c4e9 100644
--- a/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java
+++ b/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java
@@ -150,6 +150,14 @@ public class StatementWriter {
         compileStack.pop();
     }
 
+    private void visitExpressionOfLoopStatement(Expression expression) {
+        if (expression instanceof ClosureListExpression) {
+            ((ClosureListExpression) expression).getExpressions().forEach(this::visitExpressionOrStatement);
+        } else {
+            visitExpressionOrStatement(expression);
+        }
+    }
+
     protected void writeForLoopWithClosureList(ForStatement loop) {
         controller.getAcg().onLineNumber(loop,"visitForLoop");
         writeStatementLabel(loop);
@@ -168,13 +176,7 @@ public class StatementWriter {
 
         // visit init
         for (int i = 0; i < condIndex; i++) {
-            Expression expression = expressions.get(i);
-
-            if (expression instanceof ClosureListExpression) {
-                ((ClosureListExpression) expression).getExpressions().forEach(this::visitExpressionOrStatement);
-            } else {
-                visitExpressionOrStatement(expression);
-            }
+            visitExpressionOfLoopStatement(expressions.get(i));
         }
 
         Label continueLabel = controller.getCompileStack().getContinueLabel();
@@ -199,7 +201,7 @@ public class StatementWriter {
         // visit increment
         mv.visitLabel(continueLabel);
         for (int i = condIndex + 1; i < size; i++) {
-            visitExpressionOrStatement(expressions.get(i));
+            visitExpressionOfLoopStatement(expressions.get(i));
         }
 
         // jump to test the condition again

http://git-wip-us.apache.org/repos/asf/groovy/blob/4e3b987a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 5ba04de..39eb932 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -443,20 +443,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         if (expressionList.size() == 1) {
             return this.configureAST(expressionList.get(0), ctx);
         } else {
-            Statement code =
-                    this.createBlockStatement(
-                            expressionList.stream()
-                                    .map(e -> this.configureAST(new ExpressionStatement(e), e))
-                                    .collect(Collectors.toList()));
-            return this.configureAST(
-                    new MethodCallExpression(
-                            this.configureAST(
-                                    new ClosureExpression(Parameter.EMPTY_ARRAY, code),
-                                    ctx),
-                            CALL_STR,
-                            new ArgumentListExpression()
-                    ),
-                    ctx);
+            return this.configureAST(new ClosureListExpression(expressionList), ctx);
         }
     }
 


[22/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/7d0c6909
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/7d0c6909
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/7d0c6909

Branch: refs/heads/master
Commit: 7d0c69092fea12f2e93e5f367120afb081877e76
Parents: a5f4eba
Author: sunlan <su...@apache.org>
Authored: Thu Jan 26 01:04:09 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Thu Jan 26 01:04:09 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/AstBuilder.java   | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/7d0c6909/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 7f81e19..d46019c 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -139,7 +139,6 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import static org.apache.groovy.parser.antlr4.GroovyLangParser.*;
-import static org.apache.groovy.parser.antlr4.GroovyParser.ElementValuesContext;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
 import static org.codehaus.groovy.runtime.DefaultGroovyMethods.last;
 
@@ -496,8 +495,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
                         this.visitFinallyBlock(ctx.finallyBlock()));
 
         if (asBoolean(ctx.resources())) {
-            this.visitResources(ctx.resources()).stream()
-                    .forEach(tryCatchStatement::addResource);
+            this.visitResources(ctx.resources()).forEach(tryCatchStatement::addResource);
         }
 
         ctx.catchClause().stream().map(this::visitCatchClause)
@@ -626,7 +624,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         List<CaseStatement> caseStatementList = new LinkedList<>();
         List<Statement> defaultStatementList = new LinkedList<>();
 
-        statementList.stream().forEach(e -> {
+        statementList.forEach(e -> {
             if (e instanceof CaseStatement) {
                 caseStatementList.add((CaseStatement) e);
             } else if (isTrue(e, IS_SWITCH_DEFAULT)) {
@@ -980,7 +978,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             this.visitEnumConstants(ctx.enumConstants());
         }
 
-        ctx.classBodyDeclaration().stream().forEach(e -> {
+        ctx.classBodyDeclaration().forEach(e -> {
             e.putNodeMetaData(CLASS_DECLARATION_CLASS_NODE, classNode);
             this.visitClassBodyDeclaration(e);
         });
@@ -1274,7 +1272,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
             modifierManager.processMethodNode(methodNode);
         }
-        anonymousInnerClassList.stream().forEach(e -> e.setEnclosingMethod(methodNode));
+        anonymousInnerClassList.forEach(e -> e.setEnclosingMethod(methodNode));
 
         methodNode.setGenericsTypes(this.visitTypeParameters(ctx.typeParameters()));
         methodNode.setSyntheticPublic(
@@ -1403,7 +1401,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         ClassNode classNode = ctx.getNodeMetaData(CLASS_DECLARATION_CLASS_NODE);
 
         if (asBoolean(classNode)) {
-            declarationExpressionList.stream().forEach(e -> {
+            declarationExpressionList.forEach(e -> {
                 VariableExpression variableExpression = (VariableExpression) e.getLeftExpression();
 
                 int modifiers = modifierManager.getClassMemberModifiersOpValue();
@@ -1459,7 +1457,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             return null;
         }
 
-        declarationExpressionList.stream().forEach(e -> {
+        declarationExpressionList.forEach(e -> {
             VariableExpression variableExpression = (VariableExpression) e.getLeftExpression();
 
             modifierManager.processVariableExpression(variableExpression);
@@ -4080,14 +4078,14 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         public List<ExpressionStatement> getDeclarationStatements() {
             List<String> declarationListStatementLabels = this.getStatementLabels();
 
-            this.declarationStatements.stream().forEach(e -> {
+            this.declarationStatements.forEach(e -> {
                 if (asBoolean((Object) declarationListStatementLabels)) {
                     // clear existing statement labels before setting labels
                     if (asBoolean((Object) e.getStatementLabels())) {
                         e.getStatementLabels().clear();
                     }
 
-                    declarationListStatementLabels.stream().forEach(e::addStatementLabel);
+                    declarationListStatementLabels.forEach(e::addStatementLabel);
                 }
             });
 


[37/50] groovy git commit: Refine the verification for assignments

Posted by pa...@apache.org.
Refine the verification for assignments


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/fc490b97
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/fc490b97
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/fc490b97

Branch: refs/heads/master
Commit: fc490b9793d3b6210977df20668d876258350db8
Parents: b017a53
Author: sunlan <su...@apache.org>
Authored: Tue Mar 28 00:34:53 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Mar 28 00:34:53 2017 +0800

----------------------------------------------------------------------
 .../classgen/ClassCompletionVerifier.java       | 23 +++-----------------
 .../groovy/classgen/VariableScopeVisitor.java   | 22 +++----------------
 src/main/org/codehaus/groovy/syntax/Types.java  |  2 ++
 3 files changed, 8 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/fc490b97/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java b/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
index a8f4948..4319f2a 100644
--- a/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
+++ b/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
@@ -510,26 +510,9 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
         }
         super.visitBinaryExpression(expression);
 
-        switch (expression.getOperation().getType()) {
-            case Types.EQUAL: // = assignment
-            case Types.BITWISE_AND_EQUAL:
-            case Types.BITWISE_OR_EQUAL:
-            case Types.BITWISE_XOR_EQUAL:
-            case Types.PLUS_EQUAL:
-            case Types.MINUS_EQUAL:
-            case Types.MULTIPLY_EQUAL:
-            case Types.DIVIDE_EQUAL:
-            case Types.INTDIV_EQUAL:
-            case Types.MOD_EQUAL:
-            case Types.POWER_EQUAL:
-            case Types.LEFT_SHIFT_EQUAL:
-            case Types.RIGHT_SHIFT_EQUAL:
-            case Types.RIGHT_SHIFT_UNSIGNED_EQUAL:
-                checkFinalFieldAccess(expression.getLeftExpression());
-                checkSuperOrThisOnLHS(expression.getLeftExpression());
-                break;
-            default:
-                break;
+        if (Types.ASSIGNMENT_SET.contains(expression.getOperation().getType())) {
+            checkFinalFieldAccess(expression.getLeftExpression());
+            checkSuperOrThisOnLHS(expression.getLeftExpression());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/fc490b97/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java b/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java
index 9085eb7..ad9dd76 100644
--- a/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java
+++ b/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java
@@ -347,25 +347,9 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
     @Override
     public void visitBinaryExpression(BinaryExpression be) {
         super.visitBinaryExpression(be);
-        switch (be.getOperation().getType()) {
-            case Types.EQUAL: // = assignment
-            case Types.BITWISE_AND_EQUAL:
-            case Types.BITWISE_OR_EQUAL:
-            case Types.BITWISE_XOR_EQUAL:
-            case Types.PLUS_EQUAL:
-            case Types.MINUS_EQUAL:
-            case Types.MULTIPLY_EQUAL:
-            case Types.DIVIDE_EQUAL:
-            case Types.INTDIV_EQUAL:
-            case Types.MOD_EQUAL:
-            case Types.POWER_EQUAL:
-            case Types.LEFT_SHIFT_EQUAL:
-            case Types.RIGHT_SHIFT_EQUAL:
-            case Types.RIGHT_SHIFT_UNSIGNED_EQUAL:
-                checkFinalFieldAccess(be.getLeftExpression());
-                break;
-            default:
-                break;
+
+        if (Types.ASSIGNMENT_SET.contains(be.getOperation().getType())) {
+            checkFinalFieldAccess(be.getLeftExpression());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/fc490b97/src/main/org/codehaus/groovy/syntax/Types.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/syntax/Types.java b/src/main/org/codehaus/groovy/syntax/Types.java
index 534c5ea..f03fc18 100644
--- a/src/main/org/codehaus/groovy/syntax/Types.java
+++ b/src/main/org/codehaus/groovy/syntax/Types.java
@@ -20,6 +20,7 @@ package org.codehaus.groovy.syntax;
 
 import org.codehaus.groovy.GroovyBugError;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -1446,4 +1447,5 @@ public class Types
         addDescription( SWITCH_ENTRIES              , "<valid in a switch body>"     );
     }
 
+    public static final Set<Integer> ASSIGNMENT_SET = new HashSet<Integer>(Arrays.asList(EQUAL, BITWISE_AND_EQUAL, BITWISE_OR_EQUAL, BITWISE_XOR_EQUAL, PLUS_EQUAL, MINUS_EQUAL, MULTIPLY_EQUAL, DIVIDE_EQUAL, INTDIV_EQUAL, MOD_EQUAL, POWER_EQUAL, LEFT_SHIFT_EQUAL, RIGHT_SHIFT_EQUAL, RIGHT_SHIFT_UNSIGNED_EQUAL, ELVIS_EQUAL));
 }


[17/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/956582d7
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/956582d7
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/956582d7

Branch: refs/heads/master
Commit: 956582d7f8a464b07b610bb7f6976b1e665ee299
Parents: e553c91
Author: sunlan <su...@apache.org>
Authored: Tue Jan 24 21:27:10 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Jan 24 21:27:10 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/GroovyParser.g4      | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/956582d7/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index db105c9..9541598 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -124,8 +124,7 @@ options {
 
 // starting point for parsing a groovy file
 compilationUnit
-    :
-        nls
+    :   nls
         (packageDeclaration (sep | EOF))? (statement (sep | EOF))* EOF
     ;
 
@@ -1083,9 +1082,11 @@ mapEntryLabel
     ;
 
 creator
-    :   createdName nls arguments anonymousInnerClassDeclaration[0]?
-    |   createdName (LBRACK expression RBRACK)+ (b+=LBRACK RBRACK)*
-    |   createdName (b+=LBRACK RBRACK)+ arrayInitializer
+    :   createdName
+        (   nls arguments anonymousInnerClassDeclaration[0]?
+        |   (LBRACK expression RBRACK)+ (b+=LBRACK RBRACK)*
+        |   (b+=LBRACK RBRACK)+ arrayInitializer
+        )
     ;
 
 arrayInitializer


[46/50] groovy git commit: Refine the runtime Groovydoc

Posted by pa...@apache.org.
Refine the runtime Groovydoc


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/7eab98eb
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/7eab98eb
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/7eab98eb

Branch: refs/heads/master
Commit: 7eab98eb9f22a3aa6985b9528dc61c63144b86f0
Parents: 0169177
Author: sunlan <su...@apache.org>
Authored: Mon Apr 10 15:34:57 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Mon Apr 10 15:34:57 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyParser.g4 | 18 +++++-----
 .../groovy/parser/antlr4/GroovydocManager.java  | 35 ++++++++------------
 2 files changed, 23 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/7eab98eb/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index a328054..992b63f 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -841,8 +841,8 @@ expression
         right=expression                                                                    #shiftExprAlt
 
     // boolean relational expressions (level 7)
-    |   left=expression nls op=(AS | INSTANCEOF | NOT_INSTANCEOF) nls type                      #relationalExprAlt
-    |   left=expression nls op=(LE | GE | GT | LT | IN | NOT_IN)  nls right=expression          #relationalExprAlt
+    |   left=expression nls op=(AS | INSTANCEOF | NOT_INSTANCEOF) nls type                  #relationalExprAlt
+    |   left=expression nls op=(LE | GE | GT | LT | IN | NOT_IN)  nls right=expression      #relationalExprAlt
 
     // equality/inequality (==/!=) (level 8)
     |   left=expression nls
@@ -857,22 +857,22 @@ expression
     // regex find and match (=~ and ==~) (level 8.5)
     // jez: moved =~ closer to precedence of == etc, as...
     // 'if (foo =~ "a.c")' is very close in intent to 'if (foo == "abc")'
-    |   left=expression nls op=(REGEX_FIND | REGEX_MATCH) nls right=expression                  #regexExprAlt
+    |   left=expression nls op=(REGEX_FIND | REGEX_MATCH) nls right=expression              #regexExprAlt
 
     // bitwise or non-short-circuiting and (&)  (level 9)
-    |   left=expression nls op=BITAND nls right=expression                                      #andExprAlt
+    |   left=expression nls op=BITAND nls right=expression                                  #andExprAlt
 
     // exclusive or (^)  (level 10)
-    |   left=expression nls op=XOR nls right=expression                                         #exclusiveOrExprAlt
+    |   left=expression nls op=XOR nls right=expression                                     #exclusiveOrExprAlt
 
     // bitwise or non-short-circuiting or (|)  (level 11)
-    |   left=expression nls op=BITOR nls right=expression                                       #inclusiveOrExprAlt
+    |   left=expression nls op=BITOR nls right=expression                                   #inclusiveOrExprAlt
 
     // logical and (&&)  (level 12)
-    |   left=expression nls op=AND nls right=expression                                         #logicalAndExprAlt
+    |   left=expression nls op=AND nls right=expression                                     #logicalAndExprAlt
 
     // logical or (||)  (level 13)
-    |   left=expression nls op=OR nls right=expression                                          #logicalOrExprAlt
+    |   left=expression nls op=OR nls right=expression                                      #logicalOrExprAlt
 
     // conditional test (level 14)
     |   <assoc=right> con=expression nls
@@ -883,7 +883,7 @@ expression
 
     // assignment expression (level 15)
     // "(a) = [1]" is a special case of multipleAssignmentExprAlt, it will be handle by assignmentExprAlt
-    |   <assoc=right> left=variableNames nls op=ASSIGN nls right=statementExpression            #multipleAssignmentExprAlt
+    |   <assoc=right> left=variableNames nls op=ASSIGN nls right=statementExpression        #multipleAssignmentExprAlt
     |   <assoc=right> left=expression nls
                         op=(   ASSIGN
                            |   ADD_ASSIGN

http://git-wip-us.apache.org/repos/asf/groovy/blob/7eab98eb/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
index 12d08c9..092d73b 100644
--- 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
@@ -28,7 +28,7 @@ public class GroovydocManager {
     private static final String TRUE_STR = "true";
     private static final boolean EXTRACTING_DOC_COMMENT_ENABLED;
     public static final String VALUE = "value";
-    public static final String GROOVYDOC_PATTERN = "(?s)\\s*/[*][*]\\s+(\\s+[*]\\s*)*@Groovydoc.+?[*]/\\s*";
+    public static final String RUNTIME_GROOVYDOC_PATTERN = "(?s)/[*][*]\\s+(\\s+[*]\\s*)*@Groovydoc\\b.+?[*]/";
     private AstBuilder astBuilder;
 
     static {
@@ -55,41 +55,35 @@ public class GroovydocManager {
             return;
         }
 
-        attachDocCommentAsMetaData(node, ctx);
-        attachGroovydocAnnotation(node, ctx);
+        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, GroovyParser.GroovyParserRuleContext ctx) {
+    private void attachDocCommentAsMetaData(ASTNode node, String docCommentNodeText) {
         if (!EXTRACTING_DOC_COMMENT_ENABLED) {
             return;
         }
 
-        String docCommentNodeText = this.findDocCommentByNode(ctx);
-
-        if (!asBoolean((Object) docCommentNodeText)) {
-            return;
-        }
-
         node.putNodeMetaData(DOC_COMMENT, docCommentNodeText);
     }
 
-    private void attachGroovydocAnnotation(ASTNode node, GroovyParser.GroovyParserRuleContext ctx) {
+    /*
+     * Attach Groovydoc annotation to the target element
+     */
+    private void attachGroovydocAnnotation(ASTNode node, String docCommentNodeText) {
         if (!(node instanceof AnnotatedNode)) {
             return;
         }
 
-        String docCommentNodeText;
-
-        if (EXTRACTING_DOC_COMMENT_ENABLED) { // try to reuse the result of extracting doc comment for better performance
-            docCommentNodeText = node.getNodeMetaData(DOC_COMMENT);
-        } else {
-            docCommentNodeText = this.findDocCommentByNode(ctx);
-        }
-
-        if (null == docCommentNodeText || !docCommentNodeText.matches(GROOVYDOC_PATTERN)) {
+        if (!docCommentNodeText.matches(RUNTIME_GROOVYDOC_PATTERN)) {
             return;
         }
 
@@ -99,7 +93,6 @@ public class GroovydocManager {
         annotatedNode.addAnnotation(annotationNode);
     }
 
-
     private String findDocCommentByNode(ParserRuleContext node) {
         if (!asBoolean(node)) {
             return null;


[38/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a1d5b6a2
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a1d5b6a2
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a1d5b6a2

Branch: refs/heads/master
Commit: a1d5b6a2cee1f0f80941bffb159a52175f3e09f8
Parents: fc490b9
Author: sunlan <su...@apache.org>
Authored: Tue Mar 28 09:18:48 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Mar 28 09:18:48 2017 +0800

----------------------------------------------------------------------
 .../org/codehaus/groovy/classgen/ClassCompletionVerifier.java    | 2 +-
 src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java  | 2 +-
 src/main/org/codehaus/groovy/syntax/Types.java                   | 4 ++++
 3 files changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/a1d5b6a2/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java b/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
index 4319f2a..41b96c2 100644
--- a/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
+++ b/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
@@ -510,7 +510,7 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
         }
         super.visitBinaryExpression(expression);
 
-        if (Types.ASSIGNMENT_SET.contains(expression.getOperation().getType())) {
+        if (Types.isAssignment(expression.getOperation().getType())) {
             checkFinalFieldAccess(expression.getLeftExpression());
             checkSuperOrThisOnLHS(expression.getLeftExpression());
         }

http://git-wip-us.apache.org/repos/asf/groovy/blob/a1d5b6a2/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java b/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java
index ad9dd76..7a99014 100644
--- a/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java
+++ b/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java
@@ -348,7 +348,7 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
     public void visitBinaryExpression(BinaryExpression be) {
         super.visitBinaryExpression(be);
 
-        if (Types.ASSIGNMENT_SET.contains(be.getOperation().getType())) {
+        if (Types.isAssignment(be.getOperation().getType())) {
             checkFinalFieldAccess(be.getLeftExpression());
         }
     }

http://git-wip-us.apache.org/repos/asf/groovy/blob/a1d5b6a2/src/main/org/codehaus/groovy/syntax/Types.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/syntax/Types.java b/src/main/org/codehaus/groovy/syntax/Types.java
index f03fc18..7265009 100644
--- a/src/main/org/codehaus/groovy/syntax/Types.java
+++ b/src/main/org/codehaus/groovy/syntax/Types.java
@@ -1448,4 +1448,8 @@ public class Types
     }
 
     public static final Set<Integer> ASSIGNMENT_SET = new HashSet<Integer>(Arrays.asList(EQUAL, BITWISE_AND_EQUAL, BITWISE_OR_EQUAL, BITWISE_XOR_EQUAL, PLUS_EQUAL, MINUS_EQUAL, MULTIPLY_EQUAL, DIVIDE_EQUAL, INTDIV_EQUAL, MOD_EQUAL, POWER_EQUAL, LEFT_SHIFT_EQUAL, RIGHT_SHIFT_EQUAL, RIGHT_SHIFT_UNSIGNED_EQUAL, ELVIS_EQUAL));
+
+    public static boolean isAssignment(Integer type) {
+        return ASSIGNMENT_SET.contains(type);
+    }
 }


[26/50] groovy git commit: Make for loop statement conform to JLS further

Posted by pa...@apache.org.
Make for loop statement conform to JLS further


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/35ec2156
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/35ec2156
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/35ec2156

Branch: refs/heads/master
Commit: 35ec2156e3356f85a666c71ba3d3df3bf74c81ae
Parents: fd88412
Author: sunlan <su...@apache.org>
Authored: Sat Jan 28 21:39:32 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sat Jan 28 21:39:32 2017 +0800

----------------------------------------------------------------------
 .../groovy/classgen/asm/StatementWriter.java    | 37 ++++++++++++++++--
 .../apache/groovy/parser/antlr4/AstBuilder.java |  7 ++--
 .../parser/antlr4/GroovyParserTest.groovy       |  1 +
 .../src/test/resources/core/For_04x.groovy      | 40 +++++++++++++++++---
 .../src/test/resources/core/For_05x.groovy      | 22 +++++++++++
 5 files changed, 94 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/35ec2156/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java b/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java
index 4ff1a99..c36916f 100644
--- a/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java
+++ b/src/main/org/codehaus/groovy/classgen/asm/StatementWriter.java
@@ -21,8 +21,31 @@ package org.codehaus.groovy.classgen.asm;
 import org.codehaus.groovy.ast.ClassHelper;
 import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.expr.*;
-import org.codehaus.groovy.ast.stmt.*;
+import org.codehaus.groovy.ast.expr.ArgumentListExpression;
+import org.codehaus.groovy.ast.expr.BooleanExpression;
+import org.codehaus.groovy.ast.expr.ClosureListExpression;
+import org.codehaus.groovy.ast.expr.ConstantExpression;
+import org.codehaus.groovy.ast.expr.EmptyExpression;
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.stmt.AssertStatement;
+import org.codehaus.groovy.ast.stmt.BlockStatement;
+import org.codehaus.groovy.ast.stmt.BreakStatement;
+import org.codehaus.groovy.ast.stmt.CaseStatement;
+import org.codehaus.groovy.ast.stmt.CatchStatement;
+import org.codehaus.groovy.ast.stmt.ContinueStatement;
+import org.codehaus.groovy.ast.stmt.DoWhileStatement;
+import org.codehaus.groovy.ast.stmt.EmptyStatement;
+import org.codehaus.groovy.ast.stmt.ExpressionStatement;
+import org.codehaus.groovy.ast.stmt.ForStatement;
+import org.codehaus.groovy.ast.stmt.IfStatement;
+import org.codehaus.groovy.ast.stmt.ReturnStatement;
+import org.codehaus.groovy.ast.stmt.Statement;
+import org.codehaus.groovy.ast.stmt.SwitchStatement;
+import org.codehaus.groovy.ast.stmt.SynchronizedStatement;
+import org.codehaus.groovy.ast.stmt.ThrowStatement;
+import org.codehaus.groovy.ast.stmt.TryCatchStatement;
+import org.codehaus.groovy.ast.stmt.WhileStatement;
 import org.codehaus.groovy.classgen.asm.CompileStack.BlockRecorder;
 import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
@@ -137,7 +160,7 @@ public class StatementWriter {
         ClosureListExpression clExpr = (ClosureListExpression) loop.getCollectionExpression();
         controller.getCompileStack().pushVariableScope(clExpr.getVariableScope());
 
-        List expressions = clExpr.getExpressions();
+        List<Expression> expressions = clExpr.getExpressions();
         int size = expressions.size();
 
         // middle element is condition, lower half is init, higher half is increment
@@ -145,7 +168,13 @@ public class StatementWriter {
 
         // visit init
         for (int i = 0; i < condIndex; i++) {
-            visitExpressionOrStatement(expressions.get(i));
+            Expression expression = expressions.get(i);
+
+            if (expression instanceof ClosureListExpression) {
+                ((ClosureListExpression) expression).getExpressions().forEach(this::visitExpressionOrStatement);
+            } else {
+                visitExpressionOrStatement(expression);
+            }
         }
 
         Label continueLabel = controller.getCompileStack().getContinueLabel();

http://git-wip-us.apache.org/repos/asf/groovy/blob/35ec2156/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 7f41d00..5ba04de 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -412,7 +412,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         if (asBoolean(ctx.localVariableDeclaration())) {
             DeclarationListStatement declarationListStatement = this.visitLocalVariableDeclaration(ctx.localVariableDeclaration());
-
             List<?> declarationExpressionList = declarationListStatement.getDeclarationExpressions();
 
             if (declarationExpressionList.size() == 1) {
@@ -423,7 +422,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         }
 
         if (asBoolean(ctx.expressionList())) {
-            return this.convertExpressionList(ctx.expressionList());
+            return this.translateExpressionList(ctx.expressionList());
         }
 
         throw createParsingFailedException("Unsupported for init: " + ctx.getText(), ctx);
@@ -435,10 +434,10 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             return EmptyExpression.INSTANCE;
         }
 
-        return this.convertExpressionList(ctx.expressionList());
+        return this.translateExpressionList(ctx.expressionList());
     }
 
-    private Expression convertExpressionList(ExpressionListContext ctx) {
+    private Expression translateExpressionList(ExpressionListContext ctx) {
         List<Expression> expressionList = this.visitExpressionList(ctx);
 
         if (expressionList.size() == 1) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/35ec2156/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
index 9c05273..65a9099 100644
--- 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
@@ -209,6 +209,7 @@ class GroovyParserTest extends GroovyTestCase {
         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"() {

http://git-wip-us.apache.org/repos/asf/groovy/blob/35ec2156/subprojects/groovy-parser-antlr4/src/test/resources/core/For_04x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/For_04x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/For_04x.groovy
index cdad5fc..1afb389 100644
--- a/subprojects/groovy-parser-antlr4/src/test/resources/core/For_04x.groovy
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/For_04x.groovy
@@ -1,6 +1,36 @@
-int result = 0
-for ((i, j) = [0, 0]; i < 5 && j < 5; i = i + 2, j++) {
-    result += i;
-    result += j;
+import groovy.transform.CompileStatic
+
+@CompileStatic
+def testCS() {
+    int result = 0
+    for (def (int i, int j) = [0, 0]; i < 5 && j < 5; i = i + 2, j++) {
+        result += i;
+        result += j;
+    }
+    assert 9 == result
+
+    result = 0
+    for (int i = 0, j = 0; i < 5 && j < 5; i = i + 2, j++) {
+        result += i;
+        result += j;
+    }
+    assert 9 == result
 }
-assert 9 == result
+testCS()
+
+def test() {
+    int result = 0
+    for ((i, j) = [0, 0]; i < 5 && j < 5; i = i + 2, j++) {
+        result += i;
+        result += j;
+    }
+    assert 9 == result
+
+    result = 0
+    for (int i = 0, j = 0; i < 5 && j < 5; i = i + 2, j++) {
+        result += i;
+        result += j;
+    }
+    assert 9 == result
+}
+test()

http://git-wip-us.apache.org/repos/asf/groovy/blob/35ec2156/subprojects/groovy-parser-antlr4/src/test/resources/core/For_05x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/For_05x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/For_05x.groovy
new file mode 100644
index 0000000..fe55805
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/For_05x.groovy
@@ -0,0 +1,22 @@
+import groovy.transform.CompileStatic
+
+@CompileStatic
+def testCS() {
+    int result = 0
+    for (int i = 0, n = 5; i < n; i++) {
+        result += i
+    }
+
+    assert 10 == result
+}
+testCS();
+
+def test() {
+    int result = 0
+    for (int i = 0, n = 5; i < n; i++) {
+        result += i
+    }
+
+    assert 10 == result
+}
+test();


[14/50] groovy git commit: Add a test case for GROOVY-5318: generic types in fully-qualified class names parsing error

Posted by pa...@apache.org.
Add a test case for GROOVY-5318: generic types in fully-qualified class names parsing error


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/452e4177
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/452e4177
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/452e4177

Branch: refs/heads/master
Commit: 452e417750d95961368f607644ab2fdf8dc0c5e0
Parents: 65c2bf5
Author: sunlan <su...@apache.org>
Authored: Tue Jan 24 14:19:26 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Jan 24 14:19:26 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy       | 4 ++++
 .../src/test/resources/bugs/BUG-GROOVY-5318.groovy               | 1 +
 2 files changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/452e4177/subprojects/groovy-parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy b/subprojects/groovy-parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy
index 787b313..c6c0b62 100644
--- a/subprojects/groovy-parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy
+++ b/subprojects/groovy-parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/SyntaxErrorTest.groovy
@@ -121,6 +121,10 @@ class SyntaxErrorTest extends GroovyTestCase {
         TestUtils.doRunAndShouldFail('fail/AbstractMethod_06x.groovy');
     }
 
+    void "test groovy core - BUGs"() {
+        TestUtils.doRunAndShouldFail('bugs/BUG-GROOVY-5318.groovy');
+    }
+
     void "test groovy core - DoWhile"() {
         TestUtils.doRunAndShouldFail('fail/DoWhile_01x.groovy');
     }

http://git-wip-us.apache.org/repos/asf/groovy/blob/452e4177/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-5318.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-5318.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-5318.groovy
new file mode 100644
index 0000000..089e97b
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-5318.groovy
@@ -0,0 +1 @@
+def a= new java.util<Integer>.ArrayList<ArrayList<Integer>>()
\ No newline at end of file


[39/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/4fb80a1c
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/4fb80a1c
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/4fb80a1c

Branch: refs/heads/master
Commit: 4fb80a1ceca14e44bcd12231f4946533d7ca03ad
Parents: a1d5b6a
Author: sunlan <su...@apache.org>
Authored: Tue Mar 28 11:03:47 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Mar 28 11:03:47 2017 +0800

----------------------------------------------------------------------
 src/main/org/codehaus/groovy/syntax/Types.java | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/4fb80a1c/src/main/org/codehaus/groovy/syntax/Types.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/syntax/Types.java b/src/main/org/codehaus/groovy/syntax/Types.java
index 7265009..5cb6154 100644
--- a/src/main/org/codehaus/groovy/syntax/Types.java
+++ b/src/main/org/codehaus/groovy/syntax/Types.java
@@ -1447,9 +1447,13 @@ public class Types
         addDescription( SWITCH_ENTRIES              , "<valid in a switch body>"     );
     }
 
-    public static final Set<Integer> ASSIGNMENT_SET = new HashSet<Integer>(Arrays.asList(EQUAL, BITWISE_AND_EQUAL, BITWISE_OR_EQUAL, BITWISE_XOR_EQUAL, PLUS_EQUAL, MINUS_EQUAL, MULTIPLY_EQUAL, DIVIDE_EQUAL, INTDIV_EQUAL, MOD_EQUAL, POWER_EQUAL, LEFT_SHIFT_EQUAL, RIGHT_SHIFT_EQUAL, RIGHT_SHIFT_UNSIGNED_EQUAL, ELVIS_EQUAL));
+    private static final int[] ASSIGNMENT_TYPES;
+    static {
+        ASSIGNMENT_TYPES = new int[] { EQUAL, BITWISE_AND_EQUAL, BITWISE_OR_EQUAL, BITWISE_XOR_EQUAL, PLUS_EQUAL, MINUS_EQUAL, MULTIPLY_EQUAL, DIVIDE_EQUAL, INTDIV_EQUAL, MOD_EQUAL, POWER_EQUAL, LEFT_SHIFT_EQUAL, RIGHT_SHIFT_EQUAL, RIGHT_SHIFT_UNSIGNED_EQUAL, ELVIS_EQUAL };
+        Arrays.sort(ASSIGNMENT_TYPES);
+    }
 
-    public static boolean isAssignment(Integer type) {
-        return ASSIGNMENT_SET.contains(type);
+    public static boolean isAssignment(int type) {
+        return Arrays.binarySearch(ASSIGNMENT_TYPES, type) >= 0;
     }
 }


[16/50] groovy git commit: Support array initializer of Java style

Posted by pa...@apache.org.
Support array initializer of Java style


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/e553c91f
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/e553c91f
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/e553c91f

Branch: refs/heads/master
Commit: e553c91f4fef77e1d4f8522ea6103a29a5c0cbe7
Parents: c683c74
Author: sunlan <su...@apache.org>
Authored: Tue Jan 24 20:04:33 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Jan 24 20:04:33 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyParser.g4 | 12 ++--
 .../apache/groovy/parser/antlr4/AstBuilder.java | 72 ++++++++++++--------
 .../parser/antlr4/GroovyParserTest.groovy       |  5 ++
 .../src/test/resources/core/Array_01x.groovy    | 72 ++++++++++++++++++++
 4 files changed, 130 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/e553c91f/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index 5bf6f87..db105c9 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -355,13 +355,12 @@ variableDeclaratorId
     ;
 
 variableInitializer
-    :   arrayInitializer
-    |   statementExpression
+    :   statementExpression
     |   standardLambda
     ;
 
-arrayInitializer
-    :   LBRACK (variableInitializer (COMMA variableInitializer)* (COMMA)? )? RBRACK
+variableInitializers
+    :   variableInitializer nls (COMMA nls variableInitializer nls)* nls COMMA?
     ;
 
 standardType
@@ -1086,6 +1085,11 @@ mapEntryLabel
 creator
     :   createdName nls arguments anonymousInnerClassDeclaration[0]?
     |   createdName (LBRACK expression RBRACK)+ (b+=LBRACK RBRACK)*
+    |   createdName (b+=LBRACK RBRACK)+ arrayInitializer
+    ;
+
+arrayInitializer
+    :   LBRACE nls variableInitializers? nls RBRACE
     ;
 
 /**

http://git-wip-us.apache.org/repos/asf/groovy/blob/e553c91f/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 049719b..7f81e19 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -1542,10 +1542,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             return EmptyExpression.INSTANCE;
         }
 
-        if (asBoolean(ctx.arrayInitializer())) {
-            return this.configureAST(this.visitArrayInitializer(ctx.arrayInitializer()), ctx);
-        }
-
         if (asBoolean(ctx.statementExpression())) {
             return this.configureAST(
                     ((ExpressionStatement) this.visit(ctx.statementExpression())).getExpression(),
@@ -1560,15 +1556,24 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
     }
 
     @Override
-    public ListExpression visitArrayInitializer(ArrayInitializerContext ctx) {
-        return this.configureAST(
-                new ListExpression(
-                        ctx.variableInitializer().stream()
-                                .map(this::visitVariableInitializer)
-                                .collect(Collectors.toList())),
-                ctx);
+    public List<Expression> visitVariableInitializers(VariableInitializersContext ctx) {
+        if (!asBoolean(ctx)) {
+            return Collections.emptyList();
+        }
+
+        return ctx.variableInitializer().stream()
+                        .map(this::visitVariableInitializer)
+                        .collect(Collectors.toList());
     }
 
+    @Override
+    public List<Expression> visitArrayInitializer(ArrayInitializerContext ctx) {
+        if (!asBoolean(ctx)) {
+            return Collections.emptyList();
+        }
+
+        return this.visitVariableInitializers(ctx.variableInitializers());
+    }
 
     @Override
     public Statement visitBlock(BlockContext ctx) {
@@ -2611,24 +2616,37 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         }
 
         if (asBoolean(ctx.LBRACK())) { // create array
-            Expression[] empties;
-            if (asBoolean(ctx.b)) {
-                empties = new Expression[ctx.b.size()];
-                Arrays.setAll(empties, i -> ConstantExpression.EMPTY_EXPRESSION);
+            if (asBoolean(ctx.arrayInitializer())) {
+                ClassNode arrayType = classNode;
+                for (int i = 0, n = ctx.b.size() - 1; i < n; i++) {
+                    arrayType = arrayType.makeArray();
+                }
+
+                return this.configureAST(
+                        new ArrayExpression(
+                                arrayType,
+                                this.visitArrayInitializer(ctx.arrayInitializer())),
+                        ctx);
             } else {
-                empties = new Expression[0];
-            }
+                Expression[] empties;
+                if (asBoolean(ctx.b)) {
+                    empties = new Expression[ctx.b.size()];
+                    Arrays.setAll(empties, i -> ConstantExpression.EMPTY_EXPRESSION);
+                } else {
+                    empties = new Expression[0];
+                }
 
-            return this.configureAST(
-                    new ArrayExpression(
-                            classNode,
-                            null,
-                            Stream.concat(
-                                    ctx.expression().stream()
-                                            .map(e -> (Expression) this.visit(e)),
-                                    Arrays.stream(empties)
-                            ).collect(Collectors.toList())),
-                    ctx);
+                return this.configureAST(
+                        new ArrayExpression(
+                                classNode,
+                                null,
+                                Stream.concat(
+                                        ctx.expression().stream()
+                                                .map(e -> (Expression) this.visit(e)),
+                                        Arrays.stream(empties)
+                                ).collect(Collectors.toList())),
+                        ctx);
+            }
         }
 
         throw createParsingFailedException("Unsupported creator: " + ctx.getText(), ctx);

http://git-wip-us.apache.org/repos/asf/groovy/blob/e553c91f/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
index 98d434c..86309c3 100644
--- 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
@@ -339,4 +339,9 @@ class GroovyParserTest extends GroovyTestCase {
         doRunAndTest('core/BreakingChange_03x.groovy');
         doRunAndTest('core/BreakingChange_04x.groovy');
     }
+
+    void "test groovy core - Array"() {
+        doRunAndTest('core/Array_01x.groovy');
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/e553c91f/subprojects/groovy-parser-antlr4/src/test/resources/core/Array_01x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/Array_01x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/Array_01x.groovy
new file mode 100644
index 0000000..033cb34
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/Array_01x.groovy
@@ -0,0 +1,72 @@
+import groovy.transform.CompileStatic
+
+def testArrayInitializer() {
+    def x = new double[] {}
+    assert x.length == 0
+
+    def y = new double[][] {}
+    assert y.length == 0
+
+    def a = new int[] {1, 2}
+    assert a[0] == 1
+    assert a[1] == 2
+    assert a as List == [1, 2]
+
+    def b = new int[][] {
+        new int[] {1, 1.plus(1)},
+        new int[] {2.plus(1), 4}
+    }
+    assert b[0][0] == 1
+    assert b[0][1] == 2
+    assert b[1][0] == 3
+    assert b[1][1] == 4
+
+    def c = new String[] {
+        'a'
+        ,
+        'b'
+        ,
+        'c'
+        ,
+    }
+    assert c[0] == 'a'
+    assert c[1] == 'b'
+    assert c[2] == 'c'
+}
+testArrayInitializer();
+
+@CompileStatic
+def testArrayInitializerCS() {
+    def x = new double[] {}
+    assert x.length == 0
+
+    def y = new double[][] {}
+    assert y.length == 0
+
+    def a = new int[] {1, 2}
+    assert a[0] == 1
+    assert a[1] == 2
+    assert a as List == [1, 2]
+
+    def b = new int[][] {
+        new int[] {1, 1.plus(1)},
+        new int[] {2.plus(1), 4}
+    }
+    assert b[0][0] == 1
+    assert b[0][1] == 2
+    assert b[1][0] == 3
+    assert b[1][1] == 4
+
+    def c = new String[] {
+        'a'
+        ,
+        'b'
+        ,
+        'c'
+        ,
+    }
+    assert c[0] == 'a'
+    assert c[1] == 'b'
+    assert c[2] == 'c'
+}
+testArrayInitializerCS();
\ No newline at end of file


[35/50] groovy git commit: Refine the README of sub-project groovy-parser-antlr4

Posted by pa...@apache.org.
Refine the README of sub-project groovy-parser-antlr4


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/0954c01e
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/0954c01e
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/0954c01e

Branch: refs/heads/master
Commit: 0954c01eb6452061df496807675a8bcf72777334
Parents: c0791d9
Author: sunlan <su...@apache.org>
Authored: Wed Feb 8 13:53:25 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Feb 8 13:53:25 2017 +0800

----------------------------------------------------------------------
 subprojects/groovy-parser-antlr4/README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/0954c01e/subprojects/groovy-parser-antlr4/README.md
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/README.md b/subprojects/groovy-parser-antlr4/README.md
index 7192087..910f939 100644
--- a/subprojects/groovy-parser-antlr4/README.md
+++ b/subprojects/groovy-parser-antlr4/README.md
@@ -32,4 +32,5 @@ groovyOptions.forkOptions.jvmArgs += ["-Dgroovy.antlr4=true"]
 * `groovy.antlr4.cache.threshold`: how frequently to clear DFA cache(default: 50). **Notice:** The more frequently the DFA cache is cleared, the poorer parsing performance will be(you can not set the value that is less than the default value). But the DFA cache has to be cleared to avoid OutOfMemoryError's occurring. 
 * `groovy.extract.doc.comment`: whether to collect groovydoc while parsing groovy source code(default: false)
 
-*P.S. Parrot is based on the highly optimized version of antlr4(com.tunnelvisionlabs:antlr4), which is licensed under BSD. *
+*P.S. Parrot is based on the highly optimized version of antlr4(com.tunnelvisionlabs:antlr4), which is licensed under BSD.*
+ 
\ No newline at end of file


[04/50] groovy git commit: Add test case for GROOVY-5652: Semicolon required after coercing to a parameterized (generic) type containing a parameterized (generic) type as its only or last type argument when there is no space between the ending ">>"

Posted by pa...@apache.org.
Add test case for GROOVY-5652: Semicolon required after coercing to a parameterized (generic) type containing a parameterized (generic) type as its only or last type argument when there is no space between the ending ">>"


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/ad1786eb
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/ad1786eb
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/ad1786eb

Branch: refs/heads/master
Commit: ad1786eb2721dc5e1e477cc46ece7ce548bd8b32
Parents: e70f131
Author: sunlan <su...@apache.org>
Authored: Fri Jan 20 09:52:08 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Jan 20 09:52:08 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/GroovyParserTest.groovy    | 2 ++
 .../src/test/resources/bugs/BUG-GROOVY-5652.groovy             | 6 ++++++
 2 files changed, 8 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/ad1786eb/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
index e70cd90..d48e2e0 100644
--- 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
@@ -329,6 +329,8 @@ class GroovyParserTest extends GroovyTestCase {
     void "test groovy core - BUG"() {
         doRunAndTest('bugs/BUG-GROOVY-4757.groovy');
         doRunAndTest('bugs/GROOVY-3898.groovy');
+        doRunAndTest('bugs/BUG-GROOVY-5652.groovy');
+
     }
 
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/ad1786eb/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-5652.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-5652.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-5652.groovy
new file mode 100644
index 0000000..329a17a
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-5652.groovy
@@ -0,0 +1,6 @@
+package bugs
+
+def list = [[1,2],[3,4]] as List<List<Integer>>
+println list
+println 'bye'
+assert [[1,2],[3,4]] == list


[34/50] groovy git commit: Refine the README of sub-project groovy-parser-antlr4

Posted by pa...@apache.org.
Refine the README of sub-project groovy-parser-antlr4


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/c0791d9f
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/c0791d9f
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/c0791d9f

Branch: refs/heads/master
Commit: c0791d9f4d2d298ec1786994359af295d9a7b0c7
Parents: d21ddc7
Author: sunlan <su...@apache.org>
Authored: Wed Feb 8 13:41:35 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Feb 8 13:41:35 2017 +0800

----------------------------------------------------------------------
 subprojects/groovy-parser-antlr4/README.md | 35 ++++++++++++++++++-------
 1 file changed, 26 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/c0791d9f/subprojects/groovy-parser-antlr4/README.md
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/README.md b/subprojects/groovy-parser-antlr4/README.md
index f209c08..7192087 100644
--- a/subprojects/groovy-parser-antlr4/README.md
+++ b/subprojects/groovy-parser-antlr4/README.md
@@ -1,18 +1,35 @@
-This is the home of the Parrot parser, which is based on antlr4.
+## This is the home of the new parser Parrot, which is based on antlr4.
 
-In the gradle build the property useAntlr4 has to be set to enable the build of the parser and the execution of all tests with it.
+The new parser(Parrot) can parse Groovy source code and construct the related AST, which is almost identical to the one generated by the old parser(except the corrected node position, e.g. line, column of node). Currently all features of Groovy are available. In addition, **the following new features have been added:**
 
-Command line example:
-`./gradlew -PuseAntlr4=true bootstrapJar`
+* do-while loop, standard loop(e.g. `for(int i = 0, j = 10; i < j; i++, j--) {..}`)
+* lambda expression
+* method reference and constructor reference
+* try-with-resources(i.e. ARM)
+* code block(i.e. `{..}`)
+* array initializer of Java style(e.g. `new int[] {1, 2, 3}`)
+* default method of interface
+* new operators: identity operators(`===`, `!==`), elvis assignment(`?=`), `!in`, `!instanceof`
+* safe index(e.g. `nullableVar?[1, 2]`)
+* groovydoc attached to AST node as metadata
 
-To enable the new parser automatically at runtime the system property groovy.antlr4 has to be set.
-
-Command line example:
+**How to enable the new parser**
+* In the gradle build the property useAntlr4 has to be set to enable the build of the parser and the execution of all tests with it. Command line example:
+```
+./gradlew -PuseAntlr4=true bootstrapJar
+```
+* To enable the new parser automatically at runtime the system property groovy.antlr4 has to be set. Command line example:
 ```
 export JAVA_OPTS="-Dgroovy.antlr4=true"
 groovy foo.groovy
 ```
+* This system property also controls groovyc and has to be used in case it is used outside of this build, for example with:
+```
+groovyOptions.forkOptions.jvmArgs += ["-Dgroovy.antlr4=true"]
+```
 
-This system property also controls groovyc and has to be used in case it is used outside of this build, for example with:
+**JVM options to control parsing:**
+* `groovy.antlr4.cache.threshold`: how frequently to clear DFA cache(default: 50). **Notice:** The more frequently the DFA cache is cleared, the poorer parsing performance will be(you can not set the value that is less than the default value). But the DFA cache has to be cleared to avoid OutOfMemoryError's occurring. 
+* `groovy.extract.doc.comment`: whether to collect groovydoc while parsing groovy source code(default: false)
 
-`groovyOptions.forkOptions.jvmArgs += ["-Dgroovy.antlr4=true"]`
+*P.S. Parrot is based on the highly optimized version of antlr4(com.tunnelvisionlabs:antlr4), which is licensed under BSD. *


[24/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/8025ca3b
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/8025ca3b
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/8025ca3b

Branch: refs/heads/master
Commit: 8025ca3b97e1159e95425df85825b7f812c8d409
Parents: 5a773a8
Author: sunlan <su...@apache.org>
Authored: Sat Jan 28 15:33:26 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sat Jan 28 15:33:26 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/AstBuilder.java | 60 +++++++++++---------
 1 file changed, 34 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/8025ca3b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 522ca5b..68c5f3a 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -1351,8 +1351,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         return this.configureAST(this.visitVariableDeclaration(ctx.variableDeclaration()), ctx);
     }
 
-    @Override
-    public DeclarationListStatement visitVariableDeclaration(VariableDeclarationContext ctx) {
+    private ModifierManager createModifierManager(VariableDeclarationContext ctx) {
         List<ModifierNode> modifierNodeList = Collections.emptyList();
 
         if (asBoolean(ctx.variableModifiers())) {
@@ -1365,32 +1364,41 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             modifierNodeList = this.visitModifiersOpt(ctx.modifiersOpt());
         }
 
-        ModifierManager modifierManager = new ModifierManager(modifierNodeList);
+        return new ModifierManager(modifierNodeList);
+    }
 
-        if (asBoolean(ctx.typeNamePairs())) { // e.g. def (int a, int b) = [1, 2]
-            if (!modifierManager.contains(DEF)) {
-                throw createParsingFailedException("keyword def is required to declare tuple, e.g. def (int a, int b) = [1, 2]", ctx);
-            }
+    private DeclarationListStatement createMultiAssignmentDeclarationListStatement(VariableDeclarationContext ctx, ModifierManager modifierManager) {
+        if (!modifierManager.contains(DEF)) {
+            throw createParsingFailedException("keyword def is required to declare tuple, e.g. def (int a, int b) = [1, 2]", ctx);
+        }
 
-            return this.configureAST(
-                    new DeclarationListStatement(
-                            this.configureAST(
-                                    modifierManager.attachAnnotations(
-                                            new DeclarationExpression(
-                                                    new ArgumentListExpression(
-                                                            this.visitTypeNamePairs(ctx.typeNamePairs()).stream()
-                                                                    .peek(e -> modifierManager.processVariableExpression((VariableExpression) e))
-                                                                    .collect(Collectors.toList())
-                                                    ),
-                                                    this.createGroovyTokenByType(ctx.ASSIGN().getSymbol(), Types.ASSIGN),
-                                                    this.visitVariableInitializer(ctx.variableInitializer())
-                                            )
-                                    ),
-                                    ctx
-                            )
-                    ),
-                    ctx
-            );
+        return this.configureAST(
+                new DeclarationListStatement(
+                        this.configureAST(
+                                modifierManager.attachAnnotations(
+                                        new DeclarationExpression(
+                                                new ArgumentListExpression(
+                                                        this.visitTypeNamePairs(ctx.typeNamePairs()).stream()
+                                                                .peek(e -> modifierManager.processVariableExpression((VariableExpression) e))
+                                                                .collect(Collectors.toList())
+                                                ),
+                                                this.createGroovyTokenByType(ctx.ASSIGN().getSymbol(), Types.ASSIGN),
+                                                this.visitVariableInitializer(ctx.variableInitializer())
+                                        )
+                                ),
+                                ctx
+                        )
+                ),
+                ctx
+        );
+    }
+
+    @Override
+    public DeclarationListStatement visitVariableDeclaration(VariableDeclarationContext ctx) {
+        ModifierManager modifierManager = this.createModifierManager(ctx);
+
+        if (asBoolean(ctx.typeNamePairs())) { // e.g. def (int a, int b) = [1, 2]
+            return this.createMultiAssignmentDeclarationListStatement(ctx, modifierManager);
         }
 
         ClassNode variableType = this.visitType(ctx.type());


[31/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/49feef57
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/49feef57
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/49feef57

Branch: refs/heads/master
Commit: 49feef57134bae3e5414659d2fb91aa98990ae46
Parents: 8c644fa
Author: sunlan <su...@apache.org>
Authored: Sun Jan 29 21:35:54 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Jan 29 21:35:54 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/AstBuilder.java | 230 +++++++++++--------
 1 file changed, 129 insertions(+), 101 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/49feef57/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 39eb932..b92780c 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -1233,52 +1233,9 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         // if classNode is not null, the method declaration is for class declaration
         ClassNode classNode = ctx.getNodeMetaData(CLASS_DECLARATION_CLASS_NODE);
         if (asBoolean(classNode)) {
-            String className = classNode.getNodeMetaData(CLASS_NAME);
-            int modifiers = modifierManager.getClassMemberModifiersOpValue();
-
-            if (!asBoolean(ctx.returnType())
-                    && asBoolean(ctx.methodBody())
-                    && methodName.equals(className)) { // constructor declaration
-
-                ConstructorCallExpression thisOrSuperConstructorCallExpression = this.checkThisAndSuperConstructorCall(code);
-                if (asBoolean(thisOrSuperConstructorCallExpression)) {
-                    throw createParsingFailedException(thisOrSuperConstructorCallExpression.getText() + " should be the first statement in the constructor[" + methodName + "]", thisOrSuperConstructorCallExpression);
-                }
-
-                methodNode =
-                        classNode.addConstructor(
-                                modifiers,
-                                parameters,
-                                exceptions,
-                                code);
-
-            } else { // class memeber method declaration
-                if (asBoolean(ctx.elementValue())) { // the code of annotation method
-                    code = this.configureAST(
-                            new ExpressionStatement(
-                                    this.visitElementValue(ctx.elementValue())),
-                            ctx.elementValue());
-
-                }
-
-                modifiers |= !modifierManager.contains(STATIC) && (classNode.isInterface() || (isTrue(classNode, IS_INTERFACE_WITH_DEFAULT_METHODS) && !modifierManager.contains(DEFAULT))) ? Opcodes.ACC_ABSTRACT : 0;
-                methodNode = classNode.addMethod(methodName, modifiers, returnType, parameters, exceptions, code);
-
-                methodNode.setAnnotationDefault(asBoolean(ctx.elementValue()));
-            }
-
-            modifierManager.attachAnnotations(methodNode);
+            methodNode = createConstructorOrMethodNodeForClass(ctx, modifierManager, methodName, returnType, parameters, exceptions, code, classNode);
         } else { // script method declaration
-            methodNode =
-                    new MethodNode(
-                            methodName,
-                            modifierManager.contains(PRIVATE) ? Opcodes.ACC_PRIVATE : Opcodes.ACC_PUBLIC,
-                            returnType,
-                            parameters,
-                            exceptions,
-                            code);
-
-            modifierManager.processMethodNode(methodNode);
+            methodNode = createScriptMethodNode(modifierManager, methodName, returnType, parameters, exceptions, code);
         }
         anonymousInnerClassList.forEach(e -> e.setEnclosingMethod(methodNode));
 
@@ -1297,6 +1254,14 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         this.configureAST(methodNode, ctx);
 
+        validateMethodDeclaration(ctx, methodNode);
+
+        groovydocManager.attachDocCommentAsMetaData(methodNode, ctx);
+
+        return methodNode;
+    }
+
+    private void validateMethodDeclaration(MethodDeclarationContext ctx, MethodNode methodNode) {
         boolean isAbstractMethod = methodNode.isAbstract();
         boolean hasMethodBody = asBoolean(methodNode.getCode());
 
@@ -1309,9 +1274,70 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
                 throw createParsingFailedException("You defined a method[" + methodNode.getName() + "] without body. Try adding a method body, or declare it abstract", methodNode);
             }
         }
+    }
 
-        groovydocManager.attachDocCommentAsMetaData(methodNode, ctx);
+    private MethodNode createScriptMethodNode(ModifierManager modifierManager, String methodName, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code) {
+        MethodNode methodNode;
+        methodNode =
+                new MethodNode(
+                        methodName,
+                        modifierManager.contains(PRIVATE) ? Opcodes.ACC_PRIVATE : Opcodes.ACC_PUBLIC,
+                        returnType,
+                        parameters,
+                        exceptions,
+                        code);
+
+        modifierManager.processMethodNode(methodNode);
+        return methodNode;
+    }
+
+    private MethodNode createConstructorOrMethodNodeForClass(MethodDeclarationContext ctx, ModifierManager modifierManager, String methodName, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code, ClassNode classNode) {
+        MethodNode methodNode;
+        String className = classNode.getNodeMetaData(CLASS_NAME);
+        int modifiers = modifierManager.getClassMemberModifiersOpValue();
+
+        if (!asBoolean(ctx.returnType())
+                && asBoolean(ctx.methodBody())
+                && methodName.equals(className)) { // constructor declaration
+
+            methodNode = createConstructorNodeForClass(methodName, parameters, exceptions, code, classNode, modifiers);
+        } else { // class memeber method declaration
+            methodNode = createMethodNodeForClass(ctx, modifierManager, methodName, returnType, parameters, exceptions, code, classNode, modifiers);
+        }
+
+        modifierManager.attachAnnotations(methodNode);
+        return methodNode;
+    }
+
+    private MethodNode createMethodNodeForClass(MethodDeclarationContext ctx, ModifierManager modifierManager, String methodName, ClassNode returnType, Parameter[] parameters, ClassNode[] exceptions, Statement code, ClassNode classNode, int modifiers) {
+        MethodNode methodNode;
+        if (asBoolean(ctx.elementValue())) { // the code of annotation method
+            code = this.configureAST(
+                    new ExpressionStatement(
+                            this.visitElementValue(ctx.elementValue())),
+                    ctx.elementValue());
+
+        }
+
+        modifiers |= !modifierManager.contains(STATIC) && (classNode.isInterface() || (isTrue(classNode, IS_INTERFACE_WITH_DEFAULT_METHODS) && !modifierManager.contains(DEFAULT))) ? Opcodes.ACC_ABSTRACT : 0;
+        methodNode = classNode.addMethod(methodName, modifiers, returnType, parameters, exceptions, code);
+
+        methodNode.setAnnotationDefault(asBoolean(ctx.elementValue()));
+        return methodNode;
+    }
+
+    private MethodNode createConstructorNodeForClass(String methodName, Parameter[] parameters, ClassNode[] exceptions, Statement code, ClassNode classNode, int modifiers) {
+        MethodNode methodNode;ConstructorCallExpression thisOrSuperConstructorCallExpression = this.checkThisAndSuperConstructorCall(code);
+        if (asBoolean(thisOrSuperConstructorCallExpression)) {
+            throw createParsingFailedException(thisOrSuperConstructorCallExpression.getText() + " should be the first statement in the constructor[" + methodName + "]", thisOrSuperConstructorCallExpression);
+        }
 
+        methodNode =
+                classNode.addConstructor(
+                        modifiers,
+                        parameters,
+                        exceptions,
+                        code);
         return methodNode;
     }
 
@@ -1417,60 +1443,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         ClassNode classNode = ctx.getNodeMetaData(CLASS_DECLARATION_CLASS_NODE);
 
         if (asBoolean(classNode)) {
-            declarationExpressionList.forEach(e -> {
-                VariableExpression variableExpression = (VariableExpression) e.getLeftExpression();
-
-                int modifiers = modifierManager.getClassMemberModifiersOpValue();
-
-                Expression initialValue = EmptyExpression.INSTANCE.equals(e.getRightExpression()) ? null : e.getRightExpression();
-                Object defaultValue = findDefaultValueByType(variableType);
-
-                if (classNode.isInterface()) {
-                    if (!asBoolean(initialValue)) {
-                        initialValue = !asBoolean(defaultValue) ? null : new ConstantExpression(defaultValue);
-                    }
-
-                    modifiers |= Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL;
-                }
-
-                if (classNode.isInterface() || modifierManager.containsVisibilityModifier()) {
-                    FieldNode fieldNode =
-                            classNode.addField(
-                                    variableExpression.getName(),
-                                    modifiers,
-                                    variableType,
-                                    initialValue);
-                    modifierManager.attachAnnotations(fieldNode);
-
-                    groovydocManager.attachDocCommentAsMetaData(fieldNode, ctx);
-
-                    this.configureAST(fieldNode, ctx);
-                } else {
-                    PropertyNode propertyNode =
-                            classNode.addProperty(
-                                    variableExpression.getName(),
-                                    modifiers | Opcodes.ACC_PUBLIC,
-                                    variableType,
-                                    initialValue,
-                                    null,
-                                    null);
-
-                    FieldNode fieldNode = propertyNode.getField();
-                    fieldNode.setModifiers(modifiers & ~Opcodes.ACC_PUBLIC | Opcodes.ACC_PRIVATE);
-                    fieldNode.setSynthetic(!classNode.isInterface());
-                    modifierManager.attachAnnotations(fieldNode);
-
-                    groovydocManager.attachDocCommentAsMetaData(fieldNode, ctx);
-                    groovydocManager.attachDocCommentAsMetaData(propertyNode, ctx);
-
-                    this.configureAST(fieldNode, ctx);
-                    this.configureAST(propertyNode, ctx);
-                }
-
-            });
-
-
-            return null;
+            return createFieldDeclarationListStatement(ctx, modifierManager, variableType, declarationExpressionList, classNode);
         }
 
         declarationExpressionList.forEach(e -> {
@@ -1478,7 +1451,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
             modifierManager.processVariableExpression(variableExpression);
             modifierManager.attachAnnotations(e);
-
         });
 
         int size = declarationExpressionList.size();
@@ -1497,6 +1469,62 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         return this.configureAST(new DeclarationListStatement(declarationExpressionList), ctx);
     }
 
+    private DeclarationListStatement createFieldDeclarationListStatement(VariableDeclarationContext ctx, ModifierManager modifierManager, ClassNode variableType, List<DeclarationExpression> declarationExpressionList, ClassNode classNode) {
+        declarationExpressionList.forEach(e -> {
+            VariableExpression variableExpression = (VariableExpression) e.getLeftExpression();
+
+            int modifiers = modifierManager.getClassMemberModifiersOpValue();
+
+            Expression initialValue = EmptyExpression.INSTANCE.equals(e.getRightExpression()) ? null : e.getRightExpression();
+            Object defaultValue = findDefaultValueByType(variableType);
+
+            if (classNode.isInterface()) {
+                if (!asBoolean(initialValue)) {
+                    initialValue = !asBoolean(defaultValue) ? null : new ConstantExpression(defaultValue);
+                }
+
+                modifiers |= Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL;
+            }
+
+            if (classNode.isInterface() || modifierManager.containsVisibilityModifier()) {
+                FieldNode fieldNode =
+                        classNode.addField(
+                                variableExpression.getName(),
+                                modifiers,
+                                variableType,
+                                initialValue);
+                modifierManager.attachAnnotations(fieldNode);
+
+                groovydocManager.attachDocCommentAsMetaData(fieldNode, ctx);
+
+                this.configureAST(fieldNode, ctx);
+            } else {
+                PropertyNode propertyNode =
+                        classNode.addProperty(
+                                variableExpression.getName(),
+                                modifiers | Opcodes.ACC_PUBLIC,
+                                variableType,
+                                initialValue,
+                                null,
+                                null);
+
+                FieldNode fieldNode = propertyNode.getField();
+                fieldNode.setModifiers(modifiers & ~Opcodes.ACC_PUBLIC | Opcodes.ACC_PRIVATE);
+                fieldNode.setSynthetic(!classNode.isInterface());
+                modifierManager.attachAnnotations(fieldNode);
+
+                groovydocManager.attachDocCommentAsMetaData(fieldNode, ctx);
+                groovydocManager.attachDocCommentAsMetaData(propertyNode, ctx);
+
+                this.configureAST(fieldNode, ctx);
+                this.configureAST(propertyNode, ctx);
+            }
+
+        });
+
+        return null;
+    }
+
     @Override
     public List<Expression> visitTypeNamePairs(TypeNamePairsContext ctx) {
         return ctx.typeNamePair().stream().map(this::visitTypeNamePair).collect(Collectors.toList());


[02/50] groovy git commit: Add test case for GROOVY-3898: Allow the specification of types when initializing multiple iteration variables in a "for" construct

Posted by pa...@apache.org.
Add test case for GROOVY-3898: Allow the specification of types when initializing multiple iteration variables in a "for" construct


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/0e608ee5
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/0e608ee5
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/0e608ee5

Branch: refs/heads/master
Commit: 0e608ee5310d96031ea96da1a11b0eb7c7a92a4e
Parents: 348465a
Author: sunlan <su...@apache.org>
Authored: Thu Jan 19 20:47:49 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Thu Jan 19 20:47:49 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/GroovyParserTest.groovy  | 1 +
 .../src/test/resources/bugs/GROOVY-3898.groovy               | 8 ++++++++
 2 files changed, 9 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/0e608ee5/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
index 3f3a63c..e70cd90 100644
--- 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
@@ -328,6 +328,7 @@ class GroovyParserTest extends GroovyTestCase {
 
     void "test groovy core - BUG"() {
         doRunAndTest('bugs/BUG-GROOVY-4757.groovy');
+        doRunAndTest('bugs/GROOVY-3898.groovy');
     }
 
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/0e608ee5/subprojects/groovy-parser-antlr4/src/test/resources/bugs/GROOVY-3898.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/bugs/GROOVY-3898.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/GROOVY-3898.groovy
new file mode 100644
index 0000000..9f07edb
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/GROOVY-3898.groovy
@@ -0,0 +1,8 @@
+package bugs
+
+int result = 1
+for((i, j) = [0,0]; i < 3; {i++; j++}()){
+    result = result * i + j
+}
+assert 4 == result
+


[33/50] groovy git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot

Posted by pa...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/d21ddc7a
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/d21ddc7a
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/d21ddc7a

Branch: refs/heads/master
Commit: d21ddc7abe062ee643b5d6db8e209a9da50446fe
Parents: a9c7046 01fdb70
Author: sunlan <su...@apache.org>
Authored: Wed Feb 8 12:11:16 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Feb 8 12:11:58 2017 +0800

----------------------------------------------------------------------
 build.gradle                                    |   2 +-
 gradle/pomconfigurer.gradle                     |   3 +
 src/main/groovy/util/logging/Commons.java       |   1 +
 src/main/groovy/util/logging/Log.java           |   1 +
 src/main/groovy/util/logging/Log4j.java         |   1 +
 src/main/groovy/util/logging/Log4j2.java        |   1 +
 src/main/groovy/util/logging/Slf4j.java         |   1 +
 .../codehaus/groovy/ast/tools/GeneralUtils.java |   4 +
 .../groovy/classgen/AnnotationVisitor.java      |  31 ++-
 .../asm/sc/StaticTypesCallSiteWriter.java       |  14 +-
 .../groovy/runtime/StringGroovyMethods.java     |   5 +
 .../stc/StaticTypeCheckingVisitor.java          | 275 +++++--------------
 src/spec/doc/core-syntax.adoc                   |   2 +-
 src/test/gls/annotations/AnnotationTest.groovy  |   4 -
 src/test/groovy/bugs/Groovy8026Bug.groovy       |  35 +++
 src/test/groovy/bugs/Groovy8030Bug.groovy       |  34 +++
 .../classgen/asm/sc/bugs/Groovy8069Bug.groovy   |  55 ++++
 .../src/main/java/groovy/sql/Sql.java           |  15 +-
 18 files changed, 256 insertions(+), 228 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/d21ddc7a/build.gradle
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/groovy/blob/d21ddc7a/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
----------------------------------------------------------------------
diff --cc src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
index 37bfe88,727739d..d77316a
--- a/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
+++ b/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
@@@ -632,18 -631,23 +631,23 @@@ public class StaticTypesCallSiteWriter 
          }
          // now try with flow type instead of declaration type
          rType = receiver.getNodeMetaData(StaticTypesMarker.INFERRED_TYPE);
+         if (receiver instanceof VariableExpression && receiver.getNodeMetaData().isEmpty()) {
+             // TODO: can STCV be made smarter to avoid this check?
+             VariableExpression ve = (VariableExpression) ((VariableExpression)receiver).getAccessedVariable();
+             rType = ve.getNodeMetaData(StaticTypesMarker.INFERRED_TYPE);
+         }
 -        if (rType!=null && trySubscript(receiver, message, arguments, rType, aType)) {
 +        if (rType!=null && trySubscript(receiver, message, arguments, rType, aType, safe)) {
              return;
          }
          // todo: more cases
          throw new GroovyBugError(
-                 "At line "+receiver.getLineNumber() + " column " + receiver.getColumnNumber() + "\n" +
-                 "On receiver: "+receiver.getText() + " with message: "+message+" and arguments: "+arguments.getText()+"\n"+
-                 "This method should not have been called. Please try to create a simple example reproducing this error and file" +
-                 "a bug report at https://issues.apache.org/jira/browse/GROOVY");
+                 "At line " + receiver.getLineNumber() + " column " + receiver.getColumnNumber() + "\n" +
+                 "On receiver: " + receiver.getText() + " with message: " + message + " and arguments: " + arguments.getText() + "\n" +
+                 "This method should not have been called. Please try to create a simple example reproducing\n" +
+                 "this error and file a bug report at https://issues.apache.org/jira/browse/GROOVY");
      }
  
 -    private boolean trySubscript(final Expression receiver, final String message, final Expression arguments, ClassNode rType, final ClassNode aType) {
 +    private boolean trySubscript(final Expression receiver, final String message, final Expression arguments, ClassNode rType, final ClassNode aType, boolean safe) {
          if (getWrapper(rType).isDerivedFrom(Number_TYPE)
                  && getWrapper(aType).isDerivedFrom(Number_TYPE)) {
              if ("plus".equals(message) || "minus".equals(message) || "multiply".equals(message) || "div".equals(message)) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/d21ddc7a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
----------------------------------------------------------------------
diff --cc src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 006e082,0f49976..a2f93f0
--- a/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@@ -693,11 -580,11 +583,11 @@@ public class StaticTypeCheckingVisitor 
                  if (!isPrimitiveType(lType))
                      rType = UNKNOWN_PARAMETER_TYPE; // primitive types should be ignored as they will result in another failure
              }
-             BinaryExpression reversedBinaryExpression = new BinaryExpression(rightExpression, expression.getOperation(), leftExpression);
+             BinaryExpression reversedBinaryExpression = binX(rightExpression, expression.getOperation(), leftExpression);
 -            ClassNode resultType = op==KEYWORD_IN
 +            ClassNode resultType = (op==KEYWORD_IN || op==COMPARE_NOT_IN)
                      ?getResultType(rType,op,lType,reversedBinaryExpression)
                      :getResultType(lType, op, rType, expression);
 -            if (op==KEYWORD_IN) {
 +            if (op==KEYWORD_IN || op==COMPARE_NOT_IN) {
                  // in case of the "in" operator, the receiver and the arguments are reversed
                  // so we use the reversedExpression and get the target method from it
                  storeTargetMethod(expression, (MethodNode) reversedBinaryExpression.getNodeMetaData(StaticTypesMarker.DIRECT_METHOD_CALL_TARGET));
@@@ -1202,7 -1080,7 +1083,7 @@@
       *
       * @param node      the class node for which we will try to find a matching constructor
       * @param arguments the constructor arguments
--     * @deprecated use {@link #checkGroovyStyleConstructor(org.codehaus.groovy.ast.ClassNode, org.codehaus.groovy.ast.ClassNode[], org.codehaus.groovy.ast.ASTNode)} )}
++     * @deprecated use {@link #checkGroovyStyleConstructor(ClassNode, ClassNode[], ASTNode)} )}
       */
      @Deprecated
      protected void checkGroovyStyleConstructor(final ClassNode node, final ClassNode[] arguments) {
@@@ -2224,13 -2098,13 +2101,13 @@@
              return;
          }
          if (!extension.beforeVisitMethod(node)) {
--        ErrorCollector collector = (ErrorCollector) node.getNodeMetaData(ERROR_COLLECTOR);
--        if (collector != null) {
--            typeCheckingContext.getErrorCollector().addCollectorContents(collector);
--        } else {
--            startMethodInference(node, typeCheckingContext.getErrorCollector());
--        }
--        node.removeNodeMetaData(ERROR_COLLECTOR);
++            ErrorCollector collector = (ErrorCollector) node.getNodeMetaData(ERROR_COLLECTOR);
++            if (collector != null) {
++                typeCheckingContext.getErrorCollector().addCollectorContents(collector);
++            } else {
++                startMethodInference(node, typeCheckingContext.getErrorCollector());
++            }
++            node.removeNodeMetaData(ERROR_COLLECTOR);
          }
          extension.afterVisitMethod(node);
      }
@@@ -2459,13 -2333,13 +2336,13 @@@
       * This method is responsible for performing type inference on closure argument types whenever code like this is
       * found: <code>foo.collect { it.toUpperCase() }</code>.
       * In this case, the type checker tries to find if the <code>collect</code> method has its {@link Closure} argument
--     * annotated with {@link groovy.transform.stc.ClosureParams}. If yes, then additional type inference can be performed
++     * annotated with {@link ClosureParams}. If yes, then additional type inference can be performed
       * and the type of <code>it</code> may be inferred.
       *
       * @param receiver
       * @param arguments
       * @param expression a closure expression for which the argument types should be inferred
--     * @param param the parameter where to look for a {@link groovy.transform.stc.ClosureParams} annotation.
++     * @param param the parameter where to look for a {@link ClosureParams} annotation.
       * @param selectedMethod the method accepting a closure
       */
      protected void inferClosureParameterTypes(final ClassNode receiver, final Expression arguments, final ClosureExpression expression, final Parameter param, final MethodNode selectedMethod) {
@@@ -2738,7 -2612,7 +2615,7 @@@
  
      /**
       * Given a GenericsType instance, returns a ClassNode which can be used as an inferred type.
--     * @param genericsType a {@link org.codehaus.groovy.ast.GenericsType} representing either a type, a placeholder or a wildcard
++     * @param genericsType a {@link GenericsType} representing either a type, a placeholder or a wildcard
       * @return a class node usable as an inferred type
       */
      private static ClassNode createUsableClassNodeFromGenericsType(final GenericsType genericsType) {
@@@ -3205,7 -3075,7 +3078,7 @@@
       * @param directMethodCallCandidate a method selected by the type checker
       * @param receiver the receiver of the method call
       *@param args the arguments of the method call
--     * @param returnType the original return type, as inferred by the type checker   @return fixed return type if the selected method is {@link org.codehaus.groovy.runtime.DefaultGroovyMethods#withTraits(Object, Class[]) withTraits}
++     * @param returnType the original return type, as inferred by the type checker   @return fixed return type if the selected method is {@link DefaultGroovyMethods#withTraits(Object, Class[]) withTraits}
       */
      private static ClassNode adjustWithTraits(final MethodNode directMethodCallCandidate, final ClassNode receiver, final ClassNode[] args, final ClassNode returnType) {
          if (directMethodCallCandidate instanceof ExtensionMethodNode) {
@@@ -4896,7 -4758,7 +4761,7 @@@
  
      /**
       * Returns a wrapped type if, and only if, the provided class node is a primitive type.
--     * This method differs from {@link ClassHelper#getWrapper(org.codehaus.groovy.ast.ClassNode)} as it will
++     * This method differs from {@link ClassHelper#getWrapper(ClassNode)} as it will
       * return the same instance if the provided type is not a generic type.
       *
       * @param type


[06/50] groovy git commit: Breaking change: allow lower case type names except return type name of method declaration

Posted by pa...@apache.org.
Breaking change: allow lower case type names except return type name of method declaration


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/d3c68531
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/d3c68531
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/d3c68531

Branch: refs/heads/master
Commit: d3c68531e36908680b7ac60b9cbf1a01601e10ae
Parents: c9fbf95
Author: sunlan <su...@apache.org>
Authored: Sat Jan 21 11:57:07 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sat Jan 21 11:57:07 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyParser.g4 | 37 +++++++++-----
 .../apache/groovy/parser/antlr4/AstBuilder.java | 30 +++++------
 .../parser/antlr4/SemanticPredicates.java       | 52 ++++++++++++++++++--
 .../parser/antlr4/GroovyParserTest.groovy       |  6 +++
 .../resources/core/BreakingChange_01x.groovy    | 24 +++++++++
 .../resources/core/BreakingChange_02x.groovy    |  9 ++++
 .../resources/core/BreakingChange_03x.groovy    | 16 ++++++
 .../resources/core/BreakingChange_04x.groovy    | 26 ++++++++++
 .../resources/core/ClassDeclaration_01.groovy   | 10 +++-
 .../src/test/resources/core/Command_01.groovy   |  6 ++-
 10 files changed, 184 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/d3c68531/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index 5cefb90..6f94ec6 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -310,11 +310,10 @@ methodDeclaration[int t, int ct]
     :   { 3 == $ct }?
         returnType[$ct] methodName LPAREN rparen (DEFAULT nls elementValue)?
     |
-        (   modifiersOpt  typeParameters? returnType[$ct]
-        |   modifiers  typeParameters? returnType[$ct]?
-        |
-            { 0 == $t }?
+        (   { 0 == $t }?
             modifiersOpt typeParameters?
+        |   modifiersOpt  typeParameters? returnType[$ct]
+        |   modifiers  typeParameters? returnType[$ct]?
         )
         methodName formalParameters (nls THROWS nls qualifiedClassNameList)?
         (
@@ -333,7 +332,7 @@ methodName
 
 returnType[int ct]
     :
-        type
+        standardType
     |
         // annotation method can not have void return type
         { 3 != $ct }? VOID
@@ -365,12 +364,25 @@ arrayInitializer
     :   LBRACK (variableInitializer (COMMA variableInitializer)* (COMMA)? )? RBRACK
     ;
 
+standardType
+options { baseContext = type; }
+    :   primitiveType (LBRACK RBRACK)*
+    |   standardClassOrInterfaceType (LBRACK RBRACK)*
+    ;
+
 type
     :   primitiveType (LBRACK RBRACK)*
     |   classOrInterfaceType (LBRACK RBRACK)*
     ;
 
 classOrInterfaceType
+    :   (   qualifiedClassName
+        |   qualifiedStandardClassName
+        ) typeArguments?
+    ;
+
+standardClassOrInterfaceType
+options { baseContext = classOrInterfaceType; }
     :   qualifiedStandardClassName typeArguments?
     ;
 
@@ -559,23 +571,24 @@ blockStatement
     ;
 
 localVariableDeclaration
-    :   variableDeclaration[0]
+    :   { !SemanticPredicates.isInvalidLocalVariableDeclaration(_input) }?
+        variableDeclaration[0]
     ;
 
 /**
  *  t   0: local variable declaration; 1: field declaration
  */
 variableDeclaration[int t]
-    :   (   { 0 == $t }? variableModifiersOpt
-        |   { 1 == $t }? modifiersOpt
-        )
-        type variableDeclarators
-    |
-        (   { 0 == $t }? variableModifiers
+    :   (   { 0 == $t }? variableModifiers
         |   { 1 == $t }? modifiers
         )
         type? variableDeclarators
     |
+        (   { 0 == $t }? variableModifiersOpt
+        |   { 1 == $t }? modifiersOpt
+        )
+        type variableDeclarators
+    |
         (   { 0 == $t }? variableModifiers
         |   { 1 == $t }? modifiers
         )

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3c68531/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index c61a2c0..8ab5578 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -3239,8 +3239,14 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
     @Override
     public ClassNode visitClassOrInterfaceType(ClassOrInterfaceTypeContext ctx) {
-        ctx.qualifiedStandardClassName().putNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR, ctx.getNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR));
-        ClassNode classNode = this.visitQualifiedStandardClassName(ctx.qualifiedStandardClassName());
+        ClassNode classNode;
+        if (asBoolean(ctx.qualifiedClassName())) {
+            ctx.qualifiedClassName().putNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR, ctx.getNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR));
+            classNode = this.visitQualifiedClassName(ctx.qualifiedClassName());
+        } else {
+            ctx.qualifiedStandardClassName().putNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR, ctx.getNodeMetaData(IS_INSIDE_INSTANCEOF_EXPR));
+            classNode = this.visitQualifiedStandardClassName(ctx.qualifiedStandardClassName());
+        }
 
         if (asBoolean(ctx.typeArguments())) {
             classNode.setGenericsTypes(
@@ -3496,19 +3502,15 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
     @Override
     public ClassNode visitQualifiedClassName(QualifiedClassNameContext ctx) {
-        ClassNode result = ClassHelper.make(ctx.getText());
-
-        /*
-        if (!isTrue(ctx, IS_INSIDE_INSTANCEOF_EXPR)) { // type in the "instanceof" expression should not have proxy to redirect to it
-            result = this.proxyClassNode(result);
-        }
-        */
-
-        return this.configureAST(result, ctx);
+        return this.createClassNode(ctx);
     }
 
     @Override
     public ClassNode visitQualifiedStandardClassName(QualifiedStandardClassNameContext ctx) {
+        return this.createClassNode(ctx);
+    }
+
+    private ClassNode createClassNode(GroovyParserRuleContext ctx) {
         ClassNode result = ClassHelper.make(ctx.getText());
 
         if (!isTrue(ctx, IS_INSIDE_INSTANCEOF_EXPR)) { // type in the "instanceof" expression should not have proxy to redirect to it
@@ -4257,7 +4259,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
      * <p>
      * Created by Daniel.Sun on 2016/08/23.
      */
-    private static class ModifierNode extends ASTNode {
+    public static class ModifierNode extends ASTNode {
         private Integer type;
         private Integer opCode; // ASM opcode
         private String text;
@@ -4265,7 +4267,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         private boolean repeatable;
 
         public static final int ANNOTATION_TYPE = -999;
-        private static final Map<Integer, Integer> MAP = new HashMap<Integer, Integer>() {
+        public static final Map<Integer, Integer> MODIFIER_OPCODE_MAP = new HashMap<Integer, Integer>() {
             {
                 put(ANNOTATION_TYPE, 0);
                 put(DEF, 0);
@@ -4288,7 +4290,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         public ModifierNode(Integer type) {
             this.type = type;
-            this.opCode = MAP.get(type);
+            this.opCode = MODIFIER_OPCODE_MAP.get(type);
             this.repeatable = ANNOTATION_TYPE == type; // Only annotations are repeatable
 
             if (!asBoolean((Object) this.opCode)) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3c68531/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
index e306e89..811276f 100644
--- 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
@@ -19,11 +19,13 @@
 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 static org.apache.groovy.parser.antlr4.GroovyParser.CapitalizedIdentifier;
-import static org.apache.groovy.parser.antlr4.GroovyParser.Identifier;
-import static org.apache.groovy.parser.antlr4.GroovyParser.StringLiteral;
+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
@@ -103,6 +105,48 @@ public class SemanticPredicates {
         int tokenType = ts.LT(1).getType();
 
         return (Identifier == tokenType || CapitalizedIdentifier == tokenType || StringLiteral == tokenType)
-                && GroovyLangParser.LPAREN == (ts.LT(2).getType());
+                && LPAREN == (ts.LT(2).getType());
     }
+
+    private static final Set<Integer> MODIFIER_SET =
+            Collections.unmodifiableSet(AstBuilder.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/d3c68531/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
index 003a34b..98d434c 100644
--- 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
@@ -333,4 +333,10 @@ class GroovyParserTest extends GroovyTestCase {
         doRunAndTest('bugs/BUG-GROOVY-4762.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');
+    }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3c68531/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_01x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_01x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_01x.groovy
new file mode 100644
index 0000000..3f3b856
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_01x.groovy
@@ -0,0 +1,24 @@
+package core
+
+class a<T> {
+    int x = 1;
+}
+
+a b = new a()
+assert b.x == 1
+
+a<String> b2 = new a<String>()
+assert b2.x == 1
+
+a<String>[] b3 = new a<String>[0]
+assert b3.length == 0
+
+core.a b4 = new a()
+assert b4.x == 1
+
+core.a<String> b5 = new a<String>()
+assert b5.x == 1
+
+core.a<String>[] b6 = new a<String>[0]
+assert b6.length == 0
+

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3c68531/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_02x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_02x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_02x.groovy
new file mode 100644
index 0000000..62e90ed
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_02x.groovy
@@ -0,0 +1,9 @@
+package core
+
+import java.util.concurrent.atomic.AtomicInteger
+
+def inc(AtomicInteger x) { x.incrementAndGet() }
+def a = new AtomicInteger(0)
+
+inc a
+assert 1 == a.get()

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3c68531/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_03x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_03x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_03x.groovy
new file mode 100644
index 0000000..b78abf5
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_03x.groovy
@@ -0,0 +1,16 @@
+package core
+
+class a {}
+a[] b
+b = new a[0]
+assert 0 == b.length
+
+a[] b2 = new a[0]
+assert 0 == b2.length
+
+core.a[] b3
+b3 = new a[0]
+assert 0 == b3.length
+
+core.a[] b4 = new a[0]
+assert 0 == b4.length
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3c68531/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_04x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_04x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_04x.groovy
new file mode 100644
index 0000000..10cfcac
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/BreakingChange_04x.groovy
@@ -0,0 +1,26 @@
+package core
+
+class B<T> {}
+B b
+b = new B()
+assert b instanceof B
+
+B<String> b2
+b2 = new B<String>()
+assert b2 instanceof B
+
+B<String>[] b3
+b3 = new B<String>[0]
+assert b3 instanceof B[]
+
+core.B b4
+b4 = new B()
+assert b4 instanceof B
+
+core.B<String> b5
+b5 = new B<String>()
+assert b5 instanceof B
+
+core.B<String>[] b6
+b6 = new B<String>[0]
+assert b6 instanceof B[]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3c68531/subprojects/groovy-parser-antlr4/src/test/resources/core/ClassDeclaration_01.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/ClassDeclaration_01.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/ClassDeclaration_01.groovy
index 13d0b8e..8260899 100644
--- a/subprojects/groovy-parser-antlr4/src/test/resources/core/ClassDeclaration_01.groovy
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/ClassDeclaration_01.groovy
@@ -44,4 +44,12 @@ C
 
 }
 
-class a {}
\ No newline at end of file
+class a {}
+
+class OutputTransforms {
+        final  static localTransforms = loadOutputTransforms()
+}
+
+class OutputTransforms2 {
+        @Lazy  static localTransforms = loadOutputTransforms()
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3c68531/subprojects/groovy-parser-antlr4/src/test/resources/core/Command_01.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/Command_01.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/Command_01.groovy
index a6188c4..78b7682 100644
--- a/subprojects/groovy-parser-antlr4/src/test/resources/core/Command_01.groovy
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/Command_01.groovy
@@ -11,4 +11,8 @@ z.a x: b(1, 3), y: c(2, 4)
 a b(1, 3), c(2, 4)
 obj.<Integer, Double>a b(1, 3), c(2, 4), d(3, 5)
 println a
-println a = 1
\ No newline at end of file
+// println a = 1  // breaking change
+println a == 1
+
+result.addAll allElements()
+task someTask() {}
\ No newline at end of file


[12/50] groovy git commit: Remove useless code

Posted by pa...@apache.org.
Remove useless code


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/aaf704fd
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/aaf704fd
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/aaf704fd

Branch: refs/heads/master
Commit: aaf704fdc38f231505b7df5c450e1a26811c4f7f
Parents: 00d0cc6
Author: sunlan <su...@apache.org>
Authored: Tue Jan 24 09:27:39 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Jan 24 09:27:39 2017 +0800

----------------------------------------------------------------------
 .../src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java   | 1 -
 1 file changed, 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/aaf704fd/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 4101960..d0b5c72 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -4389,7 +4389,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
     private static final String VALUE_STR = "value";
     private static final String DOLLAR_STR = "$";
     private static final String CALL_STR = "call";
-    private static final String IS_STR = "is";
     private static final String THIS_STR = "this";
     private static final String SUPER_STR = "super";
     private static final String VOID_STR = "void";


[11/50] groovy git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot

Posted by pa...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/00d0cc6e
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/00d0cc6e
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/00d0cc6e

Branch: refs/heads/master
Commit: 00d0cc6e1e689662439a194aca1c199d78236011
Parents: a183a0c 90fe6d2
Author: sunlan <su...@apache.org>
Authored: Tue Jan 24 09:23:32 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Jan 24 09:23:32 2017 +0800

----------------------------------------------------------------------
 .../groovy/inspect/swingui/AstBrowser.groovy    | 50 ++++++++++++++++----
 .../swingui/ScriptToTreeNodeAdapter.groovy      | 10 +++-
 .../src/main/groovy/groovy/ui/Console.groovy    | 45 +++++++++++++++++-
 .../main/groovy/groovy/ui/ConsoleActions.groovy |  7 +++
 .../groovy/groovy/ui/view/BasicMenuBar.groovy   |  1 +
 .../main/resources/groovy/ui/Console.properties |  2 +
 .../src/spec/doc/groovy-console.adoc            |  3 ++
 .../swingui/ScriptToTreeNodeAdapterTest.groovy  | 17 +++++++
 .../groovy/swing/SwingBuilderConsoleTest.groovy | 48 +++++++++++++++++++
 9 files changed, 171 insertions(+), 12 deletions(-)
----------------------------------------------------------------------



[07/50] groovy git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot

Posted by pa...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/ad91e0e4
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/ad91e0e4
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/ad91e0e4

Branch: refs/heads/master
Commit: ad91e0e4a678ccb22e30cdd956367288e9f788cf
Parents: d3c6853 048b658
Author: sunlan <su...@apache.org>
Authored: Sat Jan 21 20:17:52 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sat Jan 21 20:17:52 2017 +0800

----------------------------------------------------------------------
 .../swingui/ScriptToTreeNodeAdapter.groovy      | 95 +++++++++++++++-----
 .../swingui/ScriptToTreeNodeAdapterTest.groovy  | 29 +++++-
 2 files changed, 101 insertions(+), 23 deletions(-)
----------------------------------------------------------------------



[40/50] groovy git commit: Replace the local dependency jar with the one on jitpack repository

Posted by pa...@apache.org.
Replace the local dependency jar with the one on jitpack repository


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/9a0aa609
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/9a0aa609
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/9a0aa609

Branch: refs/heads/master
Commit: 9a0aa6095feee4a22658b3479802a28eb56c7ca2
Parents: 4fb80a1
Author: sunlan <su...@apache.org>
Authored: Sat Apr 1 20:26:38 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sat Apr 1 20:26:38 2017 +0800

----------------------------------------------------------------------
 build.gradle                                |   5 ++++-
 lib/antlr4-gradle-plugin-0.1.2-SNAPSHOT.jar | Bin 16443 -> 0 bytes
 2 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/9a0aa609/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index 33452df..2dee7bc 100644
--- a/build.gradle
+++ b/build.gradle
@@ -31,6 +31,9 @@ buildscript {
         maven {
             url "https://plugins.gradle.org/m2/"
         }
+        maven {
+            url 'https://jitpack.io'
+        }
     }
 
     dependencies {
@@ -43,7 +46,7 @@ buildscript {
         classpath "gradle.plugin.org.nosphere.apache:creadur-rat-gradle:0.1.3"
         classpath "gradle.plugin.com.github.jk1:gradle-license-report:0.3.2"
 
-        classpath files("lib/antlr4-gradle-plugin-0.1.2-SNAPSHOT.jar");
+        classpath "com.github.danielsun1106:antlr4-gradle-plugin:v0.1.2"
     }
 }
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/9a0aa609/lib/antlr4-gradle-plugin-0.1.2-SNAPSHOT.jar
----------------------------------------------------------------------
diff --git a/lib/antlr4-gradle-plugin-0.1.2-SNAPSHOT.jar b/lib/antlr4-gradle-plugin-0.1.2-SNAPSHOT.jar
deleted file mode 100644
index 638ed51..0000000
Binary files a/lib/antlr4-gradle-plugin-0.1.2-SNAPSHOT.jar and /dev/null differ


[43/50] groovy git commit: Update the readme of the Parrot sub-project

Posted by pa...@apache.org.
Update the readme of the Parrot sub-project


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/3b1a7204
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/3b1a7204
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/3b1a7204

Branch: refs/heads/master
Commit: 3b1a72049b37a53c843fb807eba45a9052b007ae
Parents: 929bf81
Author: sunlan <su...@apache.org>
Authored: Sun Apr 2 18:15:44 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Apr 2 18:15:44 2017 +0800

----------------------------------------------------------------------
 subprojects/groovy-parser-antlr4/README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/3b1a7204/subprojects/groovy-parser-antlr4/README.md
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/README.md b/subprojects/groovy-parser-antlr4/README.md
index 910f939..55080e3 100644
--- a/subprojects/groovy-parser-antlr4/README.md
+++ b/subprojects/groovy-parser-antlr4/README.md
@@ -28,7 +28,7 @@ groovy foo.groovy
 groovyOptions.forkOptions.jvmArgs += ["-Dgroovy.antlr4=true"]
 ```
 
-**JVM options to control parsing:**
+**JVM system properties to control parsing:**
 * `groovy.antlr4.cache.threshold`: how frequently to clear DFA cache(default: 50). **Notice:** The more frequently the DFA cache is cleared, the poorer parsing performance will be(you can not set the value that is less than the default value). But the DFA cache has to be cleared to avoid OutOfMemoryError's occurring. 
 * `groovy.extract.doc.comment`: whether to collect groovydoc while parsing groovy source code(default: false)
 


[36/50] groovy git commit: Support command expression in the lambda body

Posted by pa...@apache.org.
Support command expression in the lambda body


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/b017a53b
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/b017a53b
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/b017a53b

Branch: refs/heads/master
Commit: b017a53b822d0824420c5547cf24f4b4f3713d72
Parents: 0954c01
Author: sunlan <su...@apache.org>
Authored: Fri Mar 24 21:59:41 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Mar 24 21:59:41 2017 +0800

----------------------------------------------------------------------
 .../main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 | 2 +-
 .../main/java/org/apache/groovy/parser/antlr4/AstBuilder.java   | 4 ++--
 .../src/test/resources/core/Lambda_01x.groovy                   | 5 +++--
 3 files changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/b017a53b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index e7ba77e..71b7f0e 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -502,7 +502,7 @@ standardLambdaParameters
 
 lambdaBody
 	:	block
-	|	expression
+	|	statementExpression
 	;
 
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/b017a53b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index b92780c..e59dd5f 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -3106,8 +3106,8 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
     @Override
     public Statement visitLambdaBody(LambdaBodyContext ctx) {
-        if (asBoolean(ctx.expression())) {
-            return this.configureAST(new ExpressionStatement((Expression) this.visit(ctx.expression())), ctx);
+        if (asBoolean(ctx.statementExpression())) {
+            return this.configureAST((ExpressionStatement) this.visit(ctx.statementExpression()), ctx);
         }
 
         if (asBoolean(ctx.block())) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/b017a53b/subprojects/groovy-parser-antlr4/src/test/resources/core/Lambda_01x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/Lambda_01x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/Lambda_01x.groovy
index a1400a3..138711d 100644
--- a/subprojects/groovy-parser-antlr4/src/test/resources/core/Lambda_01x.groovy
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/Lambda_01x.groovy
@@ -43,5 +43,6 @@ assert 6 == c()(3)
 c = { (e) -> { e * 2 } }
 assert 6 == c()(3)
 
-
-
+assert ['1', '2', '3'] == [0, 1, 2].collect(e -> String.valueOf e + 1)
+assert [3, 4, 5] == ['0', '1', '2'].collect(e -> Integer.parseInt e plus 1 plus 2)
+assert [4] == ['0'].collect(e -> e.length() plus 1 plus 2)
\ No newline at end of file


[19/50] groovy git commit: Add a test case for GROOVY-4438: Use of an inner enum causes compilation to go into infinite loop

Posted by pa...@apache.org.
Add a test case for GROOVY-4438: Use of an inner enum causes compilation to go into infinite loop


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/83e26af5
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/83e26af5
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/83e26af5

Branch: refs/heads/master
Commit: 83e26af514f9d349937f110919dd78bdcb62316e
Parents: a8e2874
Author: sunlan <su...@apache.org>
Authored: Wed Jan 25 00:47:58 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Jan 25 00:47:58 2017 +0800

----------------------------------------------------------------------
 .../groovy/parser/antlr4/GroovyParserTest.groovy      | 14 +++++++-------
 .../src/test/resources/bugs/BUG-GROOVY-4438.groovy    |  8 ++++++++
 2 files changed, 15 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/83e26af5/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
index 5b78c40..5cefbf9 100644
--- 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
@@ -328,13 +328,6 @@ class GroovyParserTest extends GroovyTestCase {
         doTest('core/Unicode_01.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');
-    }
-
     void "test groovy core - BreakingChanges"() {
         doRunAndTest('core/BreakingChange_01x.groovy');
         doRunAndTest('core/BreakingChange_02x.groovy');
@@ -346,4 +339,11 @@ class GroovyParserTest extends GroovyTestCase {
         doRunAndTest('core/Array_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');
+    }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/83e26af5/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4438.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4438.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4438.groovy
new file mode 100644
index 0000000..c62dfec
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4438.groovy
@@ -0,0 +1,8 @@
+enum Outer {
+    A, B
+    enum Inner{X, Y}
+}
+assert Outer.A instanceof Outer
+assert Outer.B instanceof Outer
+assert Outer.Inner.X instanceof Outer.Inner
+assert Outer.Inner.Y instanceof Outer.Inner
\ No newline at end of file


[09/50] groovy git commit: Remove useless code

Posted by pa...@apache.org.
Remove useless code


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/ac530875
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/ac530875
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/ac530875

Branch: refs/heads/master
Commit: ac5308758352140b0ab0783028c058e7fa9ee873
Parents: 75d920b
Author: sunlan <su...@apache.org>
Authored: Sun Jan 22 13:59:45 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Jan 22 13:59:45 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/AstBuilder.java    | 13 -------------
 1 file changed, 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/ac530875/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index fa75abf..870a349 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -270,9 +270,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
     @Override
     public ImportNode visitImportDeclaration(ImportDeclarationContext ctx) {
-        // GROOVY-6094
-        moduleNode.putNodeMetaData(IMPORT_NODE_CLASS, IMPORT_NODE_CLASS);
-
         ImportNode importNode;
 
         boolean hasStatic = asBoolean(ctx.STATIC());
@@ -329,15 +326,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             }
         }
 
-        // TODO verify whether the following code is useful or not
-        // we're using node metadata here in order to fix GROOVY-6094
-        // without breaking external APIs
-        Object node = moduleNode.getNodeMetaData(IMPORT_NODE_CLASS);
-        if (null != node && IMPORT_NODE_CLASS != node) {
-            this.configureAST((ImportNode) node, importNode);
-        }
-        moduleNode.removeNodeMetaData(IMPORT_NODE_CLASS);
-
         return this.configureAST(importNode, ctx);
     }
 
@@ -4398,7 +4386,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
     private final Deque<ClassNode> classNodeStack = new ArrayDeque<>();
     private final Deque<List<InnerClassNode>> anonymousInnerClassesDefinedInMethodStack = new ArrayDeque<>();
     private int anonymousInnerClassCounter = 1;
-    private static final Class<ImportNode> IMPORT_NODE_CLASS = ImportNode.class;
     private static final String QUESTION_STR = "?";
     private static final String DOT_STR = ".";
     private static final String SUB_STR = "-";


[32/50] groovy git commit: Remove "threadsafe", which was mistaken as Groovy keyword

Posted by pa...@apache.org.
Remove "threadsafe", which was mistaken as Groovy keyword


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a9c70466
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a9c70466
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a9c70466

Branch: refs/heads/master
Commit: a9c704665e249ac5c067e0d8037ab228a20fb3a9
Parents: 49feef5
Author: sunlan <su...@apache.org>
Authored: Sun Jan 29 21:42:46 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Jan 29 21:42:46 2017 +0800

----------------------------------------------------------------------
 .../src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4  | 1 -
 .../src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 | 1 -
 2 files changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/a9c70466/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4
index 1f990ad..ec7a08d 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4
@@ -335,7 +335,6 @@ AS              : 'as';
 DEF             : 'def';
 IN              : 'in';
 TRAIT           : 'trait';
-THREADSAFE      : 'threadsafe';
 
 
 // �3.9 Keywords

http://git-wip-us.apache.org/repos/asf/groovy/blob/a9c70466/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index 2df6b50..e7ba77e 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -1213,7 +1213,6 @@ keywords
     |   SWITCH
     |   SYNCHRONIZED
     |   THIS
-    |   THREADSAFE
     |   THROW
     |   THROWS
     |   TRANSIENT


[42/50] groovy git commit: Support expressions span rows

Posted by pa...@apache.org.
Support expressions span rows


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/929bf811
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/929bf811
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/929bf811

Branch: refs/heads/master
Commit: 929bf81114a2f0ea4fa231e283ac3e3b4b2bc5d4
Parents: c9b4ee7
Author: sunlan <su...@apache.org>
Authored: Sun Apr 2 17:24:43 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Apr 2 17:24:43 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyParser.g4 | 26 +++++++-------
 .../test/resources/core/Expression_23x.groovy   | 38 ++++++++++++++++++++
 2 files changed, 51 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/929bf811/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index 501938b..a328054 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -829,7 +829,7 @@ expression
     |   left=expression op=(ADD | SUB) nls right=expression                                 #additiveExprAlt
 
     // bit shift expressions (level 6)
-    |   left=expression
+    |   left=expression nls
             (           (   dlOp=LT LT
                         |   tgOp=GT GT GT
                         |   dgOp=GT GT
@@ -841,11 +841,11 @@ expression
         right=expression                                                                    #shiftExprAlt
 
     // boolean relational expressions (level 7)
-    |   left=expression op=(AS | INSTANCEOF | NOT_INSTANCEOF) nls type                      #relationalExprAlt
-    |   left=expression op=(LE | GE | GT | LT | IN | NOT_IN)  nls right=expression          #relationalExprAlt
+    |   left=expression nls op=(AS | INSTANCEOF | NOT_INSTANCEOF) nls type                      #relationalExprAlt
+    |   left=expression nls op=(LE | GE | GT | LT | IN | NOT_IN)  nls right=expression          #relationalExprAlt
 
     // equality/inequality (==/!=) (level 8)
-    |   left=expression
+    |   left=expression nls
             op=(    IDENTICAL
                |    NOT_IDENTICAL
                |    EQUAL
@@ -857,27 +857,27 @@ expression
     // regex find and match (=~ and ==~) (level 8.5)
     // jez: moved =~ closer to precedence of == etc, as...
     // 'if (foo =~ "a.c")' is very close in intent to 'if (foo == "abc")'
-    |   left=expression op=(REGEX_FIND | REGEX_MATCH) nls right=expression                  #regexExprAlt
+    |   left=expression nls op=(REGEX_FIND | REGEX_MATCH) nls right=expression                  #regexExprAlt
 
     // bitwise or non-short-circuiting and (&)  (level 9)
-    |   left=expression op=BITAND nls right=expression                                      #andExprAlt
+    |   left=expression nls op=BITAND nls right=expression                                      #andExprAlt
 
     // exclusive or (^)  (level 10)
-    |   left=expression op=XOR nls right=expression                                         #exclusiveOrExprAlt
+    |   left=expression nls op=XOR nls right=expression                                         #exclusiveOrExprAlt
 
     // bitwise or non-short-circuiting or (|)  (level 11)
-    |   left=expression op=BITOR nls right=expression                                       #inclusiveOrExprAlt
+    |   left=expression nls op=BITOR nls right=expression                                       #inclusiveOrExprAlt
 
     // logical and (&&)  (level 12)
-    |   left=expression op=AND nls right=expression                                         #logicalAndExprAlt
+    |   left=expression nls op=AND nls right=expression                                         #logicalAndExprAlt
 
     // logical or (||)  (level 13)
-    |   left=expression op=OR nls right=expression                                          #logicalOrExprAlt
+    |   left=expression nls op=OR nls right=expression                                          #logicalOrExprAlt
 
     // conditional test (level 14)
-    |   <assoc=right> con=expression
-        (   nls QUESTION nls tb=expression nls COLON nls
-        |   nls ELVIS nls
+    |   <assoc=right> con=expression nls
+        (   QUESTION nls tb=expression nls COLON nls
+        |   ELVIS nls
         )
         fb=expression                                                                       #conditionalExprAlt
 

http://git-wip-us.apache.org/repos/asf/groovy/blob/929bf811/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
index 8962219..b87b58d 100644
--- a/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
@@ -43,3 +43,41 @@ def m(p1
 }
 assert 6 == m()
 
+def w
+    =
+        1
+            <<
+                2
+assert 4 == w
+assert 'a'
+            instanceof
+                        String
+assert 1
+            <
+                2
+
+assert 1
+            ==
+                1
+
+assert 'a'
+            ==~
+                /a/
+assert true
+            &
+                true
+assert true
+            ^
+                false
+assert true
+            |
+                true
+
+assert true
+            &&
+                true
+
+assert true
+            ||
+                true
+


[30/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/8c644fa7
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/8c644fa7
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/8c644fa7

Branch: refs/heads/master
Commit: 8c644fa7311c15191fc3b9def0290ed8339bd0ea
Parents: 5392eb4
Author: sunlan <su...@apache.org>
Authored: Sun Jan 29 02:01:49 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Jan 29 02:01:49 2017 +0800

----------------------------------------------------------------------
 .../antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4    | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/8c644fa7/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index c892a0f..2df6b50 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -370,7 +370,7 @@ options { baseContext = type; }
 
 type
     :   primitiveType (LBRACK RBRACK)*
-    |   classOrInterfaceType (LBRACK RBRACK)*
+    |   generalClassOrInterfaceType (LBRACK RBRACK)*
     ;
 
 classOrInterfaceType
@@ -379,6 +379,11 @@ classOrInterfaceType
         ) typeArguments?
     ;
 
+generalClassOrInterfaceType
+options { baseContext = classOrInterfaceType; }
+    :   qualifiedClassName typeArguments?
+    ;
+
 standardClassOrInterfaceType
 options { baseContext = classOrInterfaceType; }
     :   qualifiedStandardClassName typeArguments?


[28/50] groovy git commit: Add more test cases for the standard "for" loop statement

Posted by pa...@apache.org.
Add more test cases for the standard "for" loop statement


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a033231e
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a033231e
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a033231e

Branch: refs/heads/master
Commit: a033231e223bc7fec108773bec200c5cfb33195b
Parents: 4e3b987
Author: sunlan <su...@apache.org>
Authored: Sat Jan 28 23:00:51 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sat Jan 28 23:00:51 2017 +0800

----------------------------------------------------------------------
 .../src/test/resources/core/For_05x.groovy      | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/a033231e/subprojects/groovy-parser-antlr4/src/test/resources/core/For_05x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/For_05x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/For_05x.groovy
index fe55805..959d2c0 100644
--- a/subprojects/groovy-parser-antlr4/src/test/resources/core/For_05x.groovy
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/For_05x.groovy
@@ -6,8 +6,16 @@ def testCS() {
     for (int i = 0, n = 5; i < n; i++) {
         result += i
     }
-
     assert 10 == result
+
+    result = 0;
+    int i;
+    int j;
+    for (i = 1, j = 5; i < j; i++, j--) {
+        result += i;
+        result += j;
+    }
+    assert 12 == result
 }
 testCS();
 
@@ -16,7 +24,15 @@ def test() {
     for (int i = 0, n = 5; i < n; i++) {
         result += i
     }
-
     assert 10 == result
+
+    result = 0;
+    int i;
+    int j;
+    for (i = 1, j = 5; i < j; i++, j--) {
+        result += i;
+        result += j;
+    }
+    assert 12 == result
 }
 test();


[44/50] groovy git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot

Posted by pa...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot

# Conflicts:
#	.travis.yml
#	build.gradle
#	gradle/wrapper/gradle-wrapper.jar
#	gradle/wrapper/gradle-wrapper.properties
#	src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
#	src/test/groovy/EqualsTest.groovy
#	subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java
#	subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/transform/MacroInvocationTrap.java
#	subprojects/groovy-macro/src/test/groovy/org/codehaus/groovy/macro/MacroTest.groovy


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/921fa3d9
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/921fa3d9
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/921fa3d9

Branch: refs/heads/master
Commit: 921fa3d90e2557bcf5a21d2be4886b0a7f0a2c35
Parents: 3b1a720 fb1f14a
Author: sunlan <su...@apache.org>
Authored: Fri Apr 7 21:30:13 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Apr 7 21:30:30 2017 +0800

----------------------------------------------------------------------
 build.gradle                                    |  10 +-
 gradle.properties                               |   4 +-
 gradle/assemble.gradle                          |  52 ++-
 gradle/wrapper/gradle-wrapper.jar               | Bin 54208 -> 54227 bytes
 gradle/wrapper/gradle-wrapper.properties        |   5 +-
 security/groovy.policy                          |   2 +
 settings.gradle                                 |   4 +
 .../beans/ListenerListASTTransformation.groovy  |   3 +-
 src/main/groovy/lang/MetaClassImpl.java         |   5 -
 src/main/groovy/transform/BaseScript.java       |   2 +-
 src/main/groovy/transform/MapConstructor.java   |   4 +-
 src/main/groovy/transform/TupleConstructor.java |   4 +-
 .../transform/builder/DefaultStrategy.java      |   8 +-
 src/main/groovy/util/NodeList.java              |   3 +-
 src/main/org/codehaus/groovy/ast/ClassNode.java |   3 +-
 .../groovy/ast/TransformingCodeVisitor.java     | 340 ++++++++++++++++++
 .../org/codehaus/groovy/ast/VariableScope.java  |  17 +-
 .../codehaus/groovy/ast/tools/GeneralUtils.java |   4 +-
 .../classgen/ClassCompletionVerifier.java       |  44 ++-
 .../groovy/classgen/asm/CompileStack.java       |  17 +-
 .../classgen/asm/OptimizingStatementWriter.java |  18 +-
 .../codehaus/groovy/control/ErrorCollector.java |   6 +-
 .../org/codehaus/groovy/control/SourceUnit.java |   4 +
 .../codehaus/groovy/reflection/ClassInfo.java   |  55 ++-
 .../groovy/runtime/DefaultGroovyMethods.java    |  64 +++-
 .../metaclass/MetaClassRegistryImpl.java        |  12 +-
 .../codehaus/groovy/syntax/SyntaxException.java |   5 +
 .../transform/ImmutableASTTransformation.java   |  11 +-
 .../transform/MemoizedASTTransformation.java    |   7 +-
 .../stc/StaticTypeCheckingSupport.java          |   2 +-
 .../stc/StaticTypeCheckingVisitor.java          |  12 +-
 .../trait/SuperCallTraitTransformer.java        |  83 +++--
 .../transform/trait/TraitASTTransformation.java | 104 ++++--
 .../groovy/transform/trait/TraitComposer.java   |  96 +++--
 .../trait/TraitReceiverTransformer.java         |  97 +++--
 .../util/ManagedConcurrentLinkedQueue.java      | 180 ++++++++++
 .../codehaus/groovy/util/ManagedLinkedList.java |   2 +
 src/spec/doc/core-semantics.adoc                |   4 +-
 src/spec/doc/grape.adoc                         |   6 +-
 src/spec/doc/working-with-collections.adoc      |  20 +-
 src/spec/test/ClosuresSpecTest.groovy           |   2 +-
 .../test/gdk/WorkingWithCollectionsTest.groovy  |  20 +-
 src/test/groovy/bugs/Groovy6792Bug.groovy       |  49 +++
 src/test/groovy/bugs/Groovy7248Bug.groovy       |  67 ++++
 src/test/groovy/bugs/Groovy7797Bug.groovy       |  38 ++
 src/test/groovy/bugs/Groovy7909Bug.groovy       |  76 ++++
 src/test/groovy/bugs/Groovy8046Bug.groovy       |  52 +++
 src/test/groovy/bugs/Groovy8048Bug.groovy       |  46 +++
 src/test/groovy/bugs/Groovy8085Bug.groovy       |  91 +++++
 src/test/groovy/bugs/Groovy8110Bug.groovy       |  45 +++
 src/test/groovy/bugs/Groovy8140Bug.groovy       |  48 +++
 src/test/groovy/util/logging/Log4j2Test.groovy  |  36 +-
 .../asm/sc/bugs/ReproducibleBytecodeBugs.groovy |  92 +++++
 .../MemoizedASTTransformationTest.groovy        |  12 +
 .../ManagedConcurrentLinkedQueueTest.groovy     |  88 +++++
 .../groovy/inspect/swingui/AstBrowser.groovy    |  79 ++--
 .../swingui/AstNodeToScriptAdapter.groovy       |  51 ++-
 .../swingui/AstNodeToScriptAdapterTest.groovy   |  92 +++++
 subprojects/groovy-macro/build.gradle           |   2 +-
 .../macro/methods/MacroGroovyMethods.java       | 207 +++++++++++
 .../codehaus/groovy/macro/runtime/Macro.java    |  37 ++
 .../groovy/macro/runtime/MacroBuilder.java      |  22 +-
 .../groovy/macro/runtime/MacroContext.java      |  71 ++++
 .../macro/runtime/MacroGroovyMethods.java       |  53 ---
 .../groovy/macro/runtime/MacroStub.java         |  33 ++
 .../transform/MacroCallTransformingVisitor.java | 156 ++++++++
 .../groovy/macro/transform/MacroClass.java      |   8 +
 .../transform/MacroClassTransformation.java     | 138 +++++++
 .../macro/transform/MacroInvocationTrap.java    | 274 --------------
 .../macro/transform/MacroMethodsCache.java      | 144 ++++++++
 .../macro/transform/MacroTransformation.java    |  34 +-
 .../macro/transform/TransformingMacroTrap.java  | 343 ------------------
 ....codehaus.groovy.transform.ASTTransformation |   1 +
 .../groovy/macro/ExampleMacroMethods.java       |  52 +++
 .../org/codehaus/groovy/macro/MacroTest.groovy  |  24 ++
 .../groovy/macro/MacroTransformationTest.groovy |  70 ++++
 .../groovy/macro/matcher/ASTMatcherTest.groovy  | 357 ++++++++++++++++++-
 .../org.codehaus.groovy.runtime.ExtensionModule |  17 +
 .../src/main/java/groovy/sql/Sql.java           |  27 +-
 .../groovy/groovy/sql/SqlCompleteTest.groovy    |  17 +
 .../main/java/groovy/xml/dom/DOMCategory.java   |   5 +-
 .../groovy-xml/src/spec/doc/xml-userguide.adoc  |   2 +-
 subprojects/stress/README.adoc                  |  40 +++
 subprojects/stress/build.gradle                 |  28 ++
 .../org/apache/groovy/stress/util/GCUtils.java  |  39 ++
 .../apache/groovy/stress/util/ThreadUtils.java  |  43 +++
 .../reflection/ClassInfoDeadlockStressTest.java | 138 +++++++
 .../reflection/ClassInfoLeakStressTest.java     | 101 ++++++
 .../ManagedConcurrentLinkedQueueStressTest.java | 164 +++++++++
 .../util/ManagedConcurrentMapStressTest.java    | 136 +++++++
 .../ManagedConcurrentValueMapStressTest.java    | 135 +++++++
 91 files changed, 4204 insertions(+), 1017 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/921fa3d9/build.gradle
----------------------------------------------------------------------
diff --cc build.gradle
index 2dee7bc,0bcddc9..469048f
--- a/build.gradle
+++ b/build.gradle
@@@ -174,8 -169,7 +174,8 @@@ ext 
      slf4jVersion = '1.7.21'
      xmlunitVersion = '1.6'
      xstreamVersion = '1.4.9'
-     spockVersion = '1.0-groovy-2.4'
+     spockVersion = '1.1-groovy-2.4-SNAPSHOT' // supports 3.0
 +    antlr4Version = '4.6.0.3'
      isReleaseVersion = !groovyVersion.toLowerCase().endsWith("snapshot")
  }
  

http://git-wip-us.apache.org/repos/asf/groovy/blob/921fa3d9/gradle/assemble.gradle
----------------------------------------------------------------------
diff --cc gradle/assemble.gradle
index acb4540,72ef7f5..ab8c69c
--- a/gradle/assemble.gradle
+++ b/gradle/assemble.gradle
@@@ -191,10 -191,9 +191,10 @@@ allprojects 
                          }
  
                          zipfileset(src: configurations.runtime.files.find { file -> file.name.startsWith('asm-util') },
-                                 includes: 'org/objectweb/asm/util/Printer.class,org/objectweb/asm/util/Textifier.class,org/objectweb/asm/util/Trace*')
+                                 includes: 'org/objectweb/asm/util/Printer.class,org/objectweb/asm/util/Textifier.class,org/objectweb/asm/util/ASMifier.class,org/objectweb/asm/util/Trace*')
                      }
 -                    rule pattern: 'antlr.**', result: 'groovyjarjarantlr.@1'
 +                    rule pattern: 'antlr.**', result: 'groovyjarjarantlr.@1' // antlr2
 +                    rule pattern: 'org.antlr.**', result: 'groovyjarjarantlr4.@1' // antlr4
                      rule pattern: 'org.objectweb.**', result: 'groovyjarjarasm.@1'
                      rule pattern: 'org.apache.commons.cli.**', result: 'groovyjarjarcommonscli.@1'
                  }

http://git-wip-us.apache.org/repos/asf/groovy/blob/921fa3d9/src/main/groovy/lang/MetaClassImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/groovy/blob/921fa3d9/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/groovy/blob/921fa3d9/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/groovy/blob/921fa3d9/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/groovy/blob/921fa3d9/src/main/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
----------------------------------------------------------------------


[29/50] groovy git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot

Posted by pa...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/groovy into parrot


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/5392eb4f
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/5392eb4f
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/5392eb4f

Branch: refs/heads/master
Commit: 5392eb4fa0970fb7036fc2730ec5f177af278039
Parents: a033231 84462bb
Author: sunlan <su...@apache.org>
Authored: Sun Jan 29 00:07:35 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Jan 29 00:07:35 2017 +0800

----------------------------------------------------------------------
 src/main/groovy/lang/MetaClassImpl.java         | 21 +++++----
 .../groovy/antlr/AntlrParserPlugin.java         | 19 +++++++-
 src/main/org/codehaus/groovy/ast/ASTNode.java   |  2 +-
 .../asm/sc/StaticTypesCallSiteWriter.java       |  2 +-
 .../groovy/transform/LogASTTransformation.java  | 24 ++++++----
 .../trait/SuperCallTraitTransformer.java        | 44 ++++++++++--------
 .../transform/trait/TraitASTTransformation.java |  6 +++
 .../codehaus/groovy/transform/trait/Traits.java |  2 +-
 src/test/groovy/bugs/Groovy5318Bug.groovy       | 30 ++++++++++++
 src/test/groovy/bugs/Groovy8060Bug.groovy       | 39 ++++++++++++++++
 src/test/groovy/bugs/Groovy8065Bug.groovy       | 48 ++++++++++++++++++++
 src/test/groovy/bugs/Groovy8066Bug.groovy       | 33 ++++++++++++++
 12 files changed, 229 insertions(+), 41 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/5392eb4f/src/main/groovy/lang/MetaClassImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/groovy/blob/5392eb4f/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
----------------------------------------------------------------------
diff --cc src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
index a1d18bf,c34be18..37bfe88
--- a/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
+++ b/src/main/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
@@@ -627,12 -626,12 +627,12 @@@ public class StaticTypesCallSiteWriter 
          ClassNode classNode = controller.getClassNode();
          ClassNode rType = typeChooser.resolveType(receiver, classNode);
          ClassNode aType = typeChooser.resolveType(arguments, classNode);
 -        if (trySubscript(receiver, message, arguments, rType, aType)) {
 +        if (trySubscript(receiver, message, arguments, rType, aType, safe)) {
              return;
          }
-         // new try with flow type instead of declaration type
+         // now try with flow type instead of declaration type
          rType = receiver.getNodeMetaData(StaticTypesMarker.INFERRED_TYPE);
 -        if (rType!=null && trySubscript(receiver, message, arguments, rType, aType)) {
 +        if (rType!=null && trySubscript(receiver, message, arguments, rType, aType, safe)) {
              return;
          }
          // todo: more cases


[13/50] groovy git commit: Refine the position information of postfix expression AST node

Posted by pa...@apache.org.
Refine the position information of postfix expression AST node


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/65c2bf52
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/65c2bf52
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/65c2bf52

Branch: refs/heads/master
Commit: 65c2bf5244a260ed9821f1b23ba4e8f060d113b6
Parents: aaf704f
Author: sunlan <su...@apache.org>
Authored: Tue Jan 24 12:03:12 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Jan 24 12:03:12 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyParser.g4 | 22 ++++++++++++++--
 .../apache/groovy/parser/antlr4/AstBuilder.java | 27 +++++++++++++++-----
 2 files changed, 40 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/65c2bf52/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index eb93aeb..5bf6f87 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -667,9 +667,13 @@ locals[boolean resourcesExists = false]
         )
     ;
 
+assertStatement
+locals[ String footprint = "" ]
+    :   ASSERT ce=expression ((COLON | COMMA) nls me=expression)?
+    ;
+
 statement
     :   block                                                                                               #blockStmtAlt
-    |   ASSERT ce=expression ((COLON | COMMA) nls me=expression)?                                           #assertStmtAlt
     |   IF parExpression nls tb=statement ((nls | sep) ELSE nls fb=statement)?                              #ifElseStmtAlt
     |   loopStatement                                                                                       #loopStmtAlt
 
@@ -688,6 +692,8 @@ statement
     // Import statement.  Can be used in any scope.  Has "import x as y" also.
     |   importDeclaration                                                                                   #importStmtAlt
 
+    |   assertStatement                                                                                     #assertStmtAlt
+
     |   typeDeclaration                                                                                     #typeDeclarationStmtAlt
     |   localVariableDeclaration                                                                            #localVariableDeclarationStmtAlt
 
@@ -786,11 +792,23 @@ statementExpression
     |   commandExpression                   #commandExprAlt
     ;
 
+postfixExpression
+locals[ boolean isInsideAssert ]
+@init {
+    try {
+        $isInsideAssert = null != $assertStatement::footprint;
+    } catch(NullPointerException e) {
+        $isInsideAssert = false;
+    }
+}
+    :   pathExpression op=(INC | DEC)?
+    ;
+
 expression
     // qualified names, array expressions, method invocation, post inc/dec, type casting (level 1)
     // The cast expression must be put before pathExpression to resovle the ambiguities between type casting and call on parentheses expression, e.g. (int)(1 / 2)
     :   castParExpression expression                                                        #castExprAlt
-    |   pathExpression op=(INC | DEC)?                                                      #postfixExprAlt
+    |   postfixExpression                                                                   #postfixExprAlt
 
     // ~(BNOT)/!(LNOT) (level 1)
     |   (BITNOT | NOT) nls expression                                                       #unaryNotExprAlt

http://git-wip-us.apache.org/repos/asf/groovy/blob/65c2bf52/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index d0b5c72..f3195ef 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -262,8 +262,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         PackageNode packageNode = moduleNode.getPackage();
 
-        this.visitAnnotationsOpt(ctx.annotationsOpt()).stream()
-                .forEach(packageNode::addAnnotation);
+        this.visitAnnotationsOpt(ctx.annotationsOpt()).forEach(packageNode::addAnnotation);
 
         return this.configureAST(packageNode, ctx);
     }
@@ -331,7 +330,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
     // statement {    --------------------------------------------------------------------
     @Override
-    public AssertStatement visitAssertStmtAlt(AssertStmtAltContext ctx) {
+    public AssertStatement visitAssertStatement(AssertStatementContext ctx) {
         Expression conditionExpression = (Expression) this.visit(ctx.ce);
         BooleanExpression booleanExpression =
                 this.configureAST(
@@ -345,7 +344,11 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
         return this.configureAST(new AssertStatement(booleanExpression,
                         (Expression) this.visit(ctx.me)),
                 ctx);
+    }
 
+    @Override
+    public AssertStatement visitAssertStmtAlt(AssertStmtAltContext ctx) {
+        return this.configureAST(this.visitAssertStatement(ctx.assertStatement()), ctx);
     }
 
     @Override
@@ -2214,19 +2217,29 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
     }
 
     @Override
-    public Expression visitPostfixExprAlt(PostfixExprAltContext ctx) {
+    public Expression visitPostfixExpression(PostfixExpressionContext ctx) {
         Expression pathExpr = this.visitPathExpression(ctx.pathExpression());
 
         if (asBoolean(ctx.op)) {
-            return this.configureAST(
-                    new PostfixExpression(pathExpr, createGroovyToken(ctx.op)),
-                    ctx.op/*powerassert requires different column for values, so we have to copy the location of op*/);
+            PostfixExpression postfixExpression = new PostfixExpression(pathExpr, createGroovyToken(ctx.op));
+
+            if (ctx.isInsideAssert) {
+                // powerassert requires different column for values, so we have to copy the location of op
+                return this.configureAST(postfixExpression, ctx.op);
+            } else {
+                return this.configureAST(postfixExpression, ctx);
+            }
         }
 
         return this.configureAST(pathExpr, ctx);
     }
 
     @Override
+    public Expression visitPostfixExprAlt(PostfixExprAltContext ctx) {
+        return this.visitPostfixExpression(ctx.postfixExpression());
+    }
+
+    @Override
     public Expression visitUnaryNotExprAlt(UnaryNotExprAltContext ctx) {
         if (asBoolean(ctx.NOT())) {
             return this.configureAST(


[48/50] groovy git commit: Minor refactoring and update readme

Posted by pa...@apache.org.
Minor refactoring and update readme


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/5594f294
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/5594f294
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/5594f294

Branch: refs/heads/master
Commit: 5594f294fd630503f27786166d65fd2d76898c9c
Parents: d3fde8d
Author: sunlan <su...@apache.org>
Authored: Mon Apr 10 16:25:59 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Mon Apr 10 16:25:59 2017 +0800

----------------------------------------------------------------------
 subprojects/groovy-parser-antlr4/README.md                       | 2 +-
 .../java/org/apache/groovy/parser/antlr4/GroovydocManager.java   | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/5594f294/subprojects/groovy-parser-antlr4/README.md
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/README.md b/subprojects/groovy-parser-antlr4/README.md
index 55080e3..c21720e 100644
--- a/subprojects/groovy-parser-antlr4/README.md
+++ b/subprojects/groovy-parser-antlr4/README.md
@@ -11,7 +11,7 @@ The new parser(Parrot) can parse Groovy source code and construct the related AS
 * default method of interface
 * new operators: identity operators(`===`, `!==`), elvis assignment(`?=`), `!in`, `!instanceof`
 * safe index(e.g. `nullableVar?[1, 2]`)
-* groovydoc attached to AST node as metadata
+* runtime groovydoc(i.e. groovydoc with `@Groovydoc`), groovydoc attached to AST node as metadata
 
 **How to enable the new parser**
 * In the gradle build the property useAntlr4 has to be set to enable the build of the parser and the execution of all tests with it. Command line example:

http://git-wip-us.apache.org/repos/asf/groovy/blob/5594f294/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
index 092d73b..20be29d 100644
--- 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
@@ -27,8 +27,8 @@ public class GroovydocManager {
     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;
-    public static final String VALUE = "value";
-    public static final String RUNTIME_GROOVYDOC_PATTERN = "(?s)/[*][*]\\s+(\\s+[*]\\s*)*@Groovydoc\\b.+?[*]/";
+    private static final String VALUE = "value";
+    private static final String RUNTIME_GROOVYDOC_PATTERN = "(?s)/[*][*]\\s+(\\s+[*]\\s*)*@Groovydoc\\b.+?[*]/";
     private AstBuilder astBuilder;
 
     static {


[49/50] groovy git commit: Refine the annotation Groovydoc

Posted by pa...@apache.org.
Refine the annotation Groovydoc


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/ce126090
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/ce126090
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/ce126090

Branch: refs/heads/master
Commit: ce12609009c6572247d8d194047aac6812753b92
Parents: 5594f29
Author: sunlan <su...@apache.org>
Authored: Mon Apr 10 23:58:37 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Mon Apr 10 23:58:37 2017 +0800

----------------------------------------------------------------------
 src/main/groovy/lang/Groovydoc.java | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/ce126090/src/main/groovy/lang/Groovydoc.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/lang/Groovydoc.java b/src/main/groovy/lang/Groovydoc.java
index d27dfcb..bd21ce7 100644
--- a/src/main/groovy/lang/Groovydoc.java
+++ b/src/main/groovy/lang/Groovydoc.java
@@ -1,15 +1,20 @@
 package groovy.lang;
 
+import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
 /**
- * Store the groovydoc for the annotated elements
+ * An annotation to hold the groovydoc for the annotated element at runtime, we can it "Runtime Groovydoc".
+ * Runtime Groovydoc is a bit like Python's Documentation Strings and will be useful for IDE and developers who set a high value on documentations.
  *
- * Created by Daniel on 2017/4/9.
+ * The usage is very simple, just place @Groovydoc at the beginning of the content of groovydoc, then the new parser Parrot will attach the annotation Groovydoc automatically
+ *
+ * @since 3.0.0
  */
+@Documented
 @Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR})
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Groovydoc {


[50/50] groovy git commit: Merge branch 'parrot'

Posted by pa...@apache.org.
Merge branch 'parrot'


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a3f8671b
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a3f8671b
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a3f8671b

Branch: refs/heads/master
Commit: a3f8671b5fb6ce83a7c3c65c04d46626ddbb646a
Parents: e0d5596 ce12609
Author: paulk <pa...@asert.com.au>
Authored: Tue Apr 11 07:13:48 2017 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Tue Apr 11 07:13:48 2017 +1000

----------------------------------------------------------------------
 .gitignore                                      |     1 +
 .travis.yml                                     |     3 +-
 build.gradle                                    |    28 +-
 gradle/assemble.gradle                          |     3 +-
 gradle/docs.gradle                              |     5 +-
 src/main/groovy/lang/Groovydoc.java             |    22 +
 src/main/groovy/lang/MetaClassImpl.java         |   172 +-
 src/main/groovy/ui/GroovyMain.java              |    64 +-
 .../ConcurrentLinkedHashMap.java                |  1696 ++
 .../concurrentlinkedhashmap/EntryWeigher.java   |    40 +
 .../EvictionListener.java                       |    48 +
 .../concurrentlinkedhashmap/LinkedDeque.java    |   459 +
 .../util/concurrentlinkedhashmap/Weigher.java   |    39 +
 .../util/concurrentlinkedhashmap/Weighers.java  |   278 +
 .../concurrentlinkedhashmap/package-info.java   |    41 +
 .../groovy/ast/expr/BinaryExpression.java       |    20 +-
 .../groovy/ast/expr/DeclarationExpression.java  |    12 +-
 .../groovy/ast/expr/LambdaExpression.java       |    47 +
 .../ast/expr/MethodReferenceExpression.java     |    45 +
 .../groovy/ast/stmt/TryCatchStatement.java      |    30 +-
 .../classgen/ClassCompletionVerifier.java       |    23 +-
 .../groovy/classgen/VariableScopeVisitor.java   |    22 +-
 .../classgen/asm/BinaryExpressionHelper.java    |   135 +-
 .../BinaryExpressionMultiTypeDispatcher.java    |    26 +-
 .../groovy/classgen/asm/CallSiteWriter.java     |    23 +-
 .../groovy/classgen/asm/InvocationWriter.java   |    20 +-
 .../groovy/classgen/asm/StatementWriter.java    |    54 +-
 .../classgen/asm/indy/IndyCallSiteWriter.java   |     2 +-
 .../classgen/asm/indy/InvokeDynamicWriter.java  |     4 +-
 ...ypesBinaryExpressionMultiTypeDispatcher.java |    11 +-
 .../asm/sc/StaticTypesCallSiteWriter.java       |    16 +-
 .../groovy/control/CompilerConfiguration.java   |    18 +-
 .../groovy/control/ParserPluginFactory.java     |    59 +-
 .../codehaus/groovy/runtime/ArrayTypeUtils.java |    98 +
 .../groovy/runtime/DefaultGroovyMethods.java    |     6 +-
 .../codehaus/groovy/runtime/MethodClosure.java  |    83 +-
 .../groovy/runtime/ScriptBytecodeAdapter.java   |    12 +-
 .../groovy/runtime/memoize/LRUCache.java        |    20 +-
 src/main/org/codehaus/groovy/syntax/Types.java  |    36 +-
 .../stc/StaticTypeCheckingSupport.java          |   182 +-
 .../stc/StaticTypeCheckingVisitor.java          |    50 +-
 src/spec/test/builder/CliBuilderTest.groovy     |     2 +-
 src/test/groovy/EqualsTest.groovy               |    38 +-
 src/test/groovy/EscapedUnicodeTest.groovy       |     9 +
 subprojects/groovy-console/build.gradle         |     4 +
 subprojects/groovy-parser-antlr4/README.md      |    36 +
 subprojects/groovy-parser-antlr4/build.gradle   |    59 +
 .../apache/groovy/parser/antlr4/GroovyLexer.g4  |   872 +
 .../apache/groovy/parser/antlr4/GroovyParser.g4 |  1250 ++
 .../groovy/parser/antlr4/Java.g4.v20160306.zip  |   Bin 0 -> 5805 bytes
 .../parser/antlr4/util/GroovyTestRig.groovy     |    74 +
 .../apache/groovy/parser/AbstractParser.java    |    83 +
 .../org/apache/groovy/parser/Antlr2Parser.java  |    34 +
 .../org/apache/groovy/parser/Antlr4Parser.java  |    39 +
 .../groovy/parser/antlr4/AbstractLexer.java     |    32 +
 .../groovy/parser/antlr4/AbstractParser.java    |    32 +
 .../parser/antlr4/Antlr4ParserPlugin.java       |    45 +
 .../parser/antlr4/Antlr4PluginFactory.java      |    17 +
 .../apache/groovy/parser/antlr4/AstBuilder.java |  4494 +++++
 .../groovy/parser/antlr4/GroovyLangLexer.java   |    45 +
 .../groovy/parser/antlr4/GroovyLangParser.java  |    38 +
 .../groovy/parser/antlr4/GroovySyntaxError.java |    42 +
 .../groovy/parser/antlr4/GroovydocManager.java  |   165 +
 .../parser/antlr4/SemanticPredicates.java       |   152 +
 .../parser/antlr4/SyntaxErrorReportable.java    |    46 +
 .../TryWithResourcesASTTransformation.java      |   352 +
 .../parser/antlr4/internal/AtnManager.java      |   107 +
 .../internal/DescriptiveErrorStrategy.java      |   110 +
 .../groovy/parser/antlr4/util/StringUtils.java  |   149 +
 .../parser/antlr4/Geb10SourcesTest.groovy       |  1684 ++
 .../parser/antlr4/Gradle310SourcesTest.groovy   | 15941 +++++++++++++++++
 .../parser/antlr4/Grails320SourcesTest.groovy   |  4648 +++++
 .../parser/antlr4/Groovy250ScriptsTest.groovy   | 11081 ++++++++++++
 .../parser/antlr4/Groovy250SourcesTest.groovy   |  7427 ++++++++
 .../parser/antlr4/GroovyParserTest.groovy       |   358 +
 .../parser/antlr4/Spock11RC2SourcesTest.groovy  |  1224 ++
 .../groovy/parser/antlr4/SyntaxErrorTest.groovy |   148 +
 .../groovy/parser/antlr4/TestUtils.groovy       |   259 +
 .../antlr4/util/ASTComparatorCategory.groovy    |   526 +
 .../groovy/parser/antlr4/util/AstDumper.groovy  |  1025 ++
 .../test/resources/bugs/BUG-GROOVY-2324.groovy  |     5 +
 .../test/resources/bugs/BUG-GROOVY-4438.groovy  |     8 +
 .../test/resources/bugs/BUG-GROOVY-4757.groovy  |     9 +
 .../test/resources/bugs/BUG-GROOVY-4762.groovy  |     9 +
 .../test/resources/bugs/BUG-GROOVY-5318.groovy  |     1 +
 .../test/resources/bugs/BUG-GROOVY-5652.groovy  |     6 +
 .../test/resources/bugs/BUG-GROOVY-6038.groovy  |    19 +
 .../src/test/resources/bugs/GROOVY-3898.groovy  |     8 +
 .../core/AnnotationDeclaration_01.groovy        |    39 +
 .../test/resources/core/Annotation_01.groovy    |     1 +
 .../test/resources/core/Annotation_02.groovy    |     2 +
 .../test/resources/core/Annotation_03.groovy    |     3 +
 .../test/resources/core/Annotation_04.groovy    |     2 +
 .../test/resources/core/Annotation_05.groovy    |     1 +
 .../test/resources/core/Annotation_06.groovy    |     2 +
 .../test/resources/core/Annotation_07.groovy    |     2 +
 .../test/resources/core/Annotation_08.groovy    |    10 +
 .../test/resources/core/Annotation_09.groovy    |    14 +
 .../test/resources/core/Annotation_10x.groovy   |    20 +
 .../src/test/resources/core/Array_01x.groovy    |    72 +
 .../src/test/resources/core/Assert_01.groovy    |    28 +
 .../src/test/resources/core/Assert_02x.groovy   |    37 +
 .../src/test/resources/core/Assert_03x.groovy   |    26 +
 .../resources/core/BreakingChange_01x.groovy    |    24 +
 .../resources/core/BreakingChange_02x.groovy    |     9 +
 .../resources/core/BreakingChange_03x.groovy    |    16 +
 .../resources/core/BreakingChange_04x.groovy    |    26 +
 .../resources/core/ClassDeclaration_01.groovy   |    55 +
 .../resources/core/ClassDeclaration_02.groovy   |    42 +
 .../resources/core/ClassDeclaration_03.groovy   |    51 +
 .../resources/core/ClassDeclaration_04.groovy   |    22 +
 .../resources/core/ClassDeclaration_05.groovy   |    20 +
 .../resources/core/ClassDeclaration_06.groovy   |    83 +
 .../resources/core/ClassDeclaration_07.groovy   |    27 +
 .../src/test/resources/core/Closure_01.groovy   |     1 +
 .../src/test/resources/core/Closure_02.groovy   |     1 +
 .../src/test/resources/core/Closure_03.groovy   |     1 +
 .../src/test/resources/core/Closure_04.groovy   |     3 +
 .../src/test/resources/core/Closure_05.groovy   |     3 +
 .../src/test/resources/core/Closure_06.groovy   |     9 +
 .../src/test/resources/core/Closure_07.groovy   |     3 +
 .../src/test/resources/core/Closure_08.groovy   |    16 +
 .../src/test/resources/core/Closure_09.groovy   |    16 +
 .../src/test/resources/core/Closure_10.groovy   |     4 +
 .../test/resources/core/CodeBlock_01x.groovy    |    24 +
 .../src/test/resources/core/Command_01.groovy   |    18 +
 .../src/test/resources/core/Command_02.groovy   |    11 +
 .../src/test/resources/core/Command_03.groovy   |    66 +
 .../src/test/resources/core/Command_04.groovy   |     7 +
 .../src/test/resources/core/Command_05.groovy   |    59 +
 .../src/test/resources/core/Command_06x.groovy  |     8 +
 .../src/test/resources/core/Comments_01.groovy  |    28 +
 .../src/test/resources/core/Comments_02.groovy  |   117 +
 .../resources/core/DefaultMethod_01x.groovy     |    21 +
 .../resources/core/DefaultMethod_02x.groovy     |    36 +
 .../src/test/resources/core/DoWhile_01x.groovy  |     7 +
 .../src/test/resources/core/DoWhile_02x.groovy  |     8 +
 .../src/test/resources/core/DoWhile_03x.groovy  |    11 +
 .../src/test/resources/core/DoWhile_04x.groovy  |    14 +
 .../resources/core/ElvisAssignment_01x.groovy   |    38 +
 .../resources/core/EnumDeclaration_01.groovy    |    44 +
 .../resources/core/EnumDeclaration_02.groovy    |    52 +
 .../resources/core/EnumDeclaration_03.groovy    |     6 +
 .../test/resources/core/Expression_01.groovy    |   230 +
 .../test/resources/core/Expression_02.groovy    |     6 +
 .../test/resources/core/Expression_03.groovy    |    31 +
 .../test/resources/core/Expression_04.groovy    |    62 +
 .../test/resources/core/Expression_05.groovy    |    40 +
 .../test/resources/core/Expression_06.groovy    |     6 +
 .../test/resources/core/Expression_07.groovy    |     9 +
 .../test/resources/core/Expression_08.groovy    |     6 +
 .../test/resources/core/Expression_09.groovy    |    16 +
 .../test/resources/core/Expression_10.groovy    |    25 +
 .../test/resources/core/Expression_11.groovy    |    16 +
 .../test/resources/core/Expression_12.groovy    |    17 +
 .../test/resources/core/Expression_13.groovy    |    45 +
 .../test/resources/core/Expression_14.groovy    |    22 +
 .../test/resources/core/Expression_15.groovy    |   127 +
 .../test/resources/core/Expression_16.groovy    |    22 +
 .../test/resources/core/Expression_17.groovy    |   141 +
 .../test/resources/core/Expression_18.groovy    |    26 +
 .../test/resources/core/Expression_19.groovy    |    32 +
 .../test/resources/core/Expression_20.groovy    |     2 +
 .../test/resources/core/Expression_21x.groovy   |     6 +
 .../test/resources/core/Expression_22x.groovy   |    11 +
 .../test/resources/core/Expression_23x.groovy   |    97 +
 .../src/test/resources/core/For_01.groovy       |    55 +
 .../src/test/resources/core/For_02.groovy       |    36 +
 .../src/test/resources/core/For_03.groovy       |    37 +
 .../src/test/resources/core/For_04x.groovy      |    36 +
 .../src/test/resources/core/For_05x.groovy      |    38 +
 .../src/test/resources/core/GString_01.groovy   |    30 +
 .../src/test/resources/core/GString_02.groovy   |    59 +
 .../src/test/resources/core/GString_03.groovy   |    49 +
 .../test/resources/core/Groovydoc_01x.groovy    |    52 +
 .../test/resources/core/IdenticalOp_01x.groovy  |    10 +
 .../src/test/resources/core/IfElse_01.groovy    |    44 +
 .../resources/core/ImportDeclaration_01.groovy  |     1 +
 .../resources/core/ImportDeclaration_02.groovy  |     1 +
 .../resources/core/ImportDeclaration_03.groovy  |     4 +
 .../resources/core/ImportDeclaration_04.groovy  |     5 +
 .../resources/core/ImportDeclaration_05.groovy  |     1 +
 .../resources/core/ImportDeclaration_06.groovy  |     3 +
 .../resources/core/ImportDeclaration_07.groovy  |     6 +
 .../resources/core/ImportDeclaration_08.groovy  |    28 +
 .../core/InterfaceDeclaration_01.groovy         |    36 +
 .../core/InterfaceDeclaration_02.groovy         |    42 +
 .../core/InterfaceDeclaration_03.groovy         |     7 +
 .../src/test/resources/core/Label_01.groovy     |    15 +
 .../src/test/resources/core/Lambda_01x.groovy   |    48 +
 .../src/test/resources/core/List_01.groovy      |    15 +
 .../src/test/resources/core/Literal_01.groovy   |    79 +
 .../src/test/resources/core/Literal_02.groovy   |    48 +
 .../src/test/resources/core/Literal_03.groovy   |     3 +
 .../core/LocalVariableDeclaration_01.groovy     |   110 +
 .../src/test/resources/core/Map_01.groovy       |    29 +
 .../resources/core/MethodDeclaration_01.groovy  |    32 +
 .../resources/core/MethodDeclaration_02.groovy  |    41 +
 .../resources/core/MethodPointer_01x.groovy     |     5 +
 .../resources/core/MethodReference_01x.groovy   |    85 +
 .../core/NegativeRelationalOperators_01x.groovy |    21 +
 .../core/NegativeRelationalOperators_02x.groovy |    18 +
 .../resources/core/PackageDeclaration_01.groovy |     1 +
 .../resources/core/PackageDeclaration_02.groovy |     1 +
 .../resources/core/PackageDeclaration_03.groovy |     1 +
 .../resources/core/PackageDeclaration_04.groovy |    20 +
 .../resources/core/PackageDeclaration_05.groovy |    23 +
 .../resources/core/PackageDeclaration_06.groovy |     1 +
 .../src/test/resources/core/Return_01.groovy    |     8 +
 .../test/resources/core/SafeIndex_01x.groovy    |    10 +
 .../test/resources/core/SafeIndex_02x.groovy    |    47 +
 .../test/resources/core/SafeIndex_03x.groovy    |   280 +
 .../src/test/resources/core/Switch_01.groovy    |    60 +
 .../test/resources/core/Synchronized_01.groovy  |    36 +
 .../src/test/resources/core/Throw_01.groovy     |     2 +
 .../resources/core/TraitDeclaration_01.groovy   |    42 +
 .../resources/core/TraitDeclaration_02.groovy   |    40 +
 .../resources/core/TraitDeclaration_03.groovy   |    48 +
 .../resources/core/TraitDeclaration_04.groovy   |    28 +
 .../resources/core/TraitDeclaration_05.groovy   |    23 +
 .../src/test/resources/core/TryCatch_01.groovy  |   112 +
 .../resources/core/TryWithResources_01x.groovy  |   266 +
 .../src/test/resources/core/Unicode_01.groovy   |    24 +
 .../src/test/resources/core/While_01.groovy     |    58 +
 .../src/test/resources/core/While_02x.groovy    |     5 +
 .../resources/fail/AbstractMethod_01x.groovy    |     3 +
 .../resources/fail/AbstractMethod_02x.groovy    |     4 +
 .../resources/fail/AbstractMethod_03x.groovy    |     3 +
 .../resources/fail/AbstractMethod_04x.groovy    |     1 +
 .../resources/fail/AbstractMethod_05x.groovy    |     1 +
 .../resources/fail/AbstractMethod_06x.groovy    |     1 +
 .../src/test/resources/fail/Break_01x.groovy    |     1 +
 .../src/test/resources/fail/Break_02x.groovy    |     3 +
 .../src/test/resources/fail/Continue_01x.groovy |     1 +
 .../src/test/resources/fail/Continue_02x.groovy |     3 +
 .../src/test/resources/fail/DoWhile_01x.groovy  |     4 +
 .../test/resources/fail/Expression_01.groovy    |     1 +
 .../test/resources/fail/Expression_02.groovy    |     1 +
 .../test/resources/fail/Expression_03.groovy    |     1 +
 .../test/resources/fail/Expression_04.groovy    |     1 +
 .../test/resources/fail/Expression_05.groovy    |     1 +
 .../test/resources/fail/Expression_06.groovy    |     1 +
 .../test/resources/fail/Expression_07.groovy    |     1 +
 .../test/resources/fail/Expression_08.groovy    |     1 +
 .../test/resources/fail/Expression_09.groovy    |     1 +
 .../src/test/resources/fail/List_01.groovy      |     1 +
 .../fail/LocalVariableDeclaration_01.groovy     |     1 +
 .../src/test/resources/fail/Modifier_01x.groovy |     1 +
 .../src/test/resources/fail/Modifier_02x.groovy |     1 +
 .../src/test/resources/fail/Modifier_03x.groovy |     1 +
 .../src/test/resources/fail/Modifier_04x.groovy |     3 +
 .../src/test/resources/fail/Modifier_05x.groovy |     3 +
 .../resources/fail/ParExpression_01x.groovy     |     1 +
 .../resources/fail/ParExpression_02x.groovy     |     1 +
 .../resources/fail/ParExpression_03x.groovy     |     1 +
 .../test/resources/fail/Parentheses_01.groovy   |     2 +
 .../src/test/resources/fail/Super_01x.groovy    |     6 +
 .../src/test/resources/fail/Switch_01.groovy    |     9 +
 .../src/test/resources/fail/This_01x.groovy     |     8 +
 .../fail/UnexpectedCharacter_01x.groovy         |     1 +
 .../src/test/resources/geb-1.0/allsources.txt   |   409 +
 .../resources/geb-1.0/geb-1.0-allsources.zip    |   Bin 0 -> 503324 bytes
 .../test/resources/gradle-3.1/allsources.txt    |  3963 ++++
 .../gradle-3.1/gradle-3.1-allsources.zip        |   Bin 0 -> 5966721 bytes
 .../test/resources/grails-3.2.0/allsources.txt  |  1150 ++
 .../grails-3.2.0/grails-3.2.0-allsources.zip    |   Bin 0 -> 1674411 bytes
 .../test/resources/groovy-2.5.0/allscripts.txt  |  2744 +++
 .../test/resources/groovy-2.5.0/allsources.txt  |  1844 ++
 ...roovy-2.5.0-SNAPSHOT-20160921-allscripts.zip |   Bin 0 -> 1071812 bytes
 ...roovy-2.5.0-SNAPSHOT-20160921-allsources.zip |   Bin 0 -> 2711417 bytes
 .../spock-spock-1.1-rc-2/allsources.txt         |   294 +
 .../spock-spock-1.1-rc-2-allsources.zip         |   Bin 0 -> 338519 bytes
 272 files changed, 71265 insertions(+), 404 deletions(-)
----------------------------------------------------------------------



[20/50] groovy git commit: Add a test case for GROOVY-6038: Ability to declare inner annotation types

Posted by pa...@apache.org.
Add a test case for GROOVY-6038: Ability to declare inner annotation types


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/da7501e3
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/da7501e3
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/da7501e3

Branch: refs/heads/master
Commit: da7501e32f9dcb8714cb2adc3c38e0c0dd099908
Parents: 83e26af
Author: sunlan <su...@apache.org>
Authored: Wed Jan 25 01:10:22 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Jan 25 01:10:22 2017 +0800

----------------------------------------------------------------------
 .../groovy/parser/antlr4/GroovyParserTest.groovy |  1 +
 .../test/resources/bugs/BUG-GROOVY-6038.groovy   | 19 +++++++++++++++++++
 2 files changed, 20 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/da7501e3/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
index 5cefbf9..4ef080b 100644
--- 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
@@ -345,5 +345,6 @@ class GroovyParserTest extends GroovyTestCase {
         doRunAndTest('bugs/BUG-GROOVY-5652.groovy');
         doRunAndTest('bugs/BUG-GROOVY-4762.groovy');
         doRunAndTest('bugs/BUG-GROOVY-4438.groovy');
+        doRunAndTest('bugs/BUG-GROOVY-6038.groovy');
     }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/da7501e3/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-6038.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-6038.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-6038.groovy
new file mode 100644
index 0000000..0feb6e0
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-6038.groovy
@@ -0,0 +1,19 @@
+import java.lang.annotation.*
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@interface Upper {
+    @Retention(RetentionPolicy.RUNTIME)
+    @Target(ElementType.METHOD)
+    @interface Inner {
+        String testInner()
+    }
+}
+
+class X {
+    @Upper.Inner(testInner='abc')
+    def m() {}
+}
+
+def m = X.class.declaredMethods.find { it.name == 'm' }
+assert m.declaredAnnotations[0].testInner() == 'abc'


[47/50] groovy git commit: Support more expressions span rows

Posted by pa...@apache.org.
Support more expressions span rows


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/d3fde8da
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/d3fde8da
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/d3fde8da

Branch: refs/heads/master
Commit: d3fde8da1308f95fcd9644c626fa01e21dbf2a94
Parents: 7eab98e
Author: sunlan <su...@apache.org>
Authored: Mon Apr 10 16:16:52 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Mon Apr 10 16:16:52 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/GroovyParser.g4   |  2 +-
 .../src/test/resources/core/Expression_23x.groovy     | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/d3fde8da/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index 992b63f..ab1241d 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -823,7 +823,7 @@ expression
     |   op=(INC | DEC | ADD | SUB) expression                                               #unaryAddExprAlt
 
     // multiplication/division/modulo (level 4)
-    |   left=expression op=(MUL | DIV | MOD) nls right=expression                           #multiplicativeExprAlt
+    |   left=expression nls op=(MUL | DIV | MOD) nls right=expression                       #multiplicativeExprAlt
 
     // binary addition/subtraction (level 5)
     |   left=expression op=(ADD | SUB) nls right=expression                                 #additiveExprAlt

http://git-wip-us.apache.org/repos/asf/groovy/blob/d3fde8da/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
index b87b58d..ab7f763 100644
--- a/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
@@ -81,3 +81,17 @@ assert true
             ||
                 true
 
+
+def z =
+        9
+            /
+                3
+                    *
+                        2
+assert 6 == z
+
+def r =
+         3
+            %
+                2
+assert 1 == r
\ No newline at end of file


[41/50] groovy git commit: GROOVY-8131: Statement continued onto next line is flagged when first character is "="

Posted by pa...@apache.org.
GROOVY-8131: Statement continued onto next line is flagged when first character is "="


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/c9b4ee7b
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/c9b4ee7b
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/c9b4ee7b

Branch: refs/heads/master
Commit: c9b4ee7be39b7e68dcad56685f4186706dd10198
Parents: 9a0aa60
Author: sunlan <su...@apache.org>
Authored: Sun Apr 2 02:07:37 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Apr 2 02:07:37 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyParser.g4 | 14 +++---
 .../parser/antlr4/GroovyParserTest.groovy       |  1 +
 .../test/resources/core/Expression_23x.groovy   | 45 ++++++++++++++++++++
 3 files changed, 53 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/c9b4ee7b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index 71b7f0e..501938b 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -346,7 +346,7 @@ variableDeclarators
     ;
 
 variableDeclarator
-    :   variableDeclaratorId (ASSIGN nls variableInitializer)?
+    :   variableDeclaratorId (nls ASSIGN nls variableInitializer)?
     ;
 
 variableDeclaratorId
@@ -416,11 +416,11 @@ formalParameterList
     ;
 
 formalParameter
-    :   variableModifiersOpt type?          variableDeclaratorId (ASSIGN nls expression)?
+    :   variableModifiersOpt type?          variableDeclaratorId (nls ASSIGN nls expression)?
     ;
 
 lastFormalParameter
-    :   variableModifiersOpt type? ELLIPSIS variableDeclaratorId (ASSIGN nls expression)?
+    :   variableModifiersOpt type? ELLIPSIS variableDeclaratorId (nls ASSIGN nls expression)?
     ;
 
 methodBody
@@ -542,7 +542,7 @@ elementValuePairs
     ;
 
 elementValuePair
-    :   elementValuePairName ASSIGN elementValue
+    :   elementValuePairName nls ASSIGN nls elementValue
     ;
 
 elementValuePairName
@@ -594,7 +594,7 @@ variableDeclaration[int t]
         (   { 0 == $t }? variableModifiers
         |   { 1 == $t }? modifiers
         )
-        typeNamePairs ASSIGN nls variableInitializer
+        typeNamePairs nls ASSIGN nls variableInitializer
     ;
 
 typeNamePairs
@@ -883,8 +883,8 @@ expression
 
     // assignment expression (level 15)
     // "(a) = [1]" is a special case of multipleAssignmentExprAlt, it will be handle by assignmentExprAlt
-    |   <assoc=right> left=variableNames op=ASSIGN nls right=statementExpression            #multipleAssignmentExprAlt
-    |   <assoc=right> left=expression
+    |   <assoc=right> left=variableNames nls op=ASSIGN nls right=statementExpression            #multipleAssignmentExprAlt
+    |   <assoc=right> left=expression nls
                         op=(   ASSIGN
                            |   ADD_ASSIGN
                            |   SUB_ASSIGN

http://git-wip-us.apache.org/repos/asf/groovy/blob/c9b4ee7b/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
index 65a9099..14b67f2 100644
--- 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
@@ -188,6 +188,7 @@ class GroovyParserTest extends GroovyTestCase {
         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"() {

http://git-wip-us.apache.org/repos/asf/groovy/blob/c9b4ee7b/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
new file mode 100644
index 0000000..8962219
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_23x.groovy
@@ -0,0 +1,45 @@
+def a
+    =
+        1 + 2
+assert 3 == a
+
+a
+    +=
+        2
+assert 5 == a
+
+int b
+    =
+        1,
+    c
+        =
+            2
+assert 1 == b
+assert 2 == c
+
+def (int x, int y)
+    =
+        [1, 2]
+assert 1 == x
+assert 2 == y
+(x)
+    =
+        [3]
+assert 3 == x
+
+@SuppressWarnings(value
+        =
+        "all")
+def m(p1
+        =
+            1,
+      p2
+        =
+            2,
+      int... p3
+                =
+                    [3]) {
+    return p1 + p2 + p3[0]
+}
+assert 6 == m()
+


[15/50] groovy git commit: Build the AST for static methods of interface

Posted by pa...@apache.org.
Build the AST for static methods of interface


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/c683c74c
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/c683c74c
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/c683c74c

Branch: refs/heads/master
Commit: c683c74cfcb9ecb936d2a85c0ec6af4dca8cebd5
Parents: 452e417
Author: sunlan <su...@apache.org>
Authored: Tue Jan 24 16:14:39 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Tue Jan 24 16:14:39 2017 +0800

----------------------------------------------------------------------
 .../src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/c683c74c/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index f3195ef..049719b 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -1255,7 +1255,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
                 }
 
-                modifiers |= classNode.isInterface() || (isTrue(classNode, IS_INTERFACE_WITH_DEFAULT_METHODS) && !modifierManager.contains(DEFAULT)) ? Opcodes.ACC_ABSTRACT : 0;
+                modifiers |= !modifierManager.contains(STATIC) && (classNode.isInterface() || (isTrue(classNode, IS_INTERFACE_WITH_DEFAULT_METHODS) && !modifierManager.contains(DEFAULT))) ? Opcodes.ACC_ABSTRACT : 0;
                 methodNode = classNode.addMethod(methodName, modifiers, returnType, parameters, exceptions, code);
 
                 methodNode.setAnnotationDefault(asBoolean(ctx.elementValue()));


[18/50] groovy git commit: Add more test cases for ++ and -- operators

Posted by pa...@apache.org.
Add more test cases for ++ and -- operators


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a8e2874f
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a8e2874f
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a8e2874f

Branch: refs/heads/master
Commit: a8e2874f794590c0d4ae1e5b92fb94d0419fdf65
Parents: 956582d
Author: sunlan <su...@apache.org>
Authored: Wed Jan 25 00:08:29 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Jan 25 00:08:29 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyParserTest.groovy  |  2 ++
 .../src/test/resources/core/Expression_22x.groovy        | 11 +++++++++++
 2 files changed, 13 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/a8e2874f/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
index 86309c3..5b78c40 100644
--- 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
@@ -186,6 +186,8 @@ class GroovyParserTest extends GroovyTestCase {
         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');
     }
 
     void "test groovy core - IdenticalOp"() {

http://git-wip-us.apache.org/repos/asf/groovy/blob/a8e2874f/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_22x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_22x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_22x.groovy
new file mode 100644
index 0000000..77a3306
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/Expression_22x.groovy
@@ -0,0 +1,11 @@
+int j = 0
+++j++
+assert j == 1
+
+int i = 0
+((i++)++)++
+assert i == 1
+++(++(++i))
+assert i == 2
+++(++(++i++)++)++
+assert i == 3


[21/50] groovy git commit: Add a test case for GROOVY-2324: grammar forces usage of lowercase names for commands

Posted by pa...@apache.org.
Add a test case for GROOVY-2324: grammar forces usage of lowercase names for commands


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a5f4eba4
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a5f4eba4
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a5f4eba4

Branch: refs/heads/master
Commit: a5f4eba401a9541ea33ef76ef0310e5004237a77
Parents: da7501e
Author: sunlan <su...@apache.org>
Authored: Wed Jan 25 20:00:14 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Jan 25 20:00:14 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/GroovyParserTest.groovy     | 1 +
 .../src/test/resources/bugs/BUG-GROOVY-2324.groovy              | 5 +++++
 2 files changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/a5f4eba4/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
index 4ef080b..6c058eb 100644
--- 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
@@ -346,5 +346,6 @@ class GroovyParserTest extends GroovyTestCase {
         doRunAndTest('bugs/BUG-GROOVY-4762.groovy');
         doRunAndTest('bugs/BUG-GROOVY-4438.groovy');
         doRunAndTest('bugs/BUG-GROOVY-6038.groovy');
+        doRunAndTest('bugs/BUG-GROOVY-2324.groovy');
     }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/a5f4eba4/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-2324.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-2324.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-2324.groovy
new file mode 100644
index 0000000..79cab4f
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-2324.groovy
@@ -0,0 +1,5 @@
+class Foo {}
+
+Foo bar
+bar = new Foo()
+assert bar instanceof Foo


[05/50] groovy git commit: Add test case for GROOVY-4762: Numbers as properties in command expressions

Posted by pa...@apache.org.
Add test case for GROOVY-4762: Numbers as properties in command expressions


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/c9fbf957
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/c9fbf957
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/c9fbf957

Branch: refs/heads/master
Commit: c9fbf957ae149f6f62fd2125180270f2b4eb3fa8
Parents: ad1786e
Author: sunlan <su...@apache.org>
Authored: Fri Jan 20 10:38:46 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Jan 20 10:38:46 2017 +0800

----------------------------------------------------------------------
 .../org/apache/groovy/parser/antlr4/GroovyParserTest.groovy | 2 +-
 .../src/test/resources/bugs/BUG-GROOVY-4762.groovy          | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/c9fbf957/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
index d48e2e0..003a34b 100644
--- 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
@@ -330,7 +330,7 @@ class GroovyParserTest extends GroovyTestCase {
         doRunAndTest('bugs/BUG-GROOVY-4757.groovy');
         doRunAndTest('bugs/GROOVY-3898.groovy');
         doRunAndTest('bugs/BUG-GROOVY-5652.groovy');
-
+        doRunAndTest('bugs/BUG-GROOVY-4762.groovy');
     }
 
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/c9fbf957/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4762.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4762.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4762.groovy
new file mode 100644
index 0000000..54e71f2
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/bugs/BUG-GROOVY-4762.groovy
@@ -0,0 +1,9 @@
+package bugs
+
+def get123() {2}
+def foo(i) {this}
+
+def a = foo(2).'123'
+def b = foo 2   123
+
+assert a == b
\ No newline at end of file


[45/50] groovy git commit: Store groovydoc at runtime on demand

Posted by pa...@apache.org.
Store groovydoc at runtime on demand


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/0169177c
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/0169177c
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/0169177c

Branch: refs/heads/master
Commit: 0169177ceb3ecd54a27820e814990b76b6584062
Parents: 921fa3d
Author: sunlan <su...@apache.org>
Authored: Mon Apr 10 01:16:36 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Mon Apr 10 01:16:36 2017 +0800

----------------------------------------------------------------------
 src/main/groovy/lang/Groovydoc.java             | 17 +++++++
 .../apache/groovy/parser/antlr4/AstBuilder.java | 12 ++---
 .../groovy/parser/antlr4/GroovydocManager.java  | 47 ++++++++++++++++--
 .../parser/antlr4/GroovyParserTest.groovy       |  4 ++
 .../test/resources/core/Groovydoc_01x.groovy    | 52 ++++++++++++++++++++
 5 files changed, 122 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/0169177c/src/main/groovy/lang/Groovydoc.java
----------------------------------------------------------------------
diff --git a/src/main/groovy/lang/Groovydoc.java b/src/main/groovy/lang/Groovydoc.java
new file mode 100644
index 0000000..d27dfcb
--- /dev/null
+++ b/src/main/groovy/lang/Groovydoc.java
@@ -0,0 +1,17 @@
+package groovy.lang;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Store the groovydoc for the annotated elements
+ *
+ * Created by Daniel on 2017/4/9.
+ */
+@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Groovydoc {
+    String value();
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/0169177c/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index e59dd5f..9f4eca3 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -951,7 +951,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             classNodeList.add(classNode);
         }
 
-        groovydocManager.attachDocCommentAsMetaData(classNode, ctx);
+        groovydocManager.handle(classNode, ctx);
 
         return classNode;
     }
@@ -1026,7 +1026,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         this.visitAnnotationsOpt(ctx.annotationsOpt()).forEach(enumConstant::addAnnotation);
 
-        groovydocManager.attachDocCommentAsMetaData(enumConstant, ctx);
+        groovydocManager.handle(enumConstant, ctx);
 
         return this.configureAST(enumConstant, ctx);
     }
@@ -1256,7 +1256,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         validateMethodDeclaration(ctx, methodNode);
 
-        groovydocManager.attachDocCommentAsMetaData(methodNode, ctx);
+        groovydocManager.handle(methodNode, ctx);
 
         return methodNode;
     }
@@ -1495,7 +1495,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
                                 initialValue);
                 modifierManager.attachAnnotations(fieldNode);
 
-                groovydocManager.attachDocCommentAsMetaData(fieldNode, ctx);
+                groovydocManager.handle(fieldNode, ctx);
 
                 this.configureAST(fieldNode, ctx);
             } else {
@@ -1513,8 +1513,8 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
                 fieldNode.setSynthetic(!classNode.isInterface());
                 modifierManager.attachAnnotations(fieldNode);
 
-                groovydocManager.attachDocCommentAsMetaData(fieldNode, ctx);
-                groovydocManager.attachDocCommentAsMetaData(propertyNode, ctx);
+                groovydocManager.handle(fieldNode, ctx);
+                groovydocManager.handle(propertyNode, ctx);
 
                 this.configureAST(fieldNode, ctx);
                 this.configureAST(propertyNode, ctx);

http://git-wip-us.apache.org/repos/asf/groovy/blob/0169177c/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
index c0332d6..12d08c9 100644
--- 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
@@ -1,10 +1,15 @@
 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;
 
@@ -22,6 +27,8 @@ public class GroovydocManager {
     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;
+    public static final String VALUE = "value";
+    public static final String GROOVYDOC_PATTERN = "(?s)\\s*/[*][*]\\s+(\\s+[*]\\s*)*@Groovydoc.+?[*]/\\s*";
     private AstBuilder astBuilder;
 
     static {
@@ -41,14 +48,22 @@ public class GroovydocManager {
 
     /**
      * Attach doc comment to member node as meta data
-     * <p>
+     *
      */
-    public void attachDocCommentAsMetaData(ASTNode node, GroovyParser.GroovyParserRuleContext ctx) {
-        if (!EXTRACTING_DOC_COMMENT_ENABLED) {
+    public void handle(ASTNode node, GroovyParser.GroovyParserRuleContext ctx) {
+        if (!asBoolean(node) || !asBoolean(ctx)) {
             return;
         }
 
-        if (!asBoolean(node) || !asBoolean(ctx)) {
+        attachDocCommentAsMetaData(node, ctx);
+        attachGroovydocAnnotation(node, ctx);
+    }
+
+    /*
+     * Attach doc comment to member node as meta data
+     */
+    private void attachDocCommentAsMetaData(ASTNode node, GroovyParser.GroovyParserRuleContext ctx) {
+        if (!EXTRACTING_DOC_COMMENT_ENABLED) {
             return;
         }
 
@@ -61,6 +76,30 @@ public class GroovydocManager {
         node.putNodeMetaData(DOC_COMMENT, docCommentNodeText);
     }
 
+    private void attachGroovydocAnnotation(ASTNode node, GroovyParser.GroovyParserRuleContext ctx) {
+        if (!(node instanceof AnnotatedNode)) {
+            return;
+        }
+
+        String docCommentNodeText;
+
+        if (EXTRACTING_DOC_COMMENT_ENABLED) { // try to reuse the result of extracting doc comment for better performance
+            docCommentNodeText = node.getNodeMetaData(DOC_COMMENT);
+        } else {
+            docCommentNodeText = this.findDocCommentByNode(ctx);
+        }
+
+        if (null == docCommentNodeText || !docCommentNodeText.matches(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;

http://git-wip-us.apache.org/repos/asf/groovy/blob/0169177c/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
index 14b67f2..0750c37 100644
--- 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
@@ -342,6 +342,10 @@ class GroovyParserTest extends GroovyTestCase {
         doRunAndTest('core/Array_01x.groovy');
     }
 
+    void "test groovy core - Groovydoc"() {
+        doRunAndTest('core/Groovydoc_01x.groovy');
+    }
+
     void "test groovy core - BUG"() {
         doRunAndTest('bugs/BUG-GROOVY-4757.groovy');
         doRunAndTest('bugs/GROOVY-3898.groovy');

http://git-wip-us.apache.org/repos/asf/groovy/blob/0169177c/subprojects/groovy-parser-antlr4/src/test/resources/core/Groovydoc_01x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/Groovydoc_01x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/Groovydoc_01x.groovy
new file mode 100644
index 0000000..c4c14c8
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/Groovydoc_01x.groovy
@@ -0,0 +1,52 @@
+/**
+ * @Groovydoc
+ * class AA
+ */
+class AA {
+    /**
+     * @Groovydoc
+     * field SOME_FIELD
+     */
+    public static final int SOME_FIELD = 1;
+
+    /**
+     * @Groovydoc
+     * constructor AA
+     */
+    public AA() {
+
+    }
+
+    /**
+     * @Groovydoc
+     * method m
+     */
+    public void m() {
+
+    }
+
+    /**
+     * @Groovydoc
+     * class InnerClass
+     */
+    class InnerClass {
+
+    }
+
+
+}
+
+/**
+ * @Groovydoc
+ * annotation BB
+ */
+@interface BB {
+
+}
+
+assert AA.class.getAnnotation(groovy.lang.Groovydoc).value().contains('class AA')
+assert AA.class.getMethod('m', new Class[0]).getAnnotation(groovy.lang.Groovydoc).value().contains('method m')
+assert AA.class.getConstructor().getAnnotation(groovy.lang.Groovydoc).value().contains('constructor AA')
+assert AA.class.getField('SOME_FIELD').getAnnotation(groovy.lang.Groovydoc).value().contains('field SOME_FIELD')
+assert AA.class.getDeclaredClasses().find {it.simpleName.contains('InnerClass')}.getAnnotation(groovy.lang.Groovydoc).value().contains('class InnerClass')
+assert BB.class.getAnnotation(groovy.lang.Groovydoc).value().contains('annotation BB')
\ No newline at end of file


[03/50] groovy git commit: Fix GROOVY-5311: Wrong line/col info for GStrings

Posted by pa...@apache.org.
Fix GROOVY-5311: Wrong line/col info for GStrings


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/e70f131c
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/e70f131c
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/e70f131c

Branch: refs/heads/master
Commit: e70f131cf2e16ecc01e96efcd2d8006217053a1d
Parents: 0e608ee
Author: sunlan <su...@apache.org>
Authored: Fri Jan 20 09:50:10 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Jan 20 09:50:10 2017 +0800

----------------------------------------------------------------------
 .../src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/e70f131c/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 84c5d77..c61a2c0 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -2980,7 +2980,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         if (asBoolean(ctx.LBRACE())) {
             if (asBoolean(ctx.statementExpression())) {
-                return this.configureAST(((ExpressionStatement) this.visit(ctx.statementExpression())).getExpression(), ctx);
+                return this.configureAST(((ExpressionStatement) this.visit(ctx.statementExpression())).getExpression(), ctx.statementExpression());
             } else { // e.g. "${}"
                 return this.configureAST(new ConstantExpression(null), ctx);
             }


[10/50] groovy git commit: Remove useless code

Posted by pa...@apache.org.
Remove useless code


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a183a0cf
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a183a0cf
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a183a0cf

Branch: refs/heads/master
Commit: a183a0cf3aafb7515265ba9c751b734e111fe608
Parents: ac53087
Author: sunlan <su...@apache.org>
Authored: Sun Jan 22 23:08:31 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Jan 22 23:08:31 2017 +0800

----------------------------------------------------------------------
 .../main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4  | 1 -
 .../main/java/org/apache/groovy/parser/antlr4/AstBuilder.java    | 4 ----
 2 files changed, 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/a183a0cf/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index 6f94ec6..eb93aeb 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -567,7 +567,6 @@ block
 blockStatement
     :   localVariableDeclaration
     |   statement
-    |   typeDeclaration
     ;
 
 localVariableDeclaration

http://git-wip-us.apache.org/repos/asf/groovy/blob/a183a0cf/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 870a349..4101960 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -3352,10 +3352,6 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             return (Statement) this.visit(ctx.statement()); //this.configureAST((Statement) this.visit(ctx.statement()), ctx);
         }
 
-        if (asBoolean(ctx.typeDeclaration())) {
-            return null; // TODO
-        }
-
         throw createParsingFailedException("Unsupported block statement: " + ctx.getText(), ctx);
     }
 


[08/50] groovy git commit: Minor refactoring

Posted by pa...@apache.org.
Minor refactoring


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/75d920b0
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/75d920b0
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/75d920b0

Branch: refs/heads/master
Commit: 75d920b0ac37c9398a9211768dcdd87d4293719e
Parents: ad91e0e
Author: sunlan <su...@apache.org>
Authored: Sun Jan 22 09:52:10 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sun Jan 22 09:52:10 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyLexer.g4  |  2 +-
 .../apache/groovy/parser/antlr4/AstBuilder.java | 22 ++++++++++----------
 2 files changed, 12 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/75d920b0/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4
index 69e58e8..1f990ad 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyLexer.g4
@@ -120,7 +120,7 @@ options {
 
         @Override
         public int hashCode() {
-            return text.hashCode() * line + column;
+            return (int) (text.hashCode() * line + column);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/groovy/blob/75d920b0/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 8ab5578..fa75abf 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -4168,7 +4168,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             int result = 0;
 
             for (ModifierNode modifierNode : modifierNodeList) {
-                result |= modifierNode.getOpCode();
+                result |= modifierNode.getOpcode();
             }
 
             if (!this.containsVisibilityModifier()) {
@@ -4215,7 +4215,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         public Parameter processParameter(Parameter parameter) {
             modifierNodeList.forEach(e -> {
-                parameter.setModifiers(parameter.getModifiers() | e.getOpCode());
+                parameter.setModifiers(parameter.getModifiers() | e.getOpcode());
 
                 if (e.isAnnotation()) {
                     parameter.addAnnotation(e.getAnnotationNode());
@@ -4227,7 +4227,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         public MethodNode processMethodNode(MethodNode mn) {
             modifierNodeList.forEach(e -> {
-                mn.setModifiers(mn.getModifiers() | e.getOpCode());
+                mn.setModifiers(mn.getModifiers() | e.getOpcode());
 
                 if (e.isAnnotation()) {
                     mn.addAnnotation(e.getAnnotationNode());
@@ -4239,7 +4239,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
 
         public VariableExpression processVariableExpression(VariableExpression ve) {
             modifierNodeList.forEach(e -> {
-                ve.setModifiers(ve.getModifiers() | e.getOpCode());
+                ve.setModifiers(ve.getModifiers() | e.getOpcode());
 
                 // local variable does not attach annotations
             });
@@ -4261,13 +4261,13 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
      */
     public static class ModifierNode extends ASTNode {
         private Integer type;
-        private Integer opCode; // ASM opcode
+        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 = new HashMap<Integer, Integer>() {
+        public static final Map<Integer, Integer> MODIFIER_OPCODE_MAP = Collections.unmodifiableMap(new HashMap<Integer, Integer>() {
             {
                 put(ANNOTATION_TYPE, 0);
                 put(DEF, 0);
@@ -4286,14 +4286,14 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
                 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.opcode = MODIFIER_OPCODE_MAP.get(type);
             this.repeatable = ANNOTATION_TYPE == type; // Only annotations are repeatable
 
-            if (!asBoolean((Object) this.opCode)) {
+            if (!asBoolean((Object) this.opcode)) {
                 throw new IllegalArgumentException("Unsupported modifier type: " + type);
             }
         }
@@ -4349,8 +4349,8 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             return type;
         }
 
-        public Integer getOpCode() {
-            return opCode;
+        public Integer getOpcode() {
+            return opcode;
         }
 
         public boolean isRepeatable() {


[25/50] groovy git commit: Make for loop statement conform to JLS closely

Posted by pa...@apache.org.
Make for loop statement conform to JLS closely


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/fd884124
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/fd884124
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/fd884124

Branch: refs/heads/master
Commit: fd8841245b8a82fa0c64ebdbfc16b79abfaedccd
Parents: 8025ca3
Author: sunlan <su...@apache.org>
Authored: Sat Jan 28 16:31:24 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Sat Jan 28 16:31:24 2017 +0800

----------------------------------------------------------------------
 .../apache/groovy/parser/antlr4/GroovyParser.g4 |  4 +--
 .../apache/groovy/parser/antlr4/AstBuilder.java | 28 +++++++++++++++++---
 .../parser/antlr4/GroovyParserTest.groovy       |  1 +
 .../src/test/resources/core/For_04x.groovy      |  6 +++++
 4 files changed, 34 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/fd884124/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4 b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
index 9541598..c892a0f 100644
--- a/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
+++ b/subprojects/groovy-parser-antlr4/src/main/antlr4/org/apache/groovy/parser/antlr4/GroovyParser.g4
@@ -750,11 +750,11 @@ forControl
 
 forInit
     :   localVariableDeclaration
-    |   expression
+    |   expressionList
     ;
 
 forUpdate
-    :   expression
+    :   expressionList
     ;
 
 enhancedForControl

http://git-wip-us.apache.org/repos/asf/groovy/blob/fd884124/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index 68c5f3a..7f41d00 100644
--- a/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/subprojects/groovy-parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -422,8 +422,8 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             }
         }
 
-        if (asBoolean(ctx.expression())) {
-            return this.configureAST((Expression) this.visit(ctx.expression()), ctx);
+        if (asBoolean(ctx.expressionList())) {
+            return this.convertExpressionList(ctx.expressionList());
         }
 
         throw createParsingFailedException("Unsupported for init: " + ctx.getText(), ctx);
@@ -435,9 +435,31 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> implements Groov
             return EmptyExpression.INSTANCE;
         }
 
-        return this.configureAST((Expression) this.visit(ctx.expression()), ctx);
+        return this.convertExpressionList(ctx.expressionList());
     }
 
+    private Expression convertExpressionList(ExpressionListContext ctx) {
+        List<Expression> expressionList = this.visitExpressionList(ctx);
+
+        if (expressionList.size() == 1) {
+            return this.configureAST(expressionList.get(0), ctx);
+        } else {
+            Statement code =
+                    this.createBlockStatement(
+                            expressionList.stream()
+                                    .map(e -> this.configureAST(new ExpressionStatement(e), e))
+                                    .collect(Collectors.toList()));
+            return this.configureAST(
+                    new MethodCallExpression(
+                            this.configureAST(
+                                    new ClosureExpression(Parameter.EMPTY_ARRAY, code),
+                                    ctx),
+                            CALL_STR,
+                            new ArgumentListExpression()
+                    ),
+                    ctx);
+        }
+    }
 
     @Override
     public Pair<Parameter, Expression> visitEnhancedForControl(EnhancedForControlContext ctx) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/fd884124/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
index 6c058eb..9c05273 100644
--- 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
@@ -208,6 +208,7 @@ class GroovyParserTest extends GroovyTestCase {
         doTest('core/For_01.groovy', [AssertStatement]);
         doTest('core/For_02.groovy');
         doTest('core/For_03.groovy');
+        doRunAndTest('core/For_04x.groovy');
     }
 
     void "test groovy core - While"() {

http://git-wip-us.apache.org/repos/asf/groovy/blob/fd884124/subprojects/groovy-parser-antlr4/src/test/resources/core/For_04x.groovy
----------------------------------------------------------------------
diff --git a/subprojects/groovy-parser-antlr4/src/test/resources/core/For_04x.groovy b/subprojects/groovy-parser-antlr4/src/test/resources/core/For_04x.groovy
new file mode 100644
index 0000000..cdad5fc
--- /dev/null
+++ b/subprojects/groovy-parser-antlr4/src/test/resources/core/For_04x.groovy
@@ -0,0 +1,6 @@
+int result = 0
+for ((i, j) = [0, 0]; i < 5 && j < 5; i = i + 2, j++) {
+    result += i;
+    result += j;
+}
+assert 9 == result