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