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

Mandy Chung mandy.chung at oracle.com
Mon Dec 9 22:01:21 UTC 2019


+1

Mandy

On 12/9/19 1:34 PM, Joe Darcy wrote:
> 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