|  | // 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; | 
|  | } | 
|  | System.out.print(index++ + ": "); | 
|  | for (Annotation annotation : annotations[i]) { | 
|  | System.out.println(annotation); | 
|  | } | 
|  | } | 
|  | } | 
|  | } |