Deprecated attribute in module-info.class?
Jonathan Gibbons
jonathan.gibbons at oracle.com
Thu Mar 29 23:23:19 UTC 2018
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