try-with-resources and null resource

Tom Hawtin tom.hawtin at oracle.com
Fri Jan 21 10:46:06 PST 2011


A compiler or other static checker following [inactive] JSR305 or 
similar @Nonnull, should find this problem no problem. Having the 
language spec forcing an ignore of the bug would be a bad thing, IMNSHO.

Tom

On 21/01/2011 17:12, Rémi Forax wrote:
> I think try-with-resources should do a null check before entering in the
> try block.
>
> 4. try(AutoCloseable c = null) {
> 5.     // nothing
> 6. }
>
> $ java TryWithresourceNPE
> Exception in thread "main" java.lang.NullPointerException
>       at TryWithresourceNPE.main(TryWithresourceNPE.java:6)
>
> I got a NPE from the ends of the try block, I think it will be better to
> detect the case
> before entering in the try block like foreach or switch does.
>
> And with this code:
>
> 5. try(InputStream i = null) {
> 6.       i.available();
> 7. }
>
> I got the exception below which is not understandable if you don't know
> how try-with-resources is translated.
>
> $ java TryWithresourceNPE
> Exception in thread "main" java.lang.NullPointerException
>       at TryWithresourceNPE.main(TryWithresourceNPE.java:6)
>       Suppressed: java.lang.NullPointerException
>           at TryWithresourceNPE.main(TryWithresourceNPE.java:7)
>
> If the nullcheck is done before entering in the try block,
> the exception will be:
> Exception in thread "main" java.lang.NullPointerException
>       at TryWithresourceNPE.main(TryWithresourceNPE.java:5)
> which is in my opinion much better.
>
> Rémi
> PS: the nullcheck can be done easily by calling getClass() on the expression
>
> 4. try(AutoCloseable c = null) {
> 5.     // nothing
> 6. }
>
> will be translated to
>
> aconst_null
> dup
> invokevirtual java/lang/Object getClass ()Ljava/lang/Class;
> astore local_slot_of_c
>
>




More information about the coin-dev mailing list