jdeps and annotations parameters
Jeff Hain
jeffhain at rocketmail.com
Tue Sep 8 22:28:54 UTC 2015
Hi Alex.
>Either this is a huge bug in javac or you're not looking in the right
>place. The code in an instance initializer compiles into the same <init>
>method as the code in a constructor, so I would expect the <init> method
>to have a RuntimeVisibleTypeAnnotations attribute whether the local
>variable (whose type is annotated) exists in {...} or a ctor.
Here are the classes I parsed to test that (using the same annotation as I described),
and bellow their respective constant pool, which are quite different, with the
non-constructor one NOT containing RuntimeVisibleTypeAnnotations
(compiled with JDK8_60, -source 1.8 -target 1.8 (I guess the defaults anyway)):
/**
* <init> method.
*/
public static class MyMethodCodeInitBlock {
{
// String will not make it into the class file.
@A_TYPE_USE_R_COMPLEX(nbrClsArr={Long.class},tooStrong="",rounding=RoundingMode.UNNECESSARY,doc=@Documented)
Integer foo = 1;
try {
MyBlackHole.blackHole(foo);
} catch (RuntimeException e) {
throw e;
}
}
}
/**
* <init> method.
*/
public static class MyMethodCodeConstructor {
public MyMethodCodeConstructor() {
// String will not make it into the class file.
@A_TYPE_USE_R_COMPLEX(nbrClsArr={Long.class},tooStrong="",rounding=RoundingMode.UNNECESSARY,doc=@Documented)
Integer foo = 1;
try {
MyBlackHole.blackHole(foo);
} catch (RuntimeException e) {
throw e;
}
}
}
pool[4] : class name utf8 index = 22
pool[5] : class name utf8 index = 24
pool[6] : class name utf8 index = 27
pool[7] : utf8 = <init>
pool[8] : utf8 = ()V
pool[9] : utf8 = Code
pool[10] : utf8 = LineNumberTable
pool[11] : utf8 = StackMapTable
pool[12] : class name utf8 index = 24
pool[13] : class name utf8 index = 28
pool[14] : class name utf8 index = 22
pool[15] : utf8 = SourceFile
pool[16] : utf8 = ClassDepsParserTest.java
pool[17] : descriptor (TAN) utf8 index = 8 = ()V
pool[18] : class name utf8 index = 28
pool[19] : descriptor (TAN) utf8 index = 30 = null
pool[20] : class name utf8 index = 31
pool[21] : descriptor (TAN) utf8 index = 34 = null
pool[22] : utf8 = java/lang/RuntimeException
pool[23] : class name utf8 index = 35
pool[24] : utf8 = net/jadecy/code/ClassDepsParserTest$MyMethodCodeInitBlock
pool[25] : utf8 = MyMethodCodeInitBlock
pool[26] : utf8 = InnerClasses
pool[27] : utf8 = java/lang/Object
pool[28] : utf8 = java/lang/Integer
pool[29] : utf8 = valueOf
pool[30] : utf8 = (I)Ljava/lang/Integer;
pool[31] : utf8 = net/jadecy/code/ClassDepsParserTest$MyBlackHole
pool[32] : utf8 = MyBlackHole
pool[33] : utf8 = blackHole
pool[34] : utf8 = (Ljava/lang/Object;)Z
pool[35] : utf8 = net/jadecy/code/ClassDepsParserTest
pool[4] : class name utf8 index = 36
pool[5] : class name utf8 index = 38
pool[6] : class name utf8 index = 40
pool[7] : utf8 = <init>
pool[8] : utf8 = ()V
pool[9] : utf8 = Code
pool[10] : utf8 = LineNumberTable
pool[11] : utf8 = StackMapTable
pool[12] : class name utf8 index = 38
pool[13] : class name utf8 index = 41
pool[14] : class name utf8 index = 36
pool[15] : utf8 = RuntimeVisibleTypeAnnotations
pool[16] : class name utf8 index = 42
pool[17] : utf8 = A_TYPE_USE_R_COMPLEX
pool[18] : utf8 = InnerClasses
pool[19] : utf8 = Lnet/jadecy/code/ClassDepsParserTest$A_TYPE_USE_R_COMPLEX;
pool[20] : utf8 = nbrClsArr
pool[21] : utf8 = Ljava/lang/Long;
pool[22] : utf8 = tooStrong
pool[23] : utf8 =
pool[24] : utf8 = rounding
pool[25] : utf8 = Ljava/math/RoundingMode;
pool[26] : utf8 = UNNECESSARY
pool[27] : utf8 = doc
pool[28] : utf8 = Ljava/lang/annotation/Documented;
pool[29] : utf8 = SourceFile
pool[30] : utf8 = ClassDepsParserTest.java
pool[31] : descriptor (TAN) utf8 index = 8 = ()V
pool[32] : class name utf8 index = 41
pool[33] : descriptor (TAN) utf8 index = 44 = null
pool[34] : class name utf8 index = 45
pool[35] : descriptor (TAN) utf8 index = 48 = null
pool[36] : utf8 = java/lang/RuntimeException
pool[37] : class name utf8 index = 49
pool[38] : utf8 = net/jadecy/code/ClassDepsParserTest$MyMethodCodeConstructor
pool[39] : utf8 = MyMethodCodeConstructor
pool[40] : utf8 = java/lang/Object
pool[41] : utf8 = java/lang/Integer
pool[42] : utf8 = net/jadecy/code/ClassDepsParserTest$A_TYPE_USE_R_COMPLEX
pool[43] : utf8 = valueOf
pool[44] : utf8 = (I)Ljava/lang/Integer;
pool[45] : utf8 = net/jadecy/code/ClassDepsParserTest$MyBlackHole
pool[46] : utf8 = MyBlackHole
pool[47] : utf8 = blackHole
pool[48] : utf8 = (Ljava/lang/Object;)Z
pool[49] : utf8 = net/jadecy/code/ClassDepsParserTest
-Jeff
More information about the jigsaw-dev
mailing list