ARM API Support
Joe Darcy
joe.darcy at oracle.com
Wed Jun 23 17:08:44 PDT 2010
Greetings
The initial API changes to support the Project Coin feature automatic
resource management (ARM) blocks have been pushed into JDK 7 [1] and
will appear in subsequent builds. The corresponding compiler changes to
support the actual language feature remain in progress.
The initial API work to support ARM was divided into two pieces,
essential API support and retrofitting platform classes. The essential
support includes:
* A new interface java.lang.AutoCloseable which defines a single method
void close() throws Exception
* A new enum constant in the language model:
javax.lang.model.element.ElementKind.RESOURCE_VARIABLE
* Methods on java.lang.Throwable to add and retrieve information about
suppressed exceptions, including printing out suppressed exceptions in
stack traces.
The retrofitting includes:
* Having java.io.Closeable extend java.lang.AutoCloseable. (From a
typing perspective, a subtype of AutoCloseable can be declared to throw
fewer exceptions than the supertype. Therefore is is fine for the close
method in AutoCloseable to throw Exception and the close method in
Closeable to throw the more specific IOException. It would even be fine
for the close method in a subtype of AutoCloseable to be declared to
throw no exceptions at all.)
* Adding a close method to java.nio.channels.FileLock and having
FileLock implement AutoCloseable.
* Adding Closeable as an interface implemented by
javax.imageio.stream.ImageInputStream.
Other platform classes may be retrofitted to implement AutoCloseable or
Closable in future builds.
Compared to the API support in earlier versions of the ARM proposal, the
top-level interface to mark participation in ARM is in package java.lang
rather than its own package and, after consultation with the JDBC and
graphics teams, neither java.sql.* nor java.awt.Graphics were
retrofitted for ARM.
-Joe
[1] http://hg.openjdk.java.net/jdk7/tl/jdk/rev/c4d60bcce958
http://hg.openjdk.java.net/jdk7/tl/langtools/rev/be5cafeb318d
More information about the coin-dev
mailing list