Wait, I think I just figured this out... the annotation is on the code, not the method...
Nevermind! Thanks. On Wed, Nov 12, 2025 at 10:17 AM Archie Cobbs <[email protected]> wrote: > I think I found a bug in the ClassFile API but since I'm new to it, before > creating one in Jira, I wanted to double-check I'm not doing something > stupid... could someone please confirm? > > Consider this simple test class: > > import java.lang.annotation.*; > import java.lang.classfile.*; > import java.nio.file.Path; > > public class Test { > > public static void main(String[] args) throws Exception { > final String filename = args.length > 0 ? args[0] : > "Example.class"; > final Path path = Path.of(filename); > final ClassFile classFile = ClassFile.of(); > final ClassModel classModel = classFile.parse(path); > classModel.forEach(classElement -> { > switch (classElement) { > case MethodModel method when > method.methodName().equalsString("<init>") -> > System.out.println(String.format("%s: method \"%s\": > runtime visible type annotations: %s", > filename, method.methodName(), > method.findAttribute(Attributes.runtimeVisibleTypeAnnotations()))); > default -> { } > } > }); > } > } > > class Example { > Example(Object o) { > String s = (@Anno String)o; > } > } > > @Retention(RetentionPolicy.RUNTIME) > @Target(ElementType.TYPE_USE) > @interface Anno { } > > If you compile and run this test it doesn't find any type annotation > attribute on the Example constructor: > > $ javac Test.java && java Test > Example.class: method "<init>": runtime visible type annotations: > Optional.empty > > Yet javap shows that there is one (as expected): > > $ javap -verbose Example > ... > Example(java.lang.Object); > descriptor: (Ljava/lang/Object;)V > flags: (0x0000) > Code: > stack=1, locals=3, args_size=2 > 0: aload_0 > 1: invokespecial #1 // Method > java/lang/Object."<init>":()V > 4: aload_1 > 5: checkcast #7 // class java/lang/String > 8: astore_2 > 9: return > LineNumberTable: > line 24: 0 > line 25: 4 > line 26: 9 > RuntimeVisibleTypeAnnotations: > 0: #15(): CAST, offset=5, type_index=0 > Anno > > Thanks, > -Archie > > -- > Archie L. Cobbs > -- Archie L. Cobbs
