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)


Reply via email to