Hi all, chasing a bug on ASM, i've found that the module implementation in the JDK uses the wrong values for ACC_TRANSITIVE and ACC_STATIC_PHASE, in the spec [1], 0x0020 (ACC_TRANSITIVE) 0x0040 (ACC_STATIC_PHASE) but in the implementation [2], public static final int ACC_TRANSITIVE = 0x0010; public static final int ACC_STATIC_PHASE = 0x0020;
The output of javap is wrong too (java.xml) is tagged as ACC_STATIC_PHASE with the value 20, but 20 means ACC_TRANSITIVE ! open module org.objectweb.asm.all@6.0_ALPHA2 minor version: 0 major version: 53 flags: (0x8000) ACC_MODULE this_class: #2 // "module-info" super_class: #0 interfaces: 0, fields: 0, methods: 0, attributes: 1 Constant pool: ... { } Module: #4,20 // "org.objectweb.asm.all" ACC_OPEN #5 // 6.0_ALPHA2 2 // requires #7,8000 // "java.base" ACC_MANDATED #0 #9,20 // "java.xml" ACC_STATIC_PHASE #0 7 // exports #11,0 // org/objectweb/asm #13,0 // org/objectweb/asm/commons #15,0 // org/objectweb/asm/signature #17,0 // org/objectweb/asm/tree #19,0 // org/objectweb/asm/tree/analysis #21,0 // org/objectweb/asm/util #23,0 // org/objectweb/asm/xml 0 // opens 0 // uses 0 // provides This means that currently ASM is the only correct implementation of the classfile format :) Rémi [1] http://cr.openjdk.java.net/~mr/jigsaw/spec/lang-vm.html [2] http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/e4b19b8d4bbf/src/java.base/share/classes/jdk/internal/module/ClassFileConstants.java#l49