blob: b02d345c4235b859d8781d93c0683a391bdad7fe [file] [log] [blame]
// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package regress_62300145;
import static java.lang.annotation.RetentionPolicy.CLASS;
import java.lang.annotation.Annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Constructor;
public class Regress {
@Retention(RetentionPolicy.RUNTIME)
public @interface A {
}
@Retention(CLASS)
@Target({ElementType.PARAMETER})
public @interface B {
}
public class InnerClass {
public InnerClass(@A @B String p1, @A String p2, @B String p3) { }
}
public static void main(String[] args) throws NoSuchMethodException {
Constructor<InnerClass> constructor = InnerClass.class.getDeclaredConstructor(
Regress.class, String.class, String.class, String.class);
Annotation[][] annotations = constructor.getParameterAnnotations();
int index = 0;
for (int i = 0; i < annotations.length; i++) {
// TODO(b/67936230): Java 8 and Java 9 runtime does not have the same behavior regarding
// implicit parameter such as 'outer this' for instance. Disable this test on Java 9 runtime
// due to this divergence.
if (System.getProperty("java.specification.version").equals("9") && i == 0) {
continue;
}
// On 9 and below, annotations are also printed for the Regress.class (first argument to the
// getDeclaredConstructor). b/120402200
if (i != 0 || annotations[i].length != 0) {
System.out.print(index++ + ": ");
}
for (Annotation annotation : annotations[i]) {
System.out.println(annotation);
}
}
}
}