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