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

Mandy Chung mandy.chung at oracle.com
Mon Dec 9 18:27:54 UTC 2019


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