Hello,

On 1/13/2015 11:53 PM, Ivan Gerasimov wrote:
Hi!

A useful change!

I agree :-) We haven't publicized the change very much yet, but it is part of JEP 213, Milling Project Coin, (http://openjdk.java.net/jeps/213) and went into JDK 9's javac late in 2014.

Might it also make sense to allow anonymous variables in the try-with-resource statement? So that something like `try (() -> System.out.println("closed")) {}` would work...

I don't think that is necessary. In JDK 7, we started out allowing a general AutoCloseable expression in a try-with-resources statement and that proved problematic. Supporting a final / effectively final variable seems to be the right balance. The rationale is written up in the JSR 334 materials.


Would it make sense to also patch jdk/src/java.base/windows/classes/java/io/FileDescriptor.java in a similar manner, as it appears to contain the exactly same code?

Good catch.

Thanks,

-Joe


Sincerely yours,
Ivan

On 14.01.2015 5:46, joe darcy wrote:
Hello,

Earlier in JDK 9, a language change was made so that if a resource for a try-with-resources statement is already final or effectively final, a new resource variable does *not* need to be declared to manage the variable.

The java.base module should take advantage of this language feature.

I've run an experimental checker for such locations over the base module and found one candidate where the new language feature can be used; please review this patch for it:

diff -r d873f6a7d16b src/java.base/unix/classes/java/io/FileDescriptor.java --- a/src/java.base/unix/classes/java/io/FileDescriptor.java Tue Jan 13 14:33:54 2015 -0800 +++ b/src/java.base/unix/classes/java/io/FileDescriptor.java Tue Jan 13 18:40:54 2015 -0800
@@ -214,7 +214,7 @@
         if (!closed) {
             closed = true;
             IOException ioe = null;
-            try (Closeable c = releaser) {
+            try (releaser) {
                 if (otherParents != null) {
                     for (Closeable referent : otherParents) {
                         try {

The build succeeds with this change and the java.io.FileDescriptor regression tests pass.

Thanks,

-Joe




Reply via email to