JDK 15 RFR of JDK-8230771: Remove terminally deprecated constructors in java.base

Joe Darcy joe.darcy at oracle.com
Mon Dec 9 21:34:25 UTC 2019


PS That should be

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

Cheers,

-Joe

On 12/9/2019 12:39 PM, Joe Darcy wrote:
> Updated webrev:
>
>     http://cr.openjdk.java.net/~darcy/8230771.0/
>
> Found a class extending Modifier to the the static definitions; I 
> replaced this with a static import.
>
> To make sure a class isn't instantiated, I usually have it throw 
> AssertionError or some exception, although as you say that isn't 
> strictly necessary in all cases.
>
> Thanks,
>
> -Joe
>
> On 12/9/2019 10:27 AM, Mandy Chung wrote:
>> It seems a bit overly cautious to throw AssertionError.  JDK has many 
>> private no-arg constructor and it can be as simple as empty 
>> constructor.  Just my preference.
>>
>> Mandy
>>
>> On 12/9/19 10:16 AM, Joe Darcy wrote:
>>> Corrected patch:
>>>
>>> diff -r 153e5f76551d 
>>> src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java
>>> --- 
>>> a/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java 
>>> Mon Dec 09 23:00:13 2019 +0530
>>> +++ 
>>> b/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java 
>>> Mon Dec 09 10:15:44 2019 -0800
>>> @@ -43,8 +43,7 @@
>>>      /**
>>>       * Do not call.
>>>       */
>>> -    @Deprecated(forRemoval=true, since="14")
>>> -    public ConstantBootstraps() {}
>>> +    private ConstantBootstraps() {throw new AssertionError();}
>>>
>>>      // implements the upcall from the JVM, 
>>> MethodHandleNatives.linkDynamicConstant:
>>>      /*non-public*/
>>> diff -r 153e5f76551d 
>>> src/java.base/share/classes/java/lang/reflect/Modifier.java
>>> --- a/src/java.base/share/classes/java/lang/reflect/Modifier.java 
>>> Mon Dec 09 23:00:13 2019 +0530
>>> +++ b/src/java.base/share/classes/java/lang/reflect/Modifier.java 
>>> Mon Dec 09 10:15:44 2019 -0800
>>> @@ -46,8 +46,7 @@
>>>      /**
>>>       * Do not call.
>>>       */
>>> -    @Deprecated(forRemoval=true, since="14")
>>> -    public Modifier() {}
>>> +    private Modifier() {throw new AssertionError();}
>>>
>>>
>>>      /**
>>>
>>> -Joe
>>>
>>> On 12/9/2019 9:38 AM, Joe Darcy wrote:
>>>> Doh! Will correct. That is why I want to get the no-arg constructor 
>>>> added as a javac warning (JDK-8071961) ;-)
>>>>
>>>> Thanks all for catching this,
>>>>
>>>> -Joe
>>>>
>>>> On 12/9/2019 9:29 AM, Mandy Chung wrote:
>>>>> Good catch!  Daniel also pointed that out.  I overlooked it. It 
>>>>> needs to add back a private no-arg constructor.
>>>>>
>>>>> Mandy
>>>>>
>>>>> On 12/9/19 9:18 AM, Victor Williams Stafusa da Silva wrote:
>>>>>> If you remove the deprecated constructor, the compiler will add a 
>>>>>> default one. Wouldn't it be a better idea to make the deprecated 
>>>>>> constructor private and throwing an exception?
>>>>>>
>>>>>> Em seg., 9 de dez. de 2019 às 14:13, Mandy Chung 
>>>>>> <mandy.chung at oracle.com <mailto:mandy.chung at oracle.com>> escreveu:
>>>>>>
>>>>>>     Looks good.
>>>>>>
>>>>>>     Mandy
>>>>>>
>>>>>>     On 12/8/19 10:58 AM, Joe Darcy wrote:
>>>>>>     > Hello,
>>>>>>     >
>>>>>>     > Please review this small API changes for JDK 15:
>>>>>>     >
>>>>>>     >     JDK-8230771: Remove terminally deprecated constructors in
>>>>>>     java.base
>>>>>>     >     CSR: https://bugs.openjdk.java.net/browse/JDK-8235548
>>>>>>     >     webrev: http://cr.openjdk.java.net/~darcy/8230771.0/
>>>>>>     >
>>>>>>     > Patch below.
>>>>>>     >
>>>>>>     > Thanks,
>>>>>>     >
>>>>>>     > -Joe
>>>>>>     >
>>>>>>     > ---
>>>>>>     >
>>>>>> old/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java 
>>>>>>
>>>>>>
>>>>>>     > 2019-12-08 10:56:14.223168685 -0800
>>>>>>     > +++
>>>>>>     >
>>>>>> new/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java 
>>>>>>
>>>>>>
>>>>>>     > 2019-12-08 10:56:13.999168685 -0800
>>>>>>     > @@ -40,12 +40,6 @@
>>>>>>     >   * @since 11
>>>>>>     >   */
>>>>>>     >  public final class ConstantBootstraps {
>>>>>>     > -    /**
>>>>>>     > -     * Do not call.
>>>>>>     > -     */
>>>>>>     > -    @Deprecated(forRemoval=true, since="14")
>>>>>>     > -    public ConstantBootstraps() {}
>>>>>>     > -
>>>>>>     >      // implements the upcall from the JVM,
>>>>>>     > MethodHandleNatives.linkDynamicConstant:
>>>>>>     >      /*non-public*/
>>>>>>     >      static Object makeConstant(MethodHandle bootstrapMethod,
>>>>>>     > ---
>>>>>> old/src/java.base/share/classes/java/lang/reflect/Modifier.java
>>>>>>     > 2019-12-08 10:56:14.775168685 -0800
>>>>>>     > +++
>>>>>> new/src/java.base/share/classes/java/lang/reflect/Modifier.java
>>>>>>     > 2019-12-08 10:56:14.555168685 -0800
>>>>>>     > @@ -44,13 +44,6 @@
>>>>>>     >   */
>>>>>>     >  public class Modifier {
>>>>>>     >      /**
>>>>>>     > -     * Do not call.
>>>>>>     > -     */
>>>>>>     > -    @Deprecated(forRemoval=true, since="14")
>>>>>>     > -    public Modifier() {}
>>>>>>     > -
>>>>>>     > -
>>>>>>     > -    /**
>>>>>>     >       * Return {@code true} if the integer argument 
>>>>>> includes the
>>>>>>     >       * {@code public} modifier, {@code false} otherwise.
>>>>>>     >       *
>>>>>>     >
>>>>>>
>>>>>
>>


More information about the core-libs-dev mailing list