<AWT Dev> Fwd: Re: JDK 9 pre-review of JDK-6850612: Deprecate Class.newInstance since it violates the checked exception language contract

joe darcy joe.darcy at oracle.com
Tue Apr 26 16:45:38 UTC 2016


Phil and other client reviewers,

Please review this change from core libs which impacts client libs 
implementations. In brief, deprecating a method in core reflection 
requires uses of that method to have a @SuppressWarnings("deprecation") 
annotation. The typical way to minimize the scope of the deprecation is 
to declare a temporary variable which can host the @SuppressWarnings 
annotation. The alternative would have been to suppress the warning on 
the entire method, which would allow addition use of deprecated methods 
to sneak in.

      http://cr.openjdk.java.net/~darcy/6850612.0/

Thanks,

-Joe


-------- Forwarded Message --------
Subject: 	Re: JDK 9 pre-review of JDK-6850612: Deprecate 
Class.newInstance since it violates the checked exception language contract
Date: 	Thu, 21 Apr 2016 09:25:27 -0700
From: 	joe darcy <joe.darcy at oracle.com>
Organization: 	Oracle Corporation
To: 	core-libs-dev <core-libs-dev at openjdk.java.net>



Hello,

After a generally positive reception, please review the webrev to
implement the deprecation of Class.newInstance and the suppression of
the resulting warnings:

      http://cr.openjdk.java.net/~darcy/6850612.0/

There are also some changes in the langtools repo; I'll send a separate
review request for those changes to compiler-dev.

I'll also forward this review request to other areas with affected code.

Thanks,

-Joe

On 4/17/2016 10:31 AM, joe darcy wrote:
> Hello,
>
> With talk of deprecation in the air [1], I thought it would be a fine
> time to examine one of the bugs on my list
>
>     JDK-6850612: Deprecate Class.newInstance since it violates the
> checked exception language contract
>
> As the title of the bug implies, The Class.newInstance method
> knowingly violates the checking exception contract. This has long been
> documented in its specification:
>
>> Note that this method propagates any exception thrown by the nullary
>> constructor, including a checked exception. Use of this method
>> effectively bypasses the compile-time exception checking that would
>> otherwise be performed by the compiler. The Constructor.newInstance
>> method avoids this problem by wrapping any exception thrown by the
>> constructor in a (checked) InvocationTargetException.
>
> Roughly, the fix would be to turn the text of this note into the
> @deprecated text and to add a @Deprecated(since="9") annotation to the
> method. There are a few dozen uses of the method in the JDK that would
> have to be @SuppressWarning-ed or otherwise updated.
>
> Thoughts on the appropriateness of deprecating this method at this time?
>
> Comments on the bug have suggested that besides deprecating the
> method, a new method on Class could be introduced,
> newInstanceWithProperExceptionBehavior, that had the same signature
> but wrapped exceptions thrown by the constructor call in the same way
> Constructor.newInstance does.
>
> Thanks,
>
> -Joe
>
> [1]
> http://mail.openjdk.java.net/pipermail/core-libs-dev/2016-April/040192.html

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20160426/15095420/attachment.html>


More information about the awt-dev mailing list