T6388543.java revision 3960:6f91e41163bc
1139749Simp/* 2123120Simp * @test /nodynamiccopyright/ 3123120Simp * @bug 6388543 4256219Smav * @summary improve accuracy of source positions for AnnotationValue param of Messager.printMessage 5123120Simp * @library /tools/javac/lib 6123120Simp * @modules jdk.compiler 7123120Simp * @build JavacTestingAbstractProcessor T6388543 8123120Simp * @compile/ref=T6388543.out -XDrawDiagnostics -processor T6388543 -proc:only T6388543.java 9123120Simp */ 10125813Srik 11123120Simpimport java.lang.annotation.Retention; 12123120Simpimport java.lang.annotation.RetentionPolicy; 13123120Simpimport java.util.List; 14123120Simpimport java.util.Set; 15123120Simpimport javax.annotation.processing.RoundEnvironment; 16123120Simpimport javax.lang.model.element.AnnotationMirror; 17123120Simpimport javax.lang.model.element.AnnotationValue; 18123120Simpimport javax.lang.model.element.Element; 19123120Simpimport javax.lang.model.element.TypeElement; 20123120Simp 21123120Simpimport static javax.tools.Diagnostic.Kind.NOTE; 22130985Srik 23123120Simpclass Annotated { 24130985Srik @A(1) 25123120Simp int a1; 26123120Simp 27123120Simp @A(value = 2) 28123120Simp int a2; 29123120Simp 30123120Simp @A(value = {3}) 31123120Simp int a3; 32129879Sphk 33164033Srwatson @A(value = {4, 5}) 34123120Simp int a4; 35123120Simp 36123120Simp @B(x = @C(x = E.ONE, y = E.TWO), y = @C(x = E.ONE, y = E.TWO)) 37123120Simp int b; 38123120Simp} 39138823Srik 40123120Simp@Retention(RetentionPolicy.RUNTIME) 41123120Simp@interface A { 42136480Sphk int[] value() default 0; 43123120Simp} 44130971Srik 45130971Srik@Retention(RetentionPolicy.RUNTIME) 46130971Srik@interface B { 47130971Srik C x() default @C; 48123120Simp 49123120Simp C y() default @C; 50123120Simp} 51123120Simp 52123120Simp@Retention(RetentionPolicy.RUNTIME) 53123120Simp@interface C { 54123120Simp E x() default E.ONE; 55130971Srik 56130971Srik E y() default E.ONE; 57130971Srik} 58130971Srik 59123120Simpenum E { 60123120Simp ONE, 61123120Simp TWO 62123120Simp} 63123120Simp 64130971Srikpublic class T6388543 extends JavacTestingAbstractProcessor { 65123120Simp public boolean process(Set<? extends TypeElement> annos, RoundEnvironment roundEnv) { 66123120Simp if (roundEnv.processingOver()) { 67123120Simp return false; 68123120Simp } 69123120Simp for (Element e : elements.getTypeElement("Annotated").getEnclosedElements()) { 70123120Simp for (AnnotationMirror a : e.getAnnotationMirrors()) { 71123120Simp for (AnnotationValue v : a.getElementValues().values()) { 72136472Sphk printValue(e, a, v); 73130095Sphk } 74129029Srik } 75129029Srik } 76129029Srik return false; 77129029Srik } 78129029Srik 79123120Simp private void printValue(Element e, AnnotationMirror a, AnnotationValue v) { 80123120Simp messager.printMessage(NOTE, String.format("note:value %s + %s", a, v), e, a, v); 81123120Simp v.accept( 82123120Simp new SimpleAnnotationValueVisitor<Void, Void>() { 83123120Simp @Override 84138823Srik public Void visitArray(List<? extends AnnotationValue> values, Void unused) { 85138823Srik for (AnnotationValue value : values) { 86188768Srwatson printValue(e, a, value); 87188768Srwatson } 88188768Srwatson return null; 89138823Srik } 90123120Simp 91123120Simp @Override 92123120Simp public Void visitAnnotation(AnnotationMirror nestedAnnotation, Void unused) { 93123120Simp for (AnnotationValue value : nestedAnnotation.getElementValues().values()) { 94123120Simp printValue(e, a, value); 95123120Simp } 96123120Simp return null; 97123120Simp } 98123120Simp }, 99123120Simp null); 100123120Simp } 101123120Simp} 102123120Simp