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
Wed Apr 27 15:53:34 UTC 2016


Hi Daniel,

Good catch! I've fixed that in my working copy of the changes.

Thanks for the careful review,

-Joe

On 4/27/2016 7:20 AM, Daniel Fuchs wrote:
> Hi Joe,
>
> Changes in java.util.logging and java.management look good.
>
> I glanced at the rest and spotted one issue here:
>
> http://cr.openjdk.java.net/~darcy/6850612.0/src/java.desktop/share/classes/javax/swing/text/html/HTMLEditorKit.java.frames.html 
>
>
>  615                 Object o = 
> Class.forName("javax.swing.text.html.parser.ParserDelegator");
>  616                 defaultParser = (Parser) o;
>
> The call to newInstance() is missing at line 615
>
> best regards,
>
> -- daniel
>
> On 21/04/16 18:25, joe darcy wrote:
>> 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 
>>>
>>>
>>
>




More information about the core-libs-dev mailing list