This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 8f051fb  support for enum constant with trailing comma and semicolon
8f051fb is described below

commit 8f051fb2217d66622e231b7d377c4896e8f14f93
Author: Eric Milles <[email protected]>
AuthorDate: Mon Jan 20 11:48:30 2020 -0600

    support for enum constant with trailing comma and semicolon
    
        enum E {
          A,
          B,
           ;
        }
---
 src/main/antlr2/org/codehaus/groovy/antlr/groovy.g |   4 +-
 .../groovy/antlr/EnumSourceParsingTest.java        | 161 +++++++++++----------
 .../test/resources/core/EnumDeclaration_02.groovy  |   2 -
 3 files changed, 88 insertions(+), 79 deletions(-)

diff --git a/src/main/antlr2/org/codehaus/groovy/antlr/groovy.g 
b/src/main/antlr2/org/codehaus/groovy/antlr/groovy.g
index 41d5e29..1f70720 100644
--- a/src/main/antlr2/org/codehaus/groovy/antlr/groovy.g
+++ b/src/main/antlr2/org/codehaus/groovy/antlr/groovy.g
@@ -1138,7 +1138,7 @@ enumConstants
     :
         enumConstant
         ( options {generateAmbigWarnings=false;} :
-            (nls (SEMI | enumConstantsEnd)) => {break;} // GROOVY-4438, 
GROOVY-9184
+            (nls enumConstantsEnd) => {break;} // GROOVY-4438, GROOVY-9184
         |
             nls! COMMA! (
                 (nls enumConstantsEnd) => {break;} // GROOVY-8507, GROOVY-9301
@@ -1152,7 +1152,7 @@ enumConstants
 
 enumConstantsEnd
     options {generateAmbigWarnings=false;}
-    :   RCURLY | declarationStart | constructorStart | typeDefinitionStart
+    :   SEMI | RCURLY | declarationStart | constructorStart | 
typeDefinitionStart
     ;
 
 // An annotation field
diff --git a/src/test/org/codehaus/groovy/antlr/EnumSourceParsingTest.java 
b/src/test/org/codehaus/groovy/antlr/EnumSourceParsingTest.java
index fd24cb4..62162bc 100644
--- a/src/test/org/codehaus/groovy/antlr/EnumSourceParsingTest.java
+++ b/src/test/org/codehaus/groovy/antlr/EnumSourceParsingTest.java
@@ -25,47 +25,72 @@ import java.io.StringReader;
  */
 public final class EnumSourceParsingTest extends SourceParserTest {
 
-    public void testParseEnumConstants() {
+    public void testParseEnumConstants1() {
+        parse(getMethodName(), new StringReader(
+            "enum E { X, Y, Z }\n"
+        ));
+    }
+
+    public void testParseEnumConstants2() {
         parse(getMethodName(), new StringReader(
             "enum E {\n" +
             "    X, Y, Z\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
+    }
+
+    public void testParseEnumConstants3() {
+        parse(getMethodName(), new StringReader(
+            "enum E {\n" +
+            "    X,\n" +
+            "    Y,\n" +
+            "    Z,\n" +
+            "}\n"
+        ));
     }
 
-    public void testParseEnumConstantsMultiLine() {
+    public void testParseEnumConstants4() {
         parse(getMethodName(), new StringReader(
             "enum E {\n" +
             "    X,\n" +
             "    Y,\n" +
             "    Z,\n" +
-            "}\n")
-        );
+            "     ;\n" +
+            "}\n"
+        ));
     }
 
-    public void testParseEnumConstantsMultiLine2() {
+    public void testParseEnumConstants5() {
         parse(getMethodName(), new StringReader(
             "enum E\n" +
             "{\n" +
             "    X,\n" +
             "    Y,\n" +
             "    Z\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
-    public void testParseEnumImplementsMultiLine() {
+    public void testParseEnumImplements1() {
+        parse(getMethodName(), new StringReader(
+            "enum E implements I {\n" +
+            "    X, Y, Z\n" +
+            "}\n"
+        ));
+    }
+
+    public void testParseEnumImplements2() {
         parse(getMethodName(), new StringReader(
             "enum E implements I\n" +
             "{\n" +
             "    X,\n" +
             "    Y,\n" +
             "    Z\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
-    public void testParseEnumImplementsMultiLine2() {
+    public void testParseEnumImplements3() {
         parse(getMethodName(), new StringReader(
             "enum E\n" +
             "implements I\n" +
@@ -73,22 +98,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "    X,\n" +
             "    Y,\n" +
             "    Z\n" +
-            "}\n")
-        );
-    }
-
-    public void testParseEnumConstantsOneLiner() {
-        parse(getMethodName(), new StringReader(
-            "enum E { X, Y, Z }\n")
-        );
-    }
-
-    public void testParseEnumImplements() {
-        parse(getMethodName(), new StringReader(
-            "enum E implements I {\n" +
-            "    X, Y, Z\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithValues() {
@@ -99,8 +110,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "        this.value = value\n" +
             "    }\n\n" +
             "    private final int value\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithValues2() {
@@ -111,8 +122,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "        this.value = value\n" +
             "    }\n\n" +
             "    private final int value\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithValues3() {
@@ -123,8 +134,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "    E(value) {\n" +
             "        this.value = value\n" +
             "    }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     // GROOVY-9301
@@ -136,8 +147,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "    E(value) {\n" +
             "        this.value = value\n" +
             "    }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithValues4() {
@@ -156,8 +167,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "    Suit(Color color) {\n" +
             "        this.color = color\n" +
             "    }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithMethodDefinitions1() {
@@ -167,8 +178,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "    def m1() { }\n" +
             "    public m2(args) { }\n" +
             "    int m3(String arg) { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithMethodDefinitions2() {
@@ -176,8 +187,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z\n\n" +
             "    def <T> T m() { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithMethodDefinitions2a() {
@@ -185,8 +196,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z\n\n" +
             "    final <T> T m() { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithMethodDefinitions2b() {
@@ -194,8 +205,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z\n\n" +
             "    public <T> T m() { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithAnnotatedMethodDefinition1() {
@@ -207,8 +218,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "    String toString() {\n" +
             "        name().toLowerCase().capitalize()\n" +
             "    }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     // GROOVY-9301
@@ -221,8 +232,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "    String toString() {\n" +
             "        name().toLowerCase().capitalize()\n" +
             "    }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     // GROOVY-9301
@@ -233,8 +244,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "    \n" +
             "    @Deprecated <T> T whatever() {\n" +
             "    }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseCompleteEnum() {
@@ -244,8 +255,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "    Y {\n" +
             "        double eval(int v) { return (double) v + 1 }\n" +
             "    }, Z\n" +
-            "}")
-        );
+            "}"
+        ));
     }
 
     public void testParseEnumWithInnerClass1() {
@@ -253,8 +264,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z\n" +
             "    class C { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     // GROOVY-8507
@@ -263,8 +274,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z,\n" + // trailing comma
             "    class C { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithInnerClass2() {
@@ -272,8 +283,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z\n" +
             "    enum E2 { A, B, C }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     // GROOVY-8507
@@ -282,8 +293,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z,\n" + // trailing comma
             "    enum Another { A, B, C }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithInnerClass3() {
@@ -291,8 +302,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z\n" +
             "    interface I { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     // GROOVY-8507
@@ -301,8 +312,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z,\n" + // trailing comma
             "    interface I { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void _FIXME_testParseEnumWithInnerClass4() {
@@ -310,8 +321,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z\n" +
             "    @interface A { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void _FIXME_testParseEnumWithInnerClass4a() {
@@ -319,8 +330,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z,\n" + // trailing comma
             "    @interface A { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     public void testParseEnumWithInnerClass5() {
@@ -328,8 +339,8 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z\n" +
             "    trait T { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 
     // GROOVY-8507
@@ -338,7 +349,7 @@ public final class EnumSourceParsingTest extends 
SourceParserTest {
             "enum E {\n" +
             "    X, Y, Z,\n" + // trailing comma
             "    trait T { }\n" +
-            "}\n")
-        );
+            "}\n"
+        ));
     }
 }
diff --git 
a/subprojects/parser-antlr4/src/test/resources/core/EnumDeclaration_02.groovy 
b/subprojects/parser-antlr4/src/test/resources/core/EnumDeclaration_02.groovy
index aef6b4a..b4d8d13 100644
--- 
a/subprojects/parser-antlr4/src/test/resources/core/EnumDeclaration_02.groovy
+++ 
b/subprojects/parser-antlr4/src/test/resources/core/EnumDeclaration_02.groovy
@@ -74,13 +74,11 @@ enum J {
     B,
 }
 
-/* // antlr2 parser does not support the following code since some beta/rc 
release of 3.0.0
 enum K {
     A,
     B,
     ;
 }
-*/
 
 enum Outer {
     A, B

Reply via email to