Deprecated attribute in module-info.class?

Stephan Herrmann stephan.herrmann at berlin.de
Thu Mar 29 23:53:22 UTC 2018


Thanks, Jon, that's exactly what I was looking for.

Stephan

On 30.03.2018 01:23, Jonathan Gibbons wrote:
> 
> 
> On 3/29/18 4:02 PM, Stephan Herrmann wrote:
>> On 30.03.2018 00:56, Jonathan Gibbons wrote:
>>> 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.
>>
>> That's true, I was just hoping, we could skip evaluating
>> RuntimeVisibleAnnotations if no Deprecated attribute is found.
>>
>> Is using Deprecated attributes now deprecated ? :p
>>
>> Stephan
>>
> 
> Stephan,
> 
> Check these rules [1] which apply for class files with ACC_MODULE set:
> 
>   *
> 
>     |attributes|: One|Module|attribute must be present. Except
>     for|Module|,|ModulePackages|,|ModuleMainClass|,|InnerClasses|,|SourceFile|,|SourceDebugExtension|,|RuntimeVisibleAnnotations|,
>     and|RuntimeInvisibleAnnotations|, none of the pre-defined attributes
>     (§4.7
>     <https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.7>)
>     may appear.
> 
> -- Jon
> 
> [1] https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html#jvms-4.1 (see the end of this section)
> 



More information about the jigsaw-dev mailing list