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