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

Joe Darcy joe.darcy at oracle.com
Mon Dec 9 20:39:55 UTC 2019


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