Deprecated attribute in module-info.class?

Jonathan Gibbons jonathan.gibbons at oracle.com
Thu Mar 29 22:56:11 UTC 2018


On 3/29/18 3:49 PM, Stephan Herrmann wrote:

> On 29.03.2018 18:02, Alan Bateman wrote:
>> On 29/03/2018 15:36, Stephan Herrmann wrote:
>>> I'm looking at jdk.xml.bind/module-info.class from JDK 9.0.4.
>>>
>>> I do find a RuntimeVisibleAnnotation attribute representing
>>>   @java.lang.Deprecated(since="9", forRemoval=true)
>>> but I don't find a Deprecated attribute.
>>>
>>> Is this intended? JVMS 4.7.15 neither includes nor excludes
>>> modules, but not generating the Deprecated attribute looks
>>> like an omission to me.
>> Are you using `javap` to look at the class or something else?
>>
>> I ask because `javap` tool was updated in JDK 10 to render 
>> annotations in a more friendly way. When I use the JDK 10 `javap` to 
>> look at the jdk.xml.bind's module-info.class from JDK 9 I see:
>>
>> RuntimeVisibleAnnotations:
>>    0: #5(#6=s#7,#8=Z#9)
>>      java.lang.Deprecated(
>>        since="9"
>>        forRemoval=true
>>      )
>>
>> whereas the JDK 9 `javap` prints less useful output.
>
> I did use JDK 9 javap, but was able to decipher the
> RuntimeVisibleAnnotations attribute as you can see above :)
> (Still good to know about the improvement in JDK 10).
>
> My question, however, concerns the lack of a Deprecated
> *attribute* a la JVMS 4.7.15.
>
> Is that intended or not?
>
> IOW, are compilers expected to evaluate RuntimeVisibleAnnotations
> in order to issue deprecation warnings?
> In the past this was not necessary.
>
> best,
> Stephan

Stephan,

Given JEP 277 [1], it is now necessary to read the annotation in order
to determine if the annotated item has been deprecated for removal,
and to act accordingly.

-- Jon

[1] http://openjdk.java.net/jeps/277


More information about the jigsaw-dev mailing list