RFR: JDK-8228647: Broken enum produce inconvenient errors and AST

Vicente Romero vicente.romero at oracle.com
Tue Jul 30 15:07:20 UTC 2019


looks good,
Vicente

On 7/29/19 7:31 AM, Jan Lahoda wrote:
> Hi,
>
> The javac's parser does not recover well from enums that have missing 
> ',' between the enum constants, or are missing the ';' between 
> constants and other members. For example, consider:
> ---
> $ cat E.java
> public enum E {
>     A
>     B,
>     C;
>     public void t1() {}
>     public void t2() {}
> }
> $ javac E.java
> E.java:3: error: ',', '}', or ';' expected
>     B,
>     ^
> E.java:3: error: '}' expected
>     B,
>      ^
> E.java:5: error: class, interface, or enum expected
>     public void t1() {}
>            ^
> E.java:6: error: class, interface, or enum expected
>     public void t2() {}
>            ^
> 4 errors
> ---
>
> The reason for this is that the parser stops looking for enum 
> constants if there is no ',' after a constant, and does not try to 
> parse other members if there is no ';' after the constants block. I.e. 
> in the example above, it will stop looking for enum constants after 
> "A" (no comma), and won't look for further members because there is no 
> semicolon, after which the parser is somewhat lost.
>
> The patch proposed herein is trying to improve the situation by 
> parsing member until the closing semicolon, estimating whether the 
> upcoming member is an enum constant, other member, or "unknown". 
> Unknown members are parsed either as enum constants or ordinary 
> members, depending on whether they are before or after ';' that 
> separates enum constants and members. One limitation of this estimate 
> are members which start with an annotation - these will be currently 
> categorized as "unknown", and parsed based on their position. If 
> needed, we could improve the behavior by estimating the category only 
> after annotations are parsed.
>
> This is a spin off from JDK-8228451.
>
> JBS: https://bugs.openjdk.java.net/browse/JDK-8228647
> Webrev: http://cr.openjdk.java.net/~jlahoda/8228647/webrev.00/index.html
>
> How does this look?
>
> Thanks,
>     Jan



More information about the compiler-dev mailing list