[enums] Enhanced enums: state of the implementation
Vicente Romero
vicente.romero at oracle.com
Fri Mar 24 17:17:46 UTC 2017
Hi all,
The initial support for enhanced enums have been recently pushed to the
amber repo, see [1, 2, 3, 4]. The current implementation has been
reviewed and compared with the current draft of the enhanced enums JEP
[5], looking for synchronization and omission issues. Below there is a
summary of the current state of the implementation,
Thanks,
Vicente
* Implementation overview
In general terms the enhanced enum implementation is concise and pretty
small (~500 lines of code). Almost all of the changes are in the
front-end, and are mainly focused in providing for the additional
expressibility of enhanced enums compared to legacy ones. There is one
change that can't be considered a front-end one, it's related to the
binary name of enhanced enum constants and will be mentioned below.
In the parsing area, the approach used for legacy enums is leveraged for
enhanced enums. The basic idea is still that an enum constant is
converted to a class creation expression that is assigned to a variable
which type is the one of the enum constant. The main difference is that
additional work is needed to parse the type arguments, in the case of
generic enums.
The binary names of enhanced enum constants are different to that of
legacy ones. For example give the following code snip:
| enum Foo {|
|||A {},|
|||B {};|
|||}|
The binary names assigned by a javac compiler, with no knowledge of
enhanced enums, to enum constants Foo.A and Foo.B are Foo$1 and Foo$2,
whereas in the case of the current enhanced enums implementation they
are Foo$$A and Foo$$B.
* Sync issues with the current draft of the JEP 301
The naming convention proposed in the section above, and already
implemented, is different to the one proposed in the JEP [5].
[1] http://mail.openjdk.java.net/pipermail/amber-dev/2017-March/000029.html
[2] http://mail.openjdk.java.net/pipermail/amber-dev/2017-March/000039.html
[3] http://mail.openjdk.java.net/pipermail/amber-dev/2017-March/000040.html
[4] http://mail.openjdk.java.net/pipermail/amber-dev/2017-March/000044.html
[5] http://openjdk.java.net/jeps/301
More information about the amber-dev
mailing list