changeset 3388:f434ca8aface

8042451: Write tests for all possible kinds of type annotation Summary: Add new tests for type annotations to improve case coverage Reviewed-by: jjg, emc, abuckley
author aeremeev
date Fri, 06 Jun 2014 16:08:46 -0400
parents 3dfd962149b2
children 01c43036a26e
files test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassExtends.java test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassTypeParam.java test/tools/javac/annotations/typeAnnotations/referenceinfos/ConstructorInvocationTypeArgument.java test/tools/javac/annotations/typeAnnotations/referenceinfos/Constructors.java test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java test/tools/javac/annotations/typeAnnotations/referenceinfos/ExceptionParameters.java test/tools/javac/annotations/typeAnnotations/referenceinfos/Fields.java test/tools/javac/annotations/typeAnnotations/referenceinfos/FromSpecification.java test/tools/javac/annotations/typeAnnotations/referenceinfos/Initializers.java test/tools/javac/annotations/typeAnnotations/referenceinfos/Lambda.java test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodInvocationTypeArgument.java test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodParameters.java test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReceivers.java test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReturns.java test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodThrows.java test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodTypeParam.java test/tools/javac/annotations/typeAnnotations/referenceinfos/MultiCatch.java test/tools/javac/annotations/typeAnnotations/referenceinfos/NestedTypes.java test/tools/javac/annotations/typeAnnotations/referenceinfos/NewObjects.java test/tools/javac/annotations/typeAnnotations/referenceinfos/ReferenceInfoUtil.java test/tools/javac/annotations/typeAnnotations/referenceinfos/ResourceVariable.java test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeCasts.java test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeTests.java
diffstat 23 files changed, 3670 insertions(+), 1641 deletions(-) [+]
line wrap: on
line diff
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassExtends.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassExtends.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,72 +25,110 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for class extends clauses
  * @compile -g Driver.java ReferenceInfoUtil.java ClassExtends.java
  * @run main Driver ClassExtends
  */
 public class ClassExtends {
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1),
-        @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1)
+    @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
     public String regularClass() {
-        return "class Test extends @TA Object implements Cloneable, @TB Runnable {"
+        return "class %TEST_CLASS_NAME% extends @TA Object implements Cloneable, @TB Runnable {"
                + "  public void run() { } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
-                genericLocation  = { 3, 1 })
-    })
-    public String regularClassExtendsParametrized() {
-        return "class Test extends HashMap<@TA String, String> implements Cloneable, Map<String, @TB String>{ } ";
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1)
+    @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1)
+    public String regularClassRepeatableAnnotation() {
+        return "class %TEST_CLASS_NAME% extends @RTA @RTA Object implements Cloneable, @RTB @RTB Runnable {"
+                + "  public void run() { } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1),
-        @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
+            genericLocation  = { 3, 1 })
+    public String regularClassExtendsParametrized() {
+        return "class %TEST_CLASS_NAME% extends HashMap<@TA String, String> implements Cloneable, Map<String, @TB String>{ } ";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
+            genericLocation  = { 3, 1 })
+    public String regularClassExtendsParametrizedRepeatableAnnotation() {
+        return "class %TEST_CLASS_NAME% extends HashMap<@RTA @RTA String, String> implements Cloneable, Map<String, @RTB @RTB String>{ } ";
+    }
+
+    @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1)
+    @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
     public String abstractClass() {
-        return "abstract class Test extends @TA Date implements Cloneable, @TB Runnable {"
+        return "abstract class %TEST_CLASS_NAME% extends @TA Date implements Cloneable, @TB Runnable {"
                + "  public void run() { } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_EXTENDS, typeIndex = -1,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
-                genericLocation  = { 3, 1 })
-    })
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1)
+    @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1)
+    public String abstractClassRepeatableAnnotation() {
+        return "abstract class %TEST_CLASS_NAME% extends @RTA @RTA Date implements Cloneable, @RTB @RTB Runnable {"
+                + "  public void run() { } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = -1,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
+            genericLocation  = { 3, 1 })
     public String abstractClassExtendsParametrized() {
-        return "abstract class Test extends HashMap<@TA String, String> implements Cloneable, Map<String, @TB String>{ } ";
+        return "abstract class %TEST_CLASS_NAME% extends HashMap<@RTA @RTA String, String> implements Cloneable, Map<String, @RTB @RTB String>{ } ";
     }
 
     @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
     public String regularInterface() {
-        return "interface Test extends Cloneable, @TB Runnable { }";
+        return "interface %TEST_CLASS_NAME% extends Cloneable, @TB Runnable { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS, typeIndex = 1)
+    public String regularInterfaceRepetableAnnotation() {
+        return "interface %TEST_CLASS_NAME% extends Cloneable, @RTA @RTA Runnable { }";
     }
 
     @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
             genericLocation  = { 3, 1 })
     public String regularInterfaceExtendsParametrized() {
-        return "interface Test extends Cloneable, Map<String, @TB String>{ } ";
+        return "interface %TEST_CLASS_NAME% extends Cloneable, Map<String, @TB String>{ } ";
+    }
+
+    @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
+            genericLocation  = { 3, 1 })
+    public String regularInterfaceExtendsParametrizedRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% extends Cloneable, Map<String, @RTB @RTB String>{ } ";
     }
 
     @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1)
     public String regularEnum() {
-        return "enum Test implements Cloneable, @TB Runnable { TEST; public void run() { } }";
+        return "enum %TEST_CLASS_NAME% implements Cloneable, @TB Runnable { TEST; public void run() { } }";
+    }
+
+    @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1)
+    public String regularEnumRepeatableAnnotation() {
+        return "enum %TEST_CLASS_NAME% implements Cloneable, @RTB @RTB Runnable { TEST; public void run() { } }";
     }
 
     @TADescription(annotation = "TB", type = CLASS_EXTENDS, typeIndex = 1,
             genericLocation  = { 3, 0 })
     public String regularEnumExtendsParametrized() {
         return
-            "enum Test implements Cloneable, Comparator<@TB String> { TEST;  "
+            "enum %TEST_CLASS_NAME% implements Cloneable, Comparator<@TB String> { TEST;  "
             + "public int compare(String a, String b) { return 0; }}";
     }
 
+    @TADescription(annotation = "RTBs", type = CLASS_EXTENDS, typeIndex = 1,
+            genericLocation  = { 3, 0 })
+    public String regularEnumExtendsParametrizedRepeatableAnnotation() {
+        return
+                "enum %TEST_CLASS_NAME% implements Cloneable, Comparator<@RTB @RTB String> { TEST;  "
+                        + "public int compare(String a, String b) { return 0; }}";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassTypeParam.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/ClassTypeParam.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,134 +25,232 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for class type parameters
  * @compile -g Driver.java ReferenceInfoUtil.java ClassTypeParam.java
  * @run main Driver ClassTypeParam
  */
 public class ClassTypeParam {
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
-    })
-    public String regularClass() {
-        return "class Test<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String regularClass1() {
+        return "class %TEST_CLASS_NAME%<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
     public String regularClass2() {
-        return "class Test<@TA K extends @TB Date, @TC V extends @TE Cloneable> { }";
+        return "class %TEST_CLASS_NAME%<@TA K extends @TB Date, @TC V extends @TE Cloneable> { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
-    })
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
     public String regularClassParameterized() {
-        return "class Test<K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> { }";
+        return "class %TEST_CLASS_NAME%<K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TG", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TG", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
     public String regularClassParameterized2() {
-        return "class Test<K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
+        return "class %TEST_CLASS_NAME%<K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
     public String abstractClass() {
-        return "abstract class Test<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
+        return "abstract class %TEST_CLASS_NAME%<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
     public String abstractClassParameterized() {
-        return "abstract class Test<K extends @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
+        return "abstract class %TEST_CLASS_NAME%<K extends @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
     public String regularInterface() {
-        return "interface Test<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
+        return "interface %TEST_CLASS_NAME%<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
-    })
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
     public String regularInterfaceParameterized() {
-        return "interface Test<K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> { }";
+        return "interface %TEST_CLASS_NAME%<K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TG", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TG", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
     public String regularInterfaceParameterized2() {
-        return "interface Test<K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
+        return "interface %TEST_CLASS_NAME%<K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> { }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_RETURN)
     public String useInReturn1() {
-        return "class Test<T> { @TA T m() { throw new RuntimeException(); } }";
+        return "class %TEST_CLASS_NAME%<T> { @TA T m() { throw new RuntimeException(); } }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {3, 0})
     public String useInReturn2() {
-        return "class Test<T> { Class<@TA T> m() { throw new RuntimeException(); } }";
+        return "class %TEST_CLASS_NAME%<T> { Class<@TA T> m() { throw new RuntimeException(); } }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
             paramIndex = 0, genericLocation = {3, 0})
     public String useInParam1() {
-        return "class Test<T> { void m(Class<@TA T> p) { throw new RuntimeException(); } }";
+        return "class %TEST_CLASS_NAME%<T> { void m(Class<@TA T> p) { throw new RuntimeException(); } }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
             paramIndex = 0, genericLocation = {3, 0})
     public String useInParam2() {
-        return "class Test { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
+        return "class %TEST_CLASS_NAME% { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
     }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String regularClassRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME%<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String regularClassRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME%<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTE @RTE Cloneable> { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    public String regularClassParameterizedRepeatableAnnotation() {
+        return "class %TEST_CLASS_NAME%<K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+                " V extends @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "RTFs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "RTGs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    public String regularClassParameterizedRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME%<K extends @RTG @RTG Object & @RTA @RTA Map<String, @RTB @RTB String>," +
+                " V extends @RTF @RTF Object & @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String abstractClassRepeatableAnnotation() {
+        return "abstract class %TEST_CLASS_NAME%<@RTA @RTA K extends @RTB @RTB Date," +
+                " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "RTFs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    public String abstractClassParameterizedRepeatableAnnotation() {
+        return "abstract class %TEST_CLASS_NAME%<K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+                " V extends @RTF @RTF Object & @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String regularInterfaceRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME%<@RTA @RTA K extends @RTB @RTB Date," +
+                " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    public String regularInterfaceParameterizedRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME%<K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+                " V extends @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "RTCs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "RTEs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "RTFs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "RTGs", type = CLASS_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    public String regularInterfaceParameterizedRepeatableAnnotation2() {
+        return "interface %TEST_CLASS_NAME%<K extends @RTG @RTG Object & @RTA @RTA Map<String, @RTB @RTB String>," +
+                " V extends @RTF @RTF Object & @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    public String useInReturnRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME%<T> { @RTA @RTA T m() { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN, genericLocation = {3, 0})
+    public String useInReturnRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME%<T> { Class<@RTA @RTA T> m() { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0, genericLocation = {3, 0})
+    public String useInParamRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME%<T> { void m(Class<@RTA @RTA T> p) { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0, genericLocation = {3, 0})
+    public String useInParamRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME% { void m(Class<@RTA @RTA Object> p) { throw new RuntimeException(); } }";
+    }
+
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/ConstructorInvocationTypeArgument.java	Fri Jun 06 16:08:46 2014 -0400
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8042451
+ * @summary Test population of reference info for constructor invocation type argument
+ * @compile -g Driver.java ReferenceInfoUtil.java ConstructorInvocationTypeArgument.java
+ * @run main Driver ConstructorInvocationTypeArgument
+ */
+
+import static com.sun.tools.classfile.TypeAnnotation.TargetType.CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT;
+
+public class ConstructorInvocationTypeArgument {
+
+    @TADescription(annotation = "TA", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 4)
+    @TADescription(annotation = "TB", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 0)
+    public String generic1() {
+        return "class %TEST_CLASS_NAME% { <T> %TEST_CLASS_NAME%(int i) { new <@TA T>%TEST_CLASS_NAME%(); }" +
+                " <T> %TEST_CLASS_NAME%() { <@TB String>this(0); } }";
+    }
+
+    @TADescription(annotation = "TA", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 0)
+    public String generic2() {
+        return "class Super { <T> Super(int i) { } } " +
+                "class %TEST_CLASS_NAME% extends Super { <T> %TEST_CLASS_NAME%() { <@TA String>super(0); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 4)
+    @TADescription(annotation = "RTBs", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 0)
+    public String genericRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME% { <T> %TEST_CLASS_NAME%(int i) { new <@RTA @RTA T>%TEST_CLASS_NAME%(); }" +
+                " <T> %TEST_CLASS_NAME%() { <@RTB @RTB String>this(0); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 0)
+    public String genericRepeatableAnnotation2() {
+        return "class Super { <T> Super(int i) { } } " +
+                "class %TEST_CLASS_NAME% extends Super { <T> %TEST_CLASS_NAME%() { <@RTA @RTA String>super(0); } }";
+    }
+}
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/Constructors.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/Constructors.java	Fri Jun 06 16:08:46 2014 -0400
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8026791
+ * @bug 8026791 8042451
  * @summary Test population of reference info for constructor results
  * @compile -g Driver.java ReferenceInfoUtil.java Constructors.java
  * @run main Driver Constructors
@@ -33,52 +33,44 @@
 
 public class Constructors {
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN),
-        @TADescription(annotation = "TB", type = METHOD_RETURN),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN)
+    @TADescription(annotation = "TB", type = METHOD_RETURN)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
     public String regularClass() {
-        return "class Test { @TA Test() {}" +
-                           " @TB Test(@TC int b) {} }";
+        return "class %TEST_CLASS_NAME% { @TA %TEST_CLASS_NAME%() {}" +
+                           " @TB %TEST_CLASS_NAME%(@TC int b) {} }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {1, 0}),
-        @TADescription(annotation = "TB", type = METHOD_RETURN, genericLocation = {1, 0}),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
-    })
-    @TestClass("Test$Inner")
+    @TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {1, 0})
+    @TADescription(annotation = "TB", type = METHOD_RETURN, genericLocation = {1, 0})
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String innerClass() {
-        return "class Test { class Inner {" +
+        return "class %TEST_CLASS_NAME% { class Inner {" +
                " @TA Inner() {}" +
                " @TB Inner(@TC int b) {}" +
                " } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RECEIVER),
-        @TADescription(annotation = "TB", type = METHOD_RETURN, genericLocation = {1, 0}),
-        @TADescription(annotation = "TC", type = METHOD_RECEIVER),
-        @TADescription(annotation = "TD", type = METHOD_RETURN, genericLocation = {1, 0}),
-        @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
-    })
-    @TestClass("Test$Inner")
+    @TADescription(annotation = "TA", type = METHOD_RECEIVER)
+    @TADescription(annotation = "TB", type = METHOD_RETURN, genericLocation = {1, 0})
+    @TADescription(annotation = "TC", type = METHOD_RECEIVER)
+    @TADescription(annotation = "TD", type = METHOD_RETURN, genericLocation = {1, 0})
+    @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String innerClass2() {
-        return "class Test { class Inner {" +
-               " @TB Inner(@TA Test Test.this) {}" +
-               " @TD Inner(@TC Test Test.this, @TE int b) {}" +
+        return "class %TEST_CLASS_NAME% { class Inner {" +
+               " @TB Inner(@TA %TEST_CLASS_NAME% %TEST_CLASS_NAME%.this) {}" +
+               " @TD Inner(@TC %TEST_CLASS_NAME% %TEST_CLASS_NAME%.this, @TE int b) {}" +
                " } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RECEIVER),
-        @TADescription(annotation = "TB", type = METHOD_RECEIVER, genericLocation = {1, 0}),
-        @TADescription(annotation = "TC", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0}),
-        @TADescription(annotation = "TD", type = METHOD_RECEIVER, genericLocation = {1, 0}),
-        @TADescription(annotation = "TE", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0}),
-        @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_RECEIVER)
+    @TADescription(annotation = "TB", type = METHOD_RECEIVER, genericLocation = {1, 0})
+    @TADescription(annotation = "TC", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0})
+    @TADescription(annotation = "TD", type = METHOD_RECEIVER, genericLocation = {1, 0})
+    @TADescription(annotation = "TE", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0})
+    @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
     @TestClass("Outer$Middle$Inner")
     public String innerClass3() {
         return "class Outer { class Middle { class Inner {" +
@@ -87,24 +79,49 @@
                " } } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
-                typeIndex = 0, offset = 4),
-        @TADescription(annotation = "TB", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
-                typeIndex = 0, offset = 0)
-    })
-    public String generic1() {
-        return "class Test { <T> Test(int i) { new <@TA T>Test(); }" +
-                           " <T> Test() { <@TB String>this(0); } }";
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    public String regularClassRepeatableAnnotation() {
+        return "class %TEST_CLASS_NAME% { @RTA  @RTA %TEST_CLASS_NAME%() {}" +
+                " @RTB @RTB %TEST_CLASS_NAME%(@RTC @RTC int b) {} }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT,
-                typeIndex = 0, offset = 0)
-    })
-    public String generic2() {
-        return "class Super { <T> Super(int i) { } } " +
-                "class Test extends Super { <T> Test() { <@TA String>super(0); } }";
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN, genericLocation = {1, 0})
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN, genericLocation = {1, 0})
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String innerClassRepeatableAnnotation() {
+        return "class %TEST_CLASS_NAME% { class Inner {" +
+                " @RTA @RTA Inner() {}" +
+                " @RTB @RTB Inner(@RTC @RTC int b) {}" +
+                " } }";
     }
 
+    @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN, genericLocation = {1, 0})
+    @TADescription(annotation = "RTCs", type = METHOD_RECEIVER)
+    @TADescription(annotation = "RTDs", type = METHOD_RETURN, genericLocation = {1, 0})
+    @TADescription(annotation = "RTEs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String innerClassRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME% { class Inner {" +
+                " @RTB @RTB Inner(@RTA @RTA %TEST_CLASS_NAME% %TEST_CLASS_NAME%.this) {}" +
+                " @RTD @RTD Inner(@RTC @RTC %TEST_CLASS_NAME% %TEST_CLASS_NAME%.this, @RTE @RTE int b) {}" +
+                " } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+    @TADescription(annotation = "RTBs", type = METHOD_RECEIVER, genericLocation = {1, 0})
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0})
+    @TADescription(annotation = "RTDs", type = METHOD_RECEIVER, genericLocation = {1, 0})
+    @TADescription(annotation = "RTEs", type = METHOD_RETURN, genericLocation = {1, 0, 1, 0})
+    @TADescription(annotation = "RTFs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TestClass("Outer$Middle$Inner")
+    public String innerClassRepatableAnnotation3() {
+        return "class Outer { class Middle { class Inner {" +
+                " @RTC @RTC Inner(@RTA @RTA Outer. @RTB @RTB Middle Middle.this) {}" +
+                " @RTE @RTE Inner(@RTD @RTD Middle Outer.Middle.this, @RTF @RTF int b) {}" +
+                " } } }";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/Driver.java	Fri Jun 06 16:08:46 2014 -0400
@@ -40,51 +40,75 @@
 import com.sun.tools.classfile.TypeAnnotation;
 import com.sun.tools.classfile.TypeAnnotation.TargetType;
 
+import static java.lang.String.format;
+
 public class Driver {
 
     private static final PrintStream out = System.err;
 
+    private final Object testObject;
+
+    public Driver(Class<?> clazz) throws IllegalAccessException, InstantiationException {
+        testObject = clazz.newInstance();
+    }
+
     public static void main(String[] args) throws Exception {
         if (args.length == 0 || args.length > 1)
             throw new IllegalArgumentException("Usage: java Driver <test-name>");
         String name = args[0];
-        Class<?> clazz = Class.forName(name);
-        new Driver().runDriver(clazz.newInstance());
+        new Driver(Class.forName(name)).runDriver();
     }
 
-    String[][] extraParamsCombinations = new String[][] {
+    private final String[][] extraParamsCombinations = new String[][] {
         new String[] { },
         new String[] { "-g" },
     };
 
-    protected void runDriver(Object object) throws Exception {
+    private final String[] retentionPolicies = {RetentionPolicy.CLASS.toString(), RetentionPolicy.RUNTIME.toString()};
+
+    protected void runDriver() {
         int passed = 0, failed = 0;
-        Class<?> clazz = object.getClass();
+        Class<?> clazz = testObject.getClass();
         out.println("Tests for " + clazz.getName());
 
         // Find methods
         for (Method method : clazz.getMethods()) {
-            Map<String, TypeAnnotation.Position> expected = expectedOf(method);
-            if (expected == null)
-                continue;
-            if (method.getReturnType() != String.class)
-                throw new IllegalArgumentException("Test method needs to return a string: " + method);
-            String testClass = testClassOf(method);
+            try {
+                Map<String, TypeAnnotation.Position> expected = expectedOf(method);
+                if (expected == null)
+                    continue;
+                if (method.getReturnType() != String.class)
+                    throw new IllegalArgumentException("Test method needs to return a string: " + method);
 
-            for (String[] extraParams : extraParamsCombinations) {
-                try {
-                    String compact = (String)method.invoke(object);
-                    String fullFile = wrap(compact);
-                    ClassFile cf = compileAndReturn(fullFile, testClass, extraParams);
-                    List<TypeAnnotation> actual = ReferenceInfoUtil.extendedAnnotationsOf(cf);
-                    ReferenceInfoUtil.compare(expected, actual, cf);
-                    out.println("PASSED:  " + method.getName());
-                    ++passed;
-                } catch (Throwable e) {
-                    out.println("FAILED:  " + method.getName());
-                    out.println("    " + e.toString());
-                    ++failed;
+                String compact = (String) method.invoke(testObject);
+                for (String retentionPolicy : retentionPolicies) {
+                    String testClassName = getTestClassName(method, retentionPolicy);
+                    String testClass = testClassOf(method, testClassName);
+                    String fullFile = wrap(compact, new HashMap<String, String>() {{
+                        put("%RETENTION_POLICY%", retentionPolicy);
+                        put("%TEST_CLASS_NAME%", testClassName);
+                    }});
+                    for (String[] extraParams : extraParamsCombinations) {
+                        try {
+                            ClassFile cf = compileAndReturn(fullFile, testClass, extraParams);
+                            List<TypeAnnotation> actual = ReferenceInfoUtil.extendedAnnotationsOf(cf);
+                            ReferenceInfoUtil.compare(expected, actual, cf);
+                            out.format("PASSED:  %s %s%n", testClassName, Arrays.toString(extraParams));
+                            ++passed;
+                        } catch (Throwable e) {
+                            out.format("FAILED:  %s %s%n", testClassName, Arrays.toString(extraParams));
+                            out.println(fullFile);
+                            out.println("    " + e.toString());
+                            e.printStackTrace(out);
+                            ++failed;
+                        }
+                    }
                 }
+            } catch (IllegalAccessException | InvocationTargetException e) {
+                out.println("FAILED:  " + method.getName());
+                out.println("    " + e.toString());
+                e.printStackTrace(out);
+                ++failed;
             }
         }
 
@@ -106,7 +130,7 @@
             return null;
 
         Map<String, TypeAnnotation.Position> result =
-            new HashMap<String, TypeAnnotation.Position>();
+            new HashMap<>();
 
         if (ta != null)
             result.putAll(expectedOf(ta));
@@ -149,33 +173,42 @@
     }
 
     private List<Integer> wrapIntArray(int[] ints) {
-        List<Integer> list = new ArrayList<Integer>(ints.length);
+        List<Integer> list = new ArrayList<>(ints.length);
         for (int i : ints)
             list.add(i);
         return list;
     }
 
-    private String testClassOf(Method m) {
+    private String getTestClassName(Method m, String retentionPolicy) {
+        return format("%s_%s_%s", testObject.getClass().getSimpleName(),
+                m.getName(), retentionPolicy);
+    }
+
+    private String testClassOf(Method m, String testClassName) {
         TestClass tc = m.getAnnotation(TestClass.class);
         if (tc != null) {
-            return tc.value();
+            return tc.value().replace("%TEST_CLASS_NAME%", testClassName);
         } else {
-            return "Test";
+            return testClassName;
         }
     }
 
     private ClassFile compileAndReturn(String fullFile, String testClass, String... extraParams) throws Exception {
-        File source = writeTestFile(fullFile);
-        File clazzFile = compileTestFile(source, testClass);
+        File source = writeTestFile(fullFile, testClass);
+        File clazzFile = compileTestFile(source, testClass, extraParams);
         return ClassFile.read(clazzFile);
     }
 
-    protected File writeTestFile(String fullFile) throws IOException {
-        File f = new File("Test.java");
-        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f)));
-        out.println(fullFile);
-        out.close();
-        return f;
+    protected File writeTestFile(String fullFile, String testClass) throws IOException {
+        File f = new File(getClassDir(), format("%s.java", testClass));
+        try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f)))) {
+            out.println(fullFile);
+            return f;
+        }
+    }
+
+    private String getClassDir() {
+        return System.getProperty("test.classes", Driver.class.getResource(".").getPath());
     }
 
     protected File compileTestFile(File f, String testClass, String... extraParams) {
@@ -185,20 +218,15 @@
         int rc = com.sun.tools.javac.Main.compile(options.toArray(new String[options.size()]));
         if (rc != 0)
             throw new Error("compilation failed. rc=" + rc);
-        String path;
-        if (f.getParent() != null) {
-            path = f.getParent();
-        } else {
-            path = "";
-        }
-
-        return new File(path + testClass + ".class");
+        String path = f.getParent() != null ? f.getParent() : "";
+        return new File(path, format("%s.class", testClass));
     }
 
-    private String wrap(String compact) {
+    private String wrap(String compact, Map<String, String> replacements) {
         StringBuilder sb = new StringBuilder();
 
         // Automatically import java.util
+        sb.append("\nimport java.io.*;");
         sb.append("\nimport java.util.*;");
         sb.append("\nimport java.lang.annotation.*;");
 
@@ -208,7 +236,7 @@
                             && !compact.contains("interface")
                             && !compact.contains("enum");
         if (isSnippet)
-            sb.append("class Test {\n");
+            sb.append("class %TEST_CLASS_NAME% {\n");
 
         sb.append(compact);
         sb.append("\n");
@@ -224,41 +252,102 @@
         }
 
         // create A ... F annotation declarations
-        sb.append("\n@interface A {}");
-        sb.append("\n@interface B {}");
-        sb.append("\n@interface C {}");
-        sb.append("\n@interface D {}");
-        sb.append("\n@interface E {}");
-        sb.append("\n@interface F {}");
+        sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface A {}");
+        sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface B {}");
+        sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface C {}");
+        sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface D {}");
+        sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface E {}");
+        sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface F {}");
 
         // create TA ... TF proper type annotations
         sb.append("\n");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TA {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TB {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TC {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TD {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TE {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TF {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TG {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TH {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TI {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TJ {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TK {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TL {}");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface TM {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                " @Retention(RetentionPolicy.%RETENTION_POLICY%)  @interface TA {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TB {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TC {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TD {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TE {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TF {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TG {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TH {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TI {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TJ {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TK {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TL {}");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface TM {}");
 
-        // create RTA, RTAs, RTB, RTBs for repeating type annotations
+        // create RT?, RT?s for repeating type annotations
         sb.append("\n");
-        sb.append("\n@Repeatable(RTAs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTA {}");
-        sb.append("\n@Repeatable(RTBs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTB {}");
+        sb.append("\n@Repeatable(RTAs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTA {}");
+        sb.append("\n@Repeatable(RTBs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTB {}");
+        sb.append("\n@Repeatable(RTCs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTC {}");
+        sb.append("\n@Repeatable(RTDs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTD {}");
+        sb.append("\n@Repeatable(RTEs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTE {}");
+        sb.append("\n@Repeatable(RTFs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTF {}");
+        sb.append("\n@Repeatable(RTGs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTG {}");
+        sb.append("\n@Repeatable(RTHs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTH {}");
+        sb.append("\n@Repeatable(RTIs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTI {}");
+        sb.append("\n@Repeatable(RTJs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTJ {}");
+        sb.append("\n@Repeatable(RTKs.class) @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTK {}");
 
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTAs { RTA[] value(); }");
-        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @interface RTBs { RTB[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTAs { RTA[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTBs { RTB[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTCs { RTC[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTDs { RTD[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTEs { RTE[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTFs { RTF[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTGs { RTG[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTHs { RTH[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTIs { RTI[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTJs { RTJ[] value(); }");
+        sb.append("\n@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})" +
+                "@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface RTKs { RTK[] value(); }");
 
-        sb.append("\n@Target(value={ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER,ElementType.CONSTRUCTOR,ElementType.LOCAL_VARIABLE})");
-        sb.append("\n@interface Decl {}");
+        sb.append("\n@Target(value={ElementType.TYPE,ElementType.FIELD,ElementType.METHOD," +
+                "ElementType.PARAMETER,ElementType.CONSTRUCTOR,ElementType.LOCAL_VARIABLE})");
+        sb.append("\n@Retention(RetentionPolicy.%RETENTION_POLICY%) @interface Decl {}");
 
-        return sb.toString();
+        return replaceAll(sb.toString(), replacements);
+    }
+
+    private String replaceAll(String src, Map<String, String> replacements) {
+        for (Map.Entry<String, String> entry : replacements.entrySet()) {
+            src = src.replace(entry.getKey(), entry.getValue());
+        }
+        return src;
     }
 
     public static final int NOT_SET = -888;
@@ -267,6 +356,7 @@
 
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.METHOD)
+@Repeatable(TADescriptions.class)
 @interface TADescription {
     String annotation();
 
@@ -296,5 +386,5 @@
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.METHOD)
 @interface TestClass {
-    String value() default "Test";
+    String value();
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/ExceptionParameters.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/ExceptionParameters.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,7 +25,7 @@
 
 /*
  * @test
- * @bug 8028576
+ * @bug 8028576 8042451
  * @summary Test population of reference info for exception parameters
  * @author Werner Dietl
  * @compile -g Driver.java ReferenceInfoUtil.java ExceptionParameters.java
@@ -43,11 +43,9 @@
         return "void finalException() { try { new Object(); } catch(final @TA Exception e) { } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
-        @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
-        @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
-    })
+    @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
     public String multipleExceptions1() {
         return "void multipleExceptions() { " +
             "try { new Object(); } catch(@TA Exception e) { }" +
@@ -56,11 +54,9 @@
             " }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
-        @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
-        @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
-    })
+    @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
     public String multipleExceptions2() {
         return "void multipleExceptions() { " +
             "  try { new Object(); " +
@@ -71,11 +67,9 @@
             "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
-        @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
-        @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
-    })
+    @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
     public String multipleExceptions3() {
         return "void multipleExceptions() { " +
             "  try { new Object(); " +
@@ -87,4 +81,48 @@
             "  }" +
             "}";
     }
+
+    @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    public String exceptionRepeatableAnnoation() {
+        return "void exception() { try { new Object(); } catch(@RTA @RTA Exception e) { } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+    public String multipleExceptionsRepeatableAnnotation1() {
+        return "void multipleExceptions() { " +
+                "try { new Object(); } catch(@RTA @RTA Exception e) { }" +
+                "try { new Object(); } catch(@RTB @RTB Exception e) { }" +
+                "try { new Object(); } catch(@RTC @RTC Exception e) { }" +
+                " }";
+    }
+
+    @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+    public String multipleExceptionsRepeatableAnnotation2() {
+        return "void multipleExceptions() { " +
+                "  try { new Object(); " +
+                "    try { new Object(); " +
+                "      try { new Object(); } catch(@RTA @RTA Exception e) { }" +
+                "    } catch(@RTB @RTB Exception e) { }" +
+                "  } catch(@RTC @RTC Exception e) { }" +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+    public String multipleExceptionsRepeatableAnnotation3() {
+        return "void multipleExceptions() { " +
+                "  try { new Object(); " +
+                "  } catch(@RTA @RTA Exception e1) { "+
+                "    try { new Object(); " +
+                "    } catch(@RTB @RTB Exception e2) {" +
+                "      try { new Object(); } catch(@RTC @RTC Exception e3) { }" +
+                "    }" +
+                "  }" +
+                "}";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/Fields.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/Fields.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,6 +25,7 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for field
  * @compile -g Driver.java ReferenceInfoUtil.java Fields.java
  * @run main Driver Fields
@@ -41,37 +42,31 @@
         return "@TA Object test;";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD),
-        @TADescription(annotation = "TB", type = FIELD,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TC", type = FIELD,
-                genericLocation = { 3, 1 }),
-        @TADescription(annotation = "TD", type = FIELD,
-                genericLocation = { 3, 1, 3, 0 })
-    })
+    @TADescription(annotation = "TA", type = FIELD)
+    @TADescription(annotation = "TB", type = FIELD,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "TC", type = FIELD,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "TD", type = FIELD,
+            genericLocation = { 3, 1, 3, 0 })
     public String fieldAsParametrized() {
         return "@TA Map<@TB String, @TC List<@TD String>> test;";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD),
-        @TADescription(annotation = "TB", type = FIELD,
-                genericLocation = { 0, 0 }),
-        @TADescription(annotation = "TC", type = FIELD,
-                genericLocation = { 0, 0, 0, 0 })
-    })
+    @TADescription(annotation = "TA", type = FIELD)
+    @TADescription(annotation = "TB", type = FIELD,
+            genericLocation = { 0, 0 })
+    @TADescription(annotation = "TC", type = FIELD,
+            genericLocation = { 0, 0, 0, 0 })
     public String fieldAsArray() {
         return "@TC String @TA [] @TB [] test;";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD),
-        @TADescription(annotation = "TB", type = FIELD,
-                genericLocation = { 0, 0 }),
-        @TADescription(annotation = "TC", type = FIELD,
-                genericLocation = { 0, 0, 0, 0 })
-    })
+    @TADescription(annotation = "TA", type = FIELD)
+    @TADescription(annotation = "TB", type = FIELD,
+            genericLocation = { 0, 0 })
+    @TADescription(annotation = "TC", type = FIELD,
+            genericLocation = { 0, 0, 0, 0 })
     public String fieldAsArrayOld() {
         return "@TC String test @TA [] @TB [];";
     }
@@ -88,39 +83,108 @@
 
     // Smoke tests
     @TADescription(annotation = "TA", type = FIELD)
-    public String interfacefieldAsObject() {
-        return "interface Test { @TA String test = null; }";
+    public String interfaceFieldAsObject() {
+        return "interface %TEST_CLASS_NAME% { @TA String test = null; }";
     }
 
     @TADescription(annotation = "TA", type = FIELD)
-    public String abstractfieldAsObject() {
-        return "abstract class Test { @TA String test; }";
+    public String abstractFieldAsObject() {
+        return "abstract class %TEST_CLASS_NAME% { @TA String test; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD),
-        @TADescription(annotation = "TB", type = FIELD,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TC", type = FIELD,
-                genericLocation = { 3, 1 }),
-        @TADescription(annotation = "TD", type = FIELD,
-                genericLocation = { 3, 1, 3, 0 })
-    })
-    public String interfacefieldAsParametrized() {
-        return "interface Test { @TA Map<@TB String, @TC List<@TD String>> test = null; }";
+    @TADescription(annotation = "TA", type = FIELD)
+    @TADescription(annotation = "TB", type = FIELD,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "TC", type = FIELD,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "TD", type = FIELD,
+            genericLocation = { 3, 1, 3, 0 })
+    public String interfaceFieldAsParametrized() {
+        return "interface %TEST_CLASS_NAME% { @TA Map<@TB String, @TC List<@TD String>> test = null; }";
     }
 
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD),
-        @TADescription(annotation = "TB", type = FIELD,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TC", type = FIELD,
-                genericLocation = { 3, 1 }),
-        @TADescription(annotation = "TD", type = FIELD,
-                genericLocation = { 3, 1, 3, 0 })
-    })
+    @TADescription(annotation = "TA", type = FIELD)
+    @TADescription(annotation = "TB", type = FIELD,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "TC", type = FIELD,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "TD", type = FIELD,
+            genericLocation = { 3, 1, 3, 0 })
     public String staticFieldAsParametrized() {
         return "static @TA Map<@TB String, @TC List<@TD String>> test;";
     }
+
+    @TADescription(annotation = "RTAs", type = FIELD)
+    public String fieldAsPrimitiveRepeatableAnnotation() {
+        return "@RTA @RTA int test;";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD)
+    public String fieldAsObjectRepeatableAnnotation() {
+        return "@RTA @RTA Object test;";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD)
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTCs", type = FIELD,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "RTDs", type = FIELD,
+            genericLocation = { 3, 1, 3, 0 })
+    public String fieldAsParametrizedRepeatableAnnotation() {
+        return "@RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test;";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD)
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = { 0, 0 })
+    @TADescription(annotation = "RTCs", type = FIELD,
+            genericLocation = { 0, 0, 0, 0 })
+    public String fieldAsArrayRepeatableAnnotation() {
+        return "@RTC @RTC String @RTA @RTA [] @RTB @RTB [] test;";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD)
+    @TADescription(annotation = "RTBs", type = FIELD,
+           genericLocation = { 0, 0 })
+    @TADescription(annotation = "RTCs", type = FIELD,
+            genericLocation = { 0, 0, 0, 0 })
+    public String fieldAsArrayOldRepeatableAnnotation() {
+        return "@RTC @RTC String test @RTA @RTA [] @RTB @RTB [];";
+    }
+
+    // Smoke tests
+    @TADescription(annotation = "RTAs", type = FIELD)
+    public String interfaceFieldAsObjectRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% { @RTA @RTA String test = null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD)
+    public String abstractFieldAsObjectRepeatableAnnotation() {
+        return "abstract class %TEST_CLASS_NAME% { @RTA @RTA String test; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD)
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTCs", type = FIELD,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "RTDs", type = FIELD,
+            genericLocation = { 3, 1, 3, 0 })
+    public String interfaceFieldAsParametrizedRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% { @RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test = null; }";
+    }
+
+
+    @TADescription(annotation = "RTAs", type = FIELD)
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTCs", type = FIELD,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "RTDs", type = FIELD,
+            genericLocation = { 3, 1, 3, 0 })
+    public String staticFieldAsParametrizedRepeatableAnnotation() {
+        return "static @RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test;";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/FromSpecification.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/FromSpecification.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,98 +25,89 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test that the examples from the manual are stored as expected
  * @compile -g Driver.java ReferenceInfoUtil.java FromSpecification.java
  * @run main Driver FromSpecification
  */
 public class FromSpecification {
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 2, 0}, paramIndex = 0),
-        @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 1}, paramIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 0, 2, 0}, paramIndex = 0)
+    @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 1}, paramIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = {3, 1, 3, 0}, paramIndex = 0)
-    })
     public String testSpec1() {
         return "void test(@TA Map<@TB ? extends @TC String, @TD List<@TE Object>> a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = {0, 0, 0, 0, 0, 0}, paramIndex = 0)
-    })
     public String testSpec2() {
         return "void test(@TI String @TF [] @TG [] @TH [] a) { }";
     }
 
     // Note first "1, 0" for top-level class Test.
-    @TADescriptions({
-        @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0, 1, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TL", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TM", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0, 1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TL", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TM", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = {1, 0}, paramIndex = 0)
-    })
     public String testSpec3() {
-        return "class Test { class O1 { class O2 { class O3 { class NestedStatic {} } } }" +
+        return "class %TEST_CLASS_NAME% { class O1 { class O2 { class O3 { class NestedStatic {} } } }" +
                 "void test(@TM O1.@TL O2.@TK O3.@TJ NestedStatic a) { } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 3, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 3, 0, 0, 0, 0, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 1}, paramIndex = 0),
-        @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 0, 3, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 0, 3, 0, 0, 0, 0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 1}, paramIndex = 0)
+    @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = {3, 1, 3, 0}, paramIndex = 0)
-    })
     public String testSpec4() {
         return "void test(@TA Map<@TB Comparable<@TF Object @TC [] @TD [] @TE []>, @TG List<@TH String>> a) { }";
     }
 
     // Note first "1, 0" for top-level class Test.
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0, 1, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0),
-        @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0, 3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0, 1, 0, 3, 1}, paramIndex = 0),
-        @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0, 1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+    @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {1, 0, 1, 0, 3, 1}, paramIndex = 0)
+    @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = {1, 0}, paramIndex = 0)
-    })
     public String testSpec5() {
-        return "class Test { class O1 { class O2<A, B> { class O3 { class Nested<X, Y> {} } } }" +
+        return "class %TEST_CLASS_NAME% { class O1 { class O2<A, B> { class O3 { class Nested<X, Y> {} } } }" +
                 "void test(@TH O1.@TE O2<@TF String, @TG String>.@TD O3.@TA Nested<@TB String, @TC String> a) { } }";
     }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/Initializers.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/Initializers.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,7 +25,7 @@
 
 /*
  * @test
- * @bug 8013852
+ * @bug 8013852 8042451
  * @summary Test population of reference info for instance and class initializers
  * @author Werner Dietl
  * @compile -g Driver.java ReferenceInfoUtil.java Initializers.java
@@ -33,63 +33,98 @@
  */
 public class Initializers {
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = NEW,
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = NEW,
                 genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
-    public String instanceInit1() {
-        return "class Test { { Object o = new @TA ArrayList<@TB String>(); } }";
+        public String instanceInit1() {
+        return "class %TEST_CLASS_NAME% { { Object o = new @TA ArrayList<@TB String>(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = NEW,
-                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TD", type = NEW,
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = NEW,
                 genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
-    public String instanceInit2() {
-        return "class Test { Object f = new @TA ArrayList<@TB String>(); " +
+    @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TD", type = NEW,
+                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+        public String instanceInit2() {
+        return "class %TEST_CLASS_NAME% { Object f = new @TA ArrayList<@TB String>(); " +
                 " { Object o = new @TC ArrayList<@TD String>(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = NEW,
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = NEW,
                 genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
-    public String staticInit1() {
-        return "class Test { static { Object o = new @TA ArrayList<@TB String>(); } }";
+        public String staticInit1() {
+        return "class %TEST_CLASS_NAME% { static { Object o = new @TA ArrayList<@TB String>(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = NEW,
-                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TD", type = NEW,
-                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TF", type = NEW,
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = NEW,
                 genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
-    public String staticInit2() {
-        return "class Test { Object f = new @TA ArrayList<@TB String>(); " +
+    @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TD", type = NEW,
+                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TF", type = NEW,
+                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+        public String staticInit2() {
+        return "class %TEST_CLASS_NAME% { Object f = new @TA ArrayList<@TB String>(); " +
                 " static Object g = new @TC ArrayList<@TD String>(); " +
                 " static { Object o = new @TE ArrayList<@TF String>(); } }";
     }
 
-    // TODO: test interaction with several constructors, especially non-initial constuctors.
+    @TADescription(annotation = "TA", type = CAST,
+                typeIndex = 0, offset = ReferenceInfoUtil.IGNORE_VALUE)
+        public String lazyConstantCast1() {
+        return "class %TEST_CLASS_NAME% { public static final Object o = (@TA Object) null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String instanceInitRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME% { { Object o = new @RTA @RTA ArrayList<@RTB @RTB String>(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTDs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String instanceInitRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME% { Object f = new @RTA @RTA ArrayList<@RTB @RTB String>(); " +
+                " { Object o = new @RTC @RTC ArrayList<@RTD @RTD String>(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String staticInitRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME% { static { Object o = new @RTA @RTA ArrayList<@RTB @RTB String>(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTDs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTEs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTFs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String staticInitRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME% { Object f = new @RTA @RTA ArrayList<@RTB @RTB String>(); " +
+                " static Object g = new @RTC @RTC ArrayList<@RTD @RTD String>(); " +
+                " static { Object o = new @RTE @RTE ArrayList<@RTF @RTF String>(); } }";
+    }
+
+    // TODO: test interaction with several constructors, especially non-initial constructors.
     // I don't think this kind of test is possible here.
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST,
-                typeIndex = 0, offset = ReferenceInfoUtil.IGNORE_VALUE),
-    })
-    public String lazyConstantCast1() {
-        return "class Test { public static final Object o = (@TA Object) null; }";
+    @TADescription(annotation = "RTAs", type = CAST,
+            typeIndex = 0, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String lazyConstantCastRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME% { public static final Object o = (@RTA @RTA Object) null; }";
     }
-
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/Lambda.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/Lambda.java	Fri Jun 06 16:08:46 2014 -0400
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug 8008077 8029721
+ * @bug 8008077 8029721 8042451 8043974
  * @summary Test population of reference info for lambda expressions
  * javac crash for annotated parameter type of lambda in a field
  * @compile -g Driver.java ReferenceInfoUtil.java Lambda.java
@@ -35,64 +35,58 @@
 
 public class Lambda {
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_REFERENCE,
-                offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = METHOD_REFERENCE,
+    @TADescription(annotation = "TA", type = METHOD_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TB", type = METHOD_REFERENCE,
+                offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String returnMethodRef1() {
         return
                 "class Lambda {" +
                 "  public String getName() { return \"Lambda!\"; }" +
                 "}" +
 
-                "class Test {" +
+                "class %TEST_CLASS_NAME% {" +
                 "  java.util.function.Function<Lambda, String> lambda() {" +
                 "    return @TA @TB Lambda::getName;" +
                 "  }" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_REFERENCE,
-                offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = METHOD_REFERENCE,
+    @TADescription(annotation = "TA", type = METHOD_REFERENCE,
+                offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = METHOD_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TC", type = METHOD_REFERENCE,
+                genericLocation = { 3, 0 })
+    @TADescription(annotation = "TC", type = METHOD_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TD", type = METHOD_REFERENCE,
-                offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 1 }),
-        @TADescription(annotation = "TE", type = METHOD_REFERENCE,
+                genericLocation = { 3, 0 })
+    @TADescription(annotation = "TD", type = METHOD_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
                 genericLocation = { 3, 1 })
-    })
+    @TADescription(annotation = "TE", type = METHOD_REFERENCE,
+                offset = ReferenceInfoUtil.IGNORE_VALUE,
+                genericLocation = { 3, 1})
     public String returnMethodRef2() {
         return
                 "class Lambda<S, T> {" +
                 "  public String getName() { return \"Lambda!\"; }" +
                 "}" +
 
-                "class Test {" +
+                "class %TEST_CLASS_NAME% {" +
                 "  java.util.function.Function<Lambda<Integer, Float>, String> lambda() {" +
                 "    return @TA Lambda<@TB @TC Integer, @TD @TE Float>::getName;" +
                 "  }" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "CTA", type = METHOD_REFERENCE,
-                offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "CTB", type = METHOD_REFERENCE,
+    @TADescription(annotation = "CTA", type = METHOD_REFERENCE,
+                offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "CTB", type = METHOD_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "CTC", type = METHOD_REFERENCE,
+                genericLocation = { 3, 0 })
+    @TADescription(annotation = "CTC", type = METHOD_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 1 })
-    })
+                genericLocation = { 3, 1    })
     public String returnMethodRef3() {
         return
                 "class Lambda<S, T> {" +
@@ -114,7 +108,7 @@
                 "  String name();" +
                 "}" +
 
-                "class Test {" +
+                "class %TEST_CLASS_NAME% {" +
                 "  java.util.function.Function<Lambda<Integer, Float>, String> lambda() {" +
                 "    return @CTA(\"x\") Lambda<@CTB(age = 5) Integer, @CTC(name = \"y\") Float>::getName;" +
                 "  }" +
@@ -122,64 +116,58 @@
     }
 
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
-                offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
+    @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
+                offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String returnConstructorRef1() {
         return
                 "class Lambda {" +
                 "  Lambda() { }" +
                 "}" +
 
-                "class Test {" +
+                "class %TEST_CLASS_NAME% {" +
                 "  Runnable lambda() {" +
                 "    return @TA @TB Lambda::new;" +
                 "  }" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
-                offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
+    @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
+                offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TC", type = CONSTRUCTOR_REFERENCE,
+                genericLocation = { 3, 0 })
+    @TADescription(annotation = "TC", type = CONSTRUCTOR_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TD", type = CONSTRUCTOR_REFERENCE,
-                offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 1 }),
-        @TADescription(annotation = "TE", type = CONSTRUCTOR_REFERENCE,
+                genericLocation = { 3, 0 })
+    @TADescription(annotation = "TD", type = CONSTRUCTOR_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
                 genericLocation = { 3, 1 })
-    })
+    @TADescription(annotation = "TE", type = CONSTRUCTOR_REFERENCE,
+                offset = ReferenceInfoUtil.IGNORE_VALUE,
+                genericLocation = { 3, 1    })
     public String returnConstructorRef2() {
         return
                 "class Lambda<S, T> {" +
                 "  Lambda() { }" +
                 "}" +
 
-                "class Test {" +
+                "class %TEST_CLASS_NAME% {" +
                 "  Runnable lambda() {" +
                 "    return @TA Lambda<@TB @TC Integer, @TD @TE Float>::new;" +
                 "  }" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "CTA", type = CONSTRUCTOR_REFERENCE,
-                offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "CTB", type = CONSTRUCTOR_REFERENCE,
+    @TADescription(annotation = "CTA", type = CONSTRUCTOR_REFERENCE,
+                offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "CTB", type = CONSTRUCTOR_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "CTC", type = CONSTRUCTOR_REFERENCE,
+                genericLocation = { 3, 0 })
+    @TADescription(annotation = "CTC", type = CONSTRUCTOR_REFERENCE,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = { 3, 1 })
-    })
+                genericLocation = { 3, 1    })
     public String returnConstructorRef3() {
         return
                 "class Lambda<S, T> {" +
@@ -201,7 +189,7 @@
                 "  String name();" +
                 "}" +
 
-                "class Test {" +
+                "class %TEST_CLASS_NAME% {" +
                 "  Runnable lambda() {" +
                 "    return @CTA(\"x\") Lambda<@CTB(age = 5) Integer, @CTC(name = \"y\") Float>::new;" +
                 "  }" +
@@ -209,14 +197,12 @@
     }
 
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_REFERENCE_TYPE_ARGUMENT,
+    @TADescription(annotation = "TA", type = METHOD_REFERENCE_TYPE_ARGUMENT,
                  offset = ReferenceInfoUtil.IGNORE_VALUE,
-                 typeIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_REFERENCE_TYPE_ARGUMENT,
+                 typeIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_REFERENCE_TYPE_ARGUMENT,
                  offset = ReferenceInfoUtil.IGNORE_VALUE,
                  typeIndex = 1)
-    })
     public String returnMethodRefTA1() {
         return
                 "interface Lambda {" +
@@ -227,21 +213,19 @@
                 "  public <S, T> void generic(S p1, T p2) {}" +
                 "}" +
 
-                "class Test {" +
+                "class %TEST_CLASS_NAME% {" +
                 "  Lambda lambda(LambdaImpl r) {" +
                 "    return r::<@TA Object, @TB Object>generic;" +
                 "  }" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
+    @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
                  offset = ReferenceInfoUtil.IGNORE_VALUE,
-                 typeIndex = 0),
-        @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
+                 typeIndex = 0)
+    @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
                  offset = ReferenceInfoUtil.IGNORE_VALUE,
                  typeIndex = 1)
-    })
     public String returnConstructorRefTA2() {
         return
                 "interface Lambda {" +
@@ -253,57 +237,222 @@
                 "  public <S, T> void generic(S p1, T p2) {}" +
                 "}" +
 
-                "class Test {" +
+                "class %TEST_CLASS_NAME% {" +
                 "  Lambda lambda() {" +
                 "    return LambdaImpl::<@TA Object, @TB Object>new;" +
                 "  }" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                paramIndex = 1),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
-                paramIndex = 1, genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+                paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                paramIndex = 1)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+                paramIndex = 1, genericLocation = { 3, 0 })
+    @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
                 lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
                 lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
-                lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TE", type = CAST,
+                lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TE", type = CAST,
                 offset = ReferenceInfoUtil.IGNORE_VALUE,
                 typeIndex = 0)
-    })
     public String returnLambdaExpr1() {
         return
                 "interface LambdaInt {" +
                 "  void lambda(Object p1, List<Object> p2);" +
                 "}" +
-                "class Test {" +
+                "class %TEST_CLASS_NAME% {" +
                 "  LambdaInt getLambda() {" +
                 "    return (@TA Object x, @TB List<@TC Object> y) -> { @TD Object l = null; System.out.println((@TE Object) l); };" +
                 "  }" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-            paramIndex = 0)})
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0)
     public String lambdaField1() {
         return
-            "class Test {" +
+            "class %TEST_CLASS_NAME% {" +
                 " java.util.function.IntUnaryOperator field = (@TA int y) -> 1;" +
             "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-            paramIndex = 0)})
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0)
     public String lambdaField2() {
         return
-            "class Test {" +
+            "class %TEST_CLASS_NAME% {" +
                 " static java.util.function.IntUnaryOperator field = (@TA int y) -> 1;" +
             "}";
     }
+
+    @TADescription(annotation = "RTAs", type = METHOD_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String returnMethodRefRepeatableAnnotation1() {
+        return
+                "class Lambda {" +
+                        "  public String getName() { return \"Lambda!\"; }" +
+                        "}" +
+
+                        "class %TEST_CLASS_NAME% {" +
+                        "  java.util.function.Function<Lambda, String> lambda() {" +
+                        "    return @RTA @RTA Lambda::getName;" +
+                        "  }" +
+                        "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = METHOD_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTCs", type = METHOD_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTDs", type = METHOD_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "RTEs", type = METHOD_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = { 3, 1})
+    public String returnMethodRefRepeatableAnnotation2() {
+        return
+                "class Lambda<S, T> {" +
+                        "  public String getName() { return \"Lambda!\"; }" +
+                        "}" +
+
+                        "class %TEST_CLASS_NAME% {" +
+                        "  java.util.function.Function<Lambda<Integer, Float>, String> lambda() {" +
+                        "    return @RTA @RTA Lambda<@RTB @RTB @RTC @RTC Integer, @RTD @RTD @RTE @RTE Float>::getName;" +
+                        "  }" +
+                        "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = CONSTRUCTOR_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String returnConstructorRefRepeatable1() {
+        return
+                "class Lambda {" +
+                        "  Lambda() { }" +
+                        "}" +
+
+                        "class %TEST_CLASS_NAME% {" +
+                        "  Runnable lambda() {" +
+                        "    return @RTA @RTA Lambda::new;" +
+                        "  }" +
+                        "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = CONSTRUCTOR_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = CONSTRUCTOR_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTCs", type = CONSTRUCTOR_REFERENCE,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = { 3, 1    })
+    public String returnConstructorRefRepeatable2() {
+        return
+                "class Lambda<S, T> {" +
+                        "  Lambda() { }" +
+                        "}" +
+
+                        "class %TEST_CLASS_NAME% {" +
+                        "  Runnable lambda() {" +
+                        "    return @RTA @RTA Lambda<@RTB @RTB Integer, @RTC @RTC Float>::new;" +
+                        "  }" +
+                        "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_REFERENCE_TYPE_ARGUMENT,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_REFERENCE_TYPE_ARGUMENT,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 1)
+    public String returnMethodRefTARepeatableAnnotation1() {
+        return
+                "interface Lambda {" +
+                        "  <S, T> void generic(S p1, T p2);" +
+                        "}" +
+
+                        "class LambdaImpl implements Lambda {" +
+                        "  public <S, T> void generic(S p1, T p2) {}" +
+                        "}" +
+
+                        "class %TEST_CLASS_NAME% {" +
+                        "  Lambda lambda(LambdaImpl r) {" +
+                        "    return r::<@RTA @RTA Object, @RTB @RTB Object>generic;" +
+                        "  }" +
+                        "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 1)
+    public String returnConstructorRefTARepeatableAnnotation2() {
+        return
+                "interface Lambda {" +
+                        "  <S, T> void generic(S p1, T p2);" +
+                        "}" +
+
+                        "class LambdaImpl implements Lambda {" +
+                        "  <S, T> LambdaImpl(S p1, T p2) {}" +
+                        "  public <S, T> void generic(S p1, T p2) {}" +
+                        "}" +
+
+                        "class %TEST_CLASS_NAME% {" +
+                        "  Lambda lambda() {" +
+                        "    return LambdaImpl::<@RTA @RTA Object, @RTB @RTB Object>new;" +
+                        "  }" +
+                        "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 1)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 1, genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTDs", type = LOCAL_VARIABLE,
+            lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
+            lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
+            lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTEs", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String returnLambdaExprRepeatableAnnotation1() {
+        return
+                "interface LambdaInt {" +
+                        "  void lambda(Object p1, List<Object> p2);" +
+                        "}" +
+                        "class %TEST_CLASS_NAME% {" +
+                        "  LambdaInt getLambda() {" +
+                        "    return (@RTA @RTA Object x, @RTB @RTB List<@RTC @RTC Object> y) ->" +
+                        " { @RTD @RTD Object l = null; System.out.println((@RTE @RTE Object) l); };" +
+                        "  }" +
+                        "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0)
+    public String lambdaFieldRepeatableAnnotation1() {
+        return
+                "class %TEST_CLASS_NAME% {" +
+                        " java.util.function.IntUnaryOperator field = (@RTA @RTA int y) -> 1;" +
+                        "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0)
+    public String lambdaFieldRepeatableAnnotation2() {
+        return
+                "class %TEST_CLASS_NAME% {" +
+                        " static java.util.function.IntUnaryOperator field = (@RTA @RTA int y) -> 1;" +
+                        "}";
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodInvocationTypeArgument.java	Fri Jun 06 16:08:46 2014 -0400
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8042451
+ * @summary Test population of reference info for method invocation type arguments
+ * @compile -g Driver.java ReferenceInfoUtil.java MethodInvocationTypeArgument.java
+ * @run main Driver MethodInvocationTypeArgument
+ */
+
+import static com.sun.tools.classfile.TypeAnnotation.TargetType.METHOD_INVOCATION_TYPE_ARGUMENT;
+import static java.lang.System.lineSeparator;
+
+public class MethodInvocationTypeArgument {
+
+    @TADescription(annotation = "TA", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 4)
+    @TADescription(annotation = "TB", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 1, offset = 4)
+    @TADescription(annotation = "TC", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 2, offset = 4)
+    @TADescription(annotation = "TD", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 24)
+    @TADescription(annotation = "TE", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 1, offset = 24)
+    @TADescription(annotation = "TF", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 2, offset = 24)
+    public String genericMethod() {
+        return
+                "public <T1, T2, T3> void function(T1 t1, T2 t2, T3 t3) {}" + lineSeparator() +
+                        "{ new %TEST_CLASS_NAME%().<@TA Integer, @TB String, @TC Double>function(0, \"\", 0.0); " + lineSeparator() +
+                        "  this.<@TD Integer, @TE String, @TF Double>function(0, \"\", 0.0); }";
+    }
+
+    @TADescription(annotation = "TA", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 0)
+    @TADescription(annotation = "TB", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 1, offset = 0)
+    @TADescription(annotation = "TC", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 2, offset = 0)
+    public String genericStaticMethod() {
+        return
+                "public static <T1, T2, T3> void staticFunction(T1 t1, T2 t2, T3 t3) {}" + lineSeparator() +
+                        "static { %TEST_CLASS_NAME%.<@TA Integer, @TB String, @TC Double>staticFunction(0, \"\", 0.0); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 4)
+    @TADescription(annotation = "RTBs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 1, offset = 4)
+    @TADescription(annotation = "RTCs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 20)
+    @TADescription(annotation = "RTDs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 1, offset = 20)
+    public String genericMethodRepeatableAnnotation() {
+        return
+                "public <T1, T2> void function(T1 t1, T2 t2) {}" + lineSeparator() +
+                        "{ new %TEST_CLASS_NAME%().<@RTA @RTA Integer, @RTB @RTB String>" +
+                        "function(0, \"\"); " + lineSeparator() +
+                        "  this.<@RTC @RTC Integer, @RTD @RTD String>function(0, \"\"); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 0, offset = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 1, offset = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_INVOCATION_TYPE_ARGUMENT,
+            typeIndex = 2, offset = 0)
+    public String genericStaticMethodRepeatableAnnotation() {
+        return
+                "public static <T1, T2, T3> void staticFunction(T1 t1, T2 t2, T3 t3) {}" + lineSeparator() +
+                        "static { %TEST_CLASS_NAME%.<@RTA @RTA Integer, @RTB @RTB String, @RTC @RTC Double>staticFunction(0, \"\", 0.0); }";
+    }
+
+}
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodParameters.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodParameters.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,6 +25,7 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for method parameters
  * @compile -g Driver.java ReferenceInfoUtil.java MethodParameters.java
  * @run main Driver MethodParameters
@@ -41,97 +42,83 @@
         return "void test(Object b, @TA Object a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 0 }, paramIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 1 }, paramIndex = 0),
-        @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 0 }, paramIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 1 }, paramIndex = 0)
+    @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
-    })
     public String methodParamAsParametrized() {
         return "void test(@TA Map<@TB String, @TC List<@TD String>> a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 0 }, paramIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 0, 2, 0 }, paramIndex = 0),
-        @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 1 }, paramIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 1, 3, 0 }, paramIndex = 0),
-        @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 1, 3, 0, 2, 0 }, paramIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 1, 3, 0, 2, 0, 3, 0 }, paramIndex = 0),
-        @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 1, 3, 0, 2, 0, 3, 0, 2, 0 }, paramIndex = 0),
-        @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 1, 3, 0, 2, 0, 3, 1 }, paramIndex = 0),
-        @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 0 }, paramIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 0, 2, 0 }, paramIndex = 0)
+    @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 1 }, paramIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
+    @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 1, 3, 0, 2, 0 }, paramIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 1, 3, 0, 2, 0, 3, 0 }, paramIndex = 0)
+    @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 1, 3, 0, 2, 0, 3, 0, 2, 0 }, paramIndex = 0)
+    @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 1, 3, 0, 2, 0, 3, 1 }, paramIndex = 0)
+    @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = { 3, 1, 3, 0, 2, 0, 3, 1, 2, 0 }, paramIndex = 0)
-    })
     public String methodParamAsWildcard() {
         return "void test(@TA Map<@TB ? extends @TC String," +
                 "                 @TD List<@TE ? extends @TF Map<@TG ? super @TH String," +
                 "                                                @TI ? extends @TJ Object>>> a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 0, 0 }, paramIndex = 1),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 0, 0 }, paramIndex = 1)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
-    })
     public String methodParamAsArray() {
         return "void test(Object b, @TC String @TA [] @TB [] a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 0, 0 }, paramIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = { 0, 0 }, paramIndex = 1)
-    })
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 0, 0 }, paramIndex = 1)
     public String methodParamAsArray2() {
         return "void test(Object b, @TA @TB String [] a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 0, 0 }, paramIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 0, 0 }, paramIndex = 1),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = { 0, 0 }, paramIndex = 1)
-    })
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 0, 0 }, paramIndex = 1)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 0, 0 }, paramIndex = 1)
     public String methodParamAsArray3() {
         return "void test(Object b, @TA @TB @TC String [] a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 0, 0 }, paramIndex = 1),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 0, 0 }, paramIndex = 1)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
-    })
     public String methodParamAsVararg() {
         return "void test(Object b, @TC String @TA [] @TB ... a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 0, 0 }, paramIndex = 1),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 0, 0 }, paramIndex = 1)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
-    })
     public String methodParamAsFQVararg() {
         return "void test(Object b, java.lang.@TC String @TA [] @TB ... a) { }";
     }
@@ -148,26 +135,125 @@
 
     // Smoke tests
     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
-    public String interfacemethodParamAsObject() {
-        return "interface Test { void test(@TA Object a); }";
+    public String interfaceMethodParamAsObject() {
+        return "interface %TEST_CLASS_NAME% { void test(@TA Object a); }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 2)
-    public String abstractmethodParamAsObject() {
-        return "abstract class Test { abstract void test(Object b, Object c, @TA Object a); }";
+    public String abstractMethodParamAsObject() {
+        return "abstract class %TEST_CLASS_NAME% { abstract void test(Object b, Object c, @TA Object a); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 0 }, paramIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = { 3, 1 }, paramIndex = 0),
-        @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 0 }, paramIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = { 3, 1 }, paramIndex = 0)
+    @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
-    })
-    public String interfacemethodParamAsParametrized() {
-        return "interface Test { void test(@TA Map<@TB String, @TC List<@TD String>> a); }";
+    public String interfaceMethodParamAsParametrized() {
+        return "interface %TEST_CLASS_NAME% { void test(@TA Map<@TB String, @TC List<@TD String>> a); }";
     }
 
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    public String methodParamAsPrimitiveRepeatableAnnotation() {
+        return "void test(@RTA @RTA int a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+    public String methodParamAsObjectRepeatableAnnotation() {
+        return "void test(Object b, @RTA @RTA Object a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 0 }, paramIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 1 }, paramIndex = 0)
+    @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
+    public String methodParamAsParametrizedRepeatableAnnotation() {
+        return "void test(@RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 0 }, paramIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 0, 2, 0 }, paramIndex = 0)
+    @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 1 }, paramIndex = 0)
+    @TADescription(annotation = "RTEs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
+    @TADescription(annotation = "RTFs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 1, 3, 0, 2, 0 }, paramIndex = 0)
+    public String methodParamAsWildcardRepeatableAnnotation() {
+        return "void test(@RTA @RTA Map<@RTB @RTB ? extends @RTC @RTC String," +
+                "                 @RTD @RTD List<@RTE @RTE ? super @RTF @RTF String>> a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0 }, paramIndex = 1)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
+    public String methodParamAsArrayRepeatableAnnotation() {
+        return "void test(Object b, @RTC @RTC String @RTA @RTA [] @RTB @RTB [] a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0 }, paramIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0 }, paramIndex = 1)
+    public String methodParamAsArrayRepeatableAnnotation2() {
+        return "void test(Object b, @RTA @RTA @RTB @RTB String [] a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0 }, paramIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0 }, paramIndex = 1)
+    public String methodParamAsArrayRepeatableAnnotation3() {
+        return "void test(Object b, @RTA @RTA @RTB @RTB String [] a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0 }, paramIndex = 1)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
+    public String methodParamAsVarargRepeatableAnnoattion() {
+        return "void test(Object b, @RTC @RTC String @RTA @RTA [] @RTB @RTB ... a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0 }, paramIndex = 1)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 0, 0, 0, 0 }, paramIndex = 1)
+    public String methodParamAsFQVarargRepeatableAnnotation() {
+        return "void test(Object b, java.lang.@RTC @RTC String @RTA @RTA [] @RTB @RTB ... a) { }";
+    }
+
+    // Smoke tests
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    public String interfaceMethodParamAsObjectRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% { void test(@RTA @RTA Object a); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 2)
+    public String abstractMethodParamAsObjectRepeatableAnnotation() {
+        return "abstract class %TEST_CLASS_NAME% { abstract void test(Object b, Object c, @RTA @RTA Object a); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 0 }, paramIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 1 }, paramIndex = 0)
+    @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = { 3, 1, 3, 0 }, paramIndex = 0)
+    public String interfaceMethodParamAsParametrizedRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% { void test(@RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> a); }";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReceivers.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReceivers.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,6 +25,7 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for method receivers
  * @compile -g Driver.java ReferenceInfoUtil.java MethodReceivers.java
  * @run main Driver MethodReceivers
@@ -33,47 +34,87 @@
 
     @TADescription(annotation = "TA", type = METHOD_RECEIVER)
     public String regularMethod() {
-        return "class Test { void test(@TA Test this) { } }";
+        return "class %TEST_CLASS_NAME% { void test(@TA %TEST_CLASS_NAME% this) { } }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_RECEIVER)
     public String abstractMethod() {
-        return "abstract class Test { abstract void test(@TA Test this); }";
+        return "abstract class %TEST_CLASS_NAME% { abstract void test(@TA %TEST_CLASS_NAME% this); }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_RECEIVER)
     public String interfaceMethod() {
-        return "interface Test { void test(@TA Test this); }";
+        return "interface %TEST_CLASS_NAME% { void test(@TA %TEST_CLASS_NAME% this); }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_RECEIVER)
     public String regularWithThrows() {
-        return "class Test { void test(@TA Test this) throws Exception { } }";
-    }
-
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RECEIVER,
-                genericLocation = {}),
-        @TADescription(annotation = "TB", type = METHOD_RECEIVER,
-                genericLocation = {1, 0})
-    })
-    @TestClass("TestOuter$TestInner")
-    public String nestedtypes1() {
-        return "class TestOuter { class TestInner { void test(@TA TestOuter. @TB TestInner this) { } } }";
+        return "class %TEST_CLASS_NAME% { void test(@TA %TEST_CLASS_NAME% this) throws Exception { } }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_RECEIVER,
             genericLocation = {})
-    @TestClass("TestOuter$TestInner")
+    @TADescription(annotation = "TB", type = METHOD_RECEIVER,
+            genericLocation = {1, 0})
+    @TestClass("%TEST_CLASS_NAME%$TestInner")
+    public String nestedtypes1() {
+        return "class %TEST_CLASS_NAME% { class TestInner { void test(@TA %TEST_CLASS_NAME%. @TB TestInner this) { } } }";
+    }
+
+    @TADescription(annotation = "TA", type = METHOD_RECEIVER,
+            genericLocation = {})
+    @TestClass("%TEST_CLASS_NAME%$TestInner")
     public String nestedtypes2() {
-        return "class TestOuter { class TestInner { void test(@TA TestOuter.TestInner this) { } } }";
+        return "class %TEST_CLASS_NAME% { class TestInner { void test(@TA %TEST_CLASS_NAME%.TestInner this) { } } }";
     }
 
     @TADescription(annotation = "TB", type = METHOD_RECEIVER,
             genericLocation = {1, 0})
-    @TestClass("TestOuter$TestInner")
+    @TestClass("%TEST_CLASS_NAME%$TestInner")
     public String nestedtypes3() {
-        return "class TestOuter { class TestInner { void test(TestOuter. @TB TestInner this) { } } }";
+        return "class %TEST_CLASS_NAME% { class TestInner { void test(%TEST_CLASS_NAME%. @TB TestInner this) { } } }";
     }
 
+    @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+    public String regularMethodRepeatableAnnotation() {
+        return "class %TEST_CLASS_NAME% { void test(@RTA @RTA %TEST_CLASS_NAME% this) { } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+    public String abstractMethodRepeatablaAnnotation() {
+        return "abstract class %TEST_CLASS_NAME% { abstract void test(@RTA @RTA %TEST_CLASS_NAME% this); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+    public String interfaceMethodRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% { void test(@RTA @RTA %TEST_CLASS_NAME% this); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RECEIVER)
+    public String regularWithThrowsRepeatableAnnotation() {
+        return "class %TEST_CLASS_NAME% { void test(@RTA @RTA %TEST_CLASS_NAME% this) throws Exception { } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RECEIVER,
+            genericLocation = {})
+    @TADescription(annotation = "RTBs", type = METHOD_RECEIVER,
+            genericLocation = {1, 0})
+    @TestClass("%TEST_CLASS_NAME%$TestInner")
+    public String nestedtypesRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME% { class TestInner { void test(@RTA @RTA %TEST_CLASS_NAME%. @RTB @RTB TestInner this) { } } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RECEIVER,
+            genericLocation = {})
+    @TestClass("%TEST_CLASS_NAME%$TestInner")
+    public String nestedtypesRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME% { class TestInner { void test(@RTA @RTA %TEST_CLASS_NAME%.TestInner this) { } } }";
+    }
+
+    @TADescription(annotation = "RTBs", type = METHOD_RECEIVER,
+            genericLocation = {1, 0})
+    @TestClass("%TEST_CLASS_NAME%$TestInner")
+    public String nestedtypesRepeatableAnnotation3() {
+        return "class %TEST_CLASS_NAME% { class TestInner { void test(%TEST_CLASS_NAME%. @RTB @RTB TestInner this) { } } }";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReturns.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodReturns.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,6 +25,7 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for method return
  * @compile -g Driver.java ReferenceInfoUtil.java MethodReturns.java
  * @run main Driver MethodReturns
@@ -42,37 +43,31 @@
         return "@TA Object test() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 3, 1 }),
-        @TADescription(annotation = "TD", type = METHOD_RETURN,
-                genericLocation = { 3, 1, 3, 0 })
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN)
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "TD", type = METHOD_RETURN,
+            genericLocation = { 3, 1, 3, 0 })
     public String methodReturnAsParametrized() {
         return "@TA Map<@TB String, @TC List<@TD String>> test() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = { 0, 0 }),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 0, 0, 0, 0 })
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN)
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = { 0, 0 })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 0, 0, 0, 0 })
     public String methodReturnAsArray() {
         return "@TC String @TA [] @TB [] test() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = { 0, 0 }),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 0, 0, 0, 0 })
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN)
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = { 0, 0 })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 0, 0, 0, 0 })
     public String methodReturnAsArrayOld() {
         return "@TC String test() @TA [] @TB [] { return null; }";
     }
@@ -90,97 +85,206 @@
     // Smoke tests
     @TADescription(annotation = "TA", type = METHOD_RETURN)
     public String interfaceMethodReturnAsObject() {
-        return "interface Test { @TA Object test(); }";
+        return "interface %TEST_CLASS_NAME% { @TA Object test(); }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_RETURN)
     public String abstractMethodReturnAsObject() {
-        return "abstract class Test { abstract @TA Object test(); }";
+        return "abstract class %TEST_CLASS_NAME% { abstract @TA Object test(); }";
     }
 
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 3, 1 }),
-        @TADescription(annotation = "TD", type = METHOD_RETURN,
-                genericLocation = { 3, 1, 3, 0 })
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN)
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "TD", type = METHOD_RETURN,
+            genericLocation = { 3, 1, 3, 0 })
     public String interfaceMethodReturnAsParametrized() {
-        return "interface Test { @TA Map<@TB String, @TC List<@TD String>> test(); }";
+        return "interface %TEST_CLASS_NAME% { @TA Map<@TB String, @TC List<@TD String>> test(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN,
-                genericLocation = { 3, 0 }),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0 }),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0 }),
-        @TADescription(annotation = "TD", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 }),
-        @TADescription(annotation = "TE", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 }),
-        @TADescription(annotation = "TF", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1, 2, 0 })
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0 })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
+    @TADescription(annotation = "TD", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 })
+    @TADescription(annotation = "TE", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 })
+    @TADescription(annotation = "TF", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1, 2, 0 })
     public String methodReturnAsNestedWildcard() {
         return "Set<@TA ? extends @TB GOuter<String, String>. @TC GInner<@TD String, @TE ? super @TF Object>> entrySet() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 1, 0, 3, 0 }),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 1, 0, 3, 1 }),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 1, 0, 3, 1, 2, 0 })
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 1, 0, 3, 0 })
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 1, 0, 3, 1 })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 1, 0, 3, 1, 2, 0 })
     public String methodReturnAsNestedWildcard2() {
         return "class GOuter<X, Y> { class GInner<X, Y> {} } " +
-                "class Test<K> { Set<GOuter<String, String>.GInner<@TA K, @TB ? extends @TC Object>> entrySet() { return null; } }";
+                "class %TEST_CLASS_NAME%<K> { Set<GOuter<String, String>.GInner<@TA K, @TB ? extends @TC Object>> entrySet() { return null; } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0 }),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0 }),
-    })
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0 })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
     public String methodReturnAsNestedWildcard3() {
         return "Set<? extends @TB GOuter<String, String>. @TC GInner<String, Object>> entrySet() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0 }),
-    })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
     public String methodReturnAsNestedWildcard4() {
         return "Set<? extends GOuter<String, String>. @TC GInner<String, Object>> entrySet() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0 }),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0 }),
-    })
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0 })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
     public String methodReturnAsNestedWildcard5() {
         return "Set<? extends @TB Outer. @TC Inner> entrySet() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 }),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 }),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = { 3, 0, 2, 0, 1, 0 }),
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 })
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 })
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
     public String methodReturnAsNestedWildcard6() {
         return "Set<? extends GOuter<String, String>. @TC GInner<@TA String, @TB Object>> entrySet() { return null; }";
     }
 
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    public String methodReturnAsPrimitiveRepeatableAnnotation() {
+        return "@RTA @RTA int test() { return 0; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    public String methodReturnAsObjectRepeatableAnnotation() {
+        return "@RTA @RTA Object test() { return null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+            genericLocation = { 3, 1, 3, 0 })
+    public String methodReturnAsParametrizedRepeatableAnnotation() {
+        return "@RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test() { return null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = { 0, 0 })
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 0, 0, 0, 0 })
+    public String methodReturnAsArrayRepeatableAnnotation() {
+        return "@RTC @RTC String @RTA @RTA [] @RTB @RTB [] test() { return null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = { 0, 0 })
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 0, 0, 0, 0 })
+    public String methodReturnAsArrayOldRepeatableAnnotation() {
+        return "@RTC @RTC String test() @RTA @RTA [] @RTB @RTB [] { return null; }";
+    }
+
+    // Smoke tests
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    public String interfaceMethodReturnAsObjectRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% { @RTA @RTA Object test(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    public String abstractMethodReturnAsObjectRepeatableAnnotation() {
+        return "abstract class %TEST_CLASS_NAME% { abstract @RTA @RTA Object test(); }";
+    }
+
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 3, 1 })
+    @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+            genericLocation = { 3, 1, 3, 0 })
+    public String interfaceMethodReturnAsParametrizedRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% { @RTA @RTA Map<@RTB @RTB String, @RTC @RTC List<@RTD @RTD String>> test(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+            genericLocation = { 3, 0 })
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0 })
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
+    @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 })
+    @TADescription(annotation = "RTEs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 })
+    @TADescription(annotation = "RTFs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1, 2, 0 })
+    public String methodReturnAsNestedWildcardRepeatableAnnotation() {
+        return "Set<@RTA @RTA ? extends @RTB @RTB GOuter<String, String>. @RTC @RTC GInner<@RTD @RTD String," +
+                " @RTE @RTE ? super @RTF @RTF Object>> entrySet() { return null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 1, 0, 3, 0 })
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 1, 0, 3, 1 })
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 1, 0, 3, 1, 2, 0 })
+    public String methodReturnAsNestedWildcardRepeatableAnnotation2() {
+        return "class GOuter<X, Y> { class GInner<X, Y> {} } " +
+                "class %TEST_CLASS_NAME%<K> { Set<GOuter<String, String>.GInner<@RTA @RTA K," +
+                " @RTB @RTB ? extends @RTC @RTC Object>> entrySet() { return null; } }";
+    }
+
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0 })
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
+    public String methodReturnAsNestedWildcardRepeatableAnnotation3() {
+        return "Set<? extends @RTB @RTB GOuter<String, String>. @RTC @RTC GInner<String, Object>> entrySet() { return null; }";
+    }
+
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
+    public String methodReturnAsNestedWildcardRepeatableAnnotation4() {
+        return "Set<? extends GOuter<String, String>. @RTC @RTC GInner<String, Object>> entrySet() { return null; }";
+    }
+
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0 })
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
+    public String methodReturnAsNestedWildcardRepeatableAnnotation5() {
+        return "Set<? extends @RTB @RTB Outer. @RTC @RTC Inner> entrySet() { return null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 0 })
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0, 3, 1 })
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = { 3, 0, 2, 0, 1, 0 })
+    public String methodReturnAsNestedWildcardRepeatableAnnotation6() {
+        return "Set<? extends GOuter<String, String>. @RTC @RTC GInner<@RTA @RTA String," +
+                " @RTB @RTB Object>> entrySet() { return null; }";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodThrows.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodThrows.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,53 +25,46 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for method exception clauses
  * @compile -g Driver.java ReferenceInfoUtil.java MethodThrows.java
  * @run main Driver MethodThrows
  */
 public class MethodThrows {
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = THROWS, typeIndex = 0),
-        @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
-    })
+    @TADescription(annotation = "TA", type = THROWS, typeIndex = 0)
+    @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
     public String regularMethod() {
-        return "class Test { void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception { } }";
+        return "class %TEST_CLASS_NAME% { void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception { } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = THROWS, typeIndex = 0),
-        @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
-    })
+    @TADescription(annotation = "TA", type = THROWS, typeIndex = 0)
+    @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
     public String abstractMethod() {
-        return "abstract class Test { abstract void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception; }";
+        return "abstract class %TEST_CLASS_NAME% { abstract void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = THROWS, typeIndex = 0),
-        @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
-    })
+    @TADescription(annotation = "TA", type = THROWS, typeIndex = 0)
+    @TADescription(annotation = "TB", type = THROWS, typeIndex = 2)
     public String interfaceMethod() {
-        return "interface Test { void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception; }";
+        return "interface %TEST_CLASS_NAME% { void test() throws @TA RuntimeException, IllegalArgumentException, @TB Exception; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = THROWS, typeIndex = 0,
-                       genericLocation = {}),
-        @TADescription(annotation = "TB", type = THROWS, typeIndex = 0,
-                       genericLocation = {1, 0}),
-        @TADescription(annotation = "TC", type = THROWS, typeIndex = 0,
-                       genericLocation = {1, 0, 1, 0}),
-        @TADescription(annotation = "TD", type = THROWS, typeIndex = 1,
-                       genericLocation = {}),
-        @TADescription(annotation = "TE", type = THROWS, typeIndex = 1,
-                       genericLocation = {1, 0}),
-        @TADescription(annotation = "TF", type = THROWS, typeIndex = 1,
-                       genericLocation = {1, 0, 1, 0})
-    })
+    @TADescription(annotation = "TA", type = THROWS, typeIndex = 0,
+                   genericLocation = {})
+    @TADescription(annotation = "TB", type = THROWS, typeIndex = 0,
+                   genericLocation = {1, 0})
+    @TADescription(annotation = "TC", type = THROWS, typeIndex = 0,
+                   genericLocation = {1, 0, 1, 0})
+    @TADescription(annotation = "TD", type = THROWS, typeIndex = 1,
+                   genericLocation = {})
+    @TADescription(annotation = "TE", type = THROWS, typeIndex = 1,
+                   genericLocation = {1, 0})
+    @TADescription(annotation = "TF", type = THROWS, typeIndex = 1,
+                   genericLocation = {1, 0, 1, 0})
     public String NestedTypes() {
         return "class Outer { class Middle { class Inner1 extends Exception {}" +
                 "  class Inner2 extends Exception{} } }" +
-                "class Test { void test() throws @TA Outer.@TB Middle.@TC Inner1, @TD Outer.@TE Middle.@TF Inner2 { } }";
+                "class %TEST_CLASS_NAME% { void test() throws @TA Outer.@TB Middle.@TC Inner1, @TD Outer.@TE Middle.@TF Inner2 { } }";
     }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodTypeParam.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/MethodTypeParam.java	Fri Jun 06 16:08:46 2014 -0400
@@ -22,230 +22,387 @@
  */
 
 import static com.sun.tools.classfile.TypeAnnotation.TargetType.*;
+import static java.lang.System.lineSeparator;
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for method type parameters
  * @compile -g Driver.java ReferenceInfoUtil.java MethodTypeParam.java
  * @run main Driver MethodTypeParam
  */
 public class MethodTypeParam {
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
     public String regularClass() {
         return "<@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test() { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
     public String regularClass2() {
         return "<@TA K extends @TB Date, @TC V extends @TE Cloneable> void test() { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
     public String regularClassParameterized() {
         return "<K extends @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test() { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
     public String abstractClass() {
-        return "abstract class Test { abstract <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
+        return "abstract class %TEST_CLASS_NAME% { abstract <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
     public String abstractClassParameterized() {
-        return "abstract class Test { abstract <K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
+        return "abstract class %TEST_CLASS_NAME% { abstract <K extends @TG Object & @TA Map<String, @TB String>, V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
     public String abstractClassParameterized2() {
-        return "abstract class Test { abstract <K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> void test(); }";
+        return "abstract class %TEST_CLASS_NAME% { abstract <K extends @TA Map<String, @TB String>, V extends @TC List<@TD List<@TE Object>>> void test(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
     public String abstractClassParameterized3() {
-        return "abstract class Test { abstract <K extends @TA List<String>, V extends @TB List<Object>> void test(); }";
+        return "abstract class %TEST_CLASS_NAME% { abstract <K extends @TA List<String>, V extends @TB List<Object>> void test(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
     public String regularInterface() {
-        return "interface Test { <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
+        return "interface %TEST_CLASS_NAME% { <@TA K extends @TB Date, @TC V extends @TD Object & @TE Cloneable> void test(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
     public String regularInterfaceParameterized() {
-        return "interface Test { <@TH K extends @TG Object & @TA Map<String, @TB String>, @TI V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
+        return "interface %TEST_CLASS_NAME% { <@TH K extends @TG Object & @TA Map<String, @TB String>, @TI V extends @TF Object & @TC List<@TD List<@TE Object>>> void test(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1}),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0}),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
     public String regularInterfaceParameterized2() {
-        return "interface Test { <@TF K extends @TA Map<String, @TB String>, @TG V extends @TC List<@TD List<@TE Object>>> void test(); }";
+        return "interface %TEST_CLASS_NAME% { <@TF K extends @TA Map<String, @TB String>, @TG V extends @TC List<@TD List<@TE Object>>> void test(); }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_RETURN)
     public String useInReturn1() {
-        return "class Test { <T> @TA T m() { throw new RuntimeException(); } }";
+        return "class %TEST_CLASS_NAME% { <T> @TA T m() { throw new RuntimeException(); } }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_RETURN, genericLocation = {3, 0})
     public String useInReturn2() {
-        return "class Test { <T> Class<@TA T> m() { throw new RuntimeException(); } }";
+        return "class %TEST_CLASS_NAME% { <T> Class<@TA T> m() { throw new RuntimeException(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_RETURN)
-    })
-    public String useInReturn3() {
-        return "class Test { <T extends @TA Object> @TB T m() { throw new RuntimeException(); } }";
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_RETURN)
+        public String useInReturn3() {
+        return "class %TEST_CLASS_NAME% { <T extends @TA Object> @TB T m() { throw new RuntimeException(); } }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
             paramIndex = 0, genericLocation = {3, 0})
     public String useInParam1() {
-        return "class Test { <T> void m(Class<@TA T> p) { throw new RuntimeException(); } }";
+        return "class %TEST_CLASS_NAME% { <T> void m(Class<@TA T> p) { throw new RuntimeException(); } }";
     }
 
     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
             paramIndex = 0, genericLocation = {3, 0})
     public String useInParam2() {
-        return "class Test { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
+        return "class %TEST_CLASS_NAME% { void m(Class<@TA Object> p) { throw new RuntimeException(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
     public String useInParam3() {
         return "interface IA {} " +
                "interface IB<XB> {} " +
                "interface IC<XC> {} " +
-               "class Test { <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
+               "class %TEST_CLASS_NAME% { <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
                 paramIndex = 0, boundIndex = 1,
-                genericLocation = {}),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {})
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
                 paramIndex = 0, boundIndex = 2,
-                genericLocation = {}),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {})
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
                 paramIndex = 0)
-    })
     public String useInParam4() {
-        return "class Test {" +
+        return "class %TEST_CLASS_NAME% {" +
                "  interface IA {} " +
                "  interface IB<XB> {} " +
                "  interface IC<XC> {} " +
                "  <T extends @TA IB<IA> & @TB IC<IA>> void m(@TC T p) { throw new RuntimeException(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
                 paramIndex = 0, boundIndex = 0,
-                genericLocation = {}),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {})
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
                 paramIndex = 0, boundIndex = 0,
-                genericLocation = {1, 0}),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {1, 0})
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
                 paramIndex = 0, boundIndex = 0,
-                genericLocation = {1, 0, 3, 0}),
-    })
-    public String useInParam5() {
-        return "class Test {" +
+                genericLocation = {1, 0, 3, 0})
+        public String useInParam5() {
+    return "class %TEST_CLASS_NAME% {" +
                "  interface IA {} " +
                "  class CB<XC> {} " +
-               "  <T extends @TA Test. @TB CB<@TC IA>> void m(T p) { throw new RuntimeException(); } }";
+               "  <T extends @TA %TEST_CLASS_NAME%. @TB CB<@TC IA>> void m(T p) { throw new RuntimeException(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER,
-                paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER,
+                paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
                 paramIndex = 0, boundIndex = 0,
-                genericLocation = {}),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {})
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
                 paramIndex = 0, boundIndex = 0,
-                genericLocation = {1, 0, 3, 0}),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {1, 0, 3, 0})
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
                 paramIndex = 0, boundIndex = 1,
-                genericLocation = {}),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {})
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
                 paramIndex = 0, boundIndex = 1,
                 genericLocation = {3, 0})
-    })
     public String useInParam6() {
-        return "class Test {" +
+        return "class %TEST_CLASS_NAME% {" +
                "  interface IA {} " +
                "  interface IB<XB> {} " +
                "  class CC<XC> {} " +
                "  interface ID<XD> {} " +
-               "  <@TA T extends @TB Test.CC<@TC IA> & Test. @TD ID<@TE IA>> void m(T p) { throw new RuntimeException(); } }";
+               "  <@TA T extends @TB %TEST_CLASS_NAME%.CC<@TC IA> & %TEST_CLASS_NAME%. @TD ID<@TE IA>> void m(T p) { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String regularClassRepeatableAnnotation() {
+        return "<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> void test() { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String regularClassRepeatableAnnotation2() {
+        return "<@RTA @RTA K extends @RTB @RTB Date, @RTC @RTC V extends @RTE @RTE Cloneable> void test() { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    public String regularClassParameterizedRepeatableAnnotation() {
+        return "<K extends @RTA @RTA Map<String, @RTB @RTB String>, V extends @RTF @RTF Object" +
+                " & @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> void test() { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String abstractClassRepeatableAnnotation() {
+        return "abstract class %TEST_CLASS_NAME% { abstract <@RTA @RTA K extends @RTB @RTB Date," +
+                " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> void test(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    public String abstractClassParameterizedRepeatableAnnotation() {
+        return "abstract class %TEST_CLASS_NAME% { abstract <K extends @RTE @RTE Object &" +
+                " @RTA @RTA Map<String, @RTB @RTB String>, V extends @RTF @RTF Object &" +
+                " @RTC @RTC List<@RTD @RTD Object>> void test(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0, 3, 0})
+    public String abstractClassParameterizedRepeatableAnnotation2() {
+        return "abstract class %TEST_CLASS_NAME% { abstract <K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+                " V extends @RTC @RTC List<@RTD @RTD List<@RTE @RTE Object>>> void test(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String abstractClassParameterizedRepeatableAnnotation3() {
+        return "abstract class %TEST_CLASS_NAME% { abstract <K extends @RTA @RTA List<String>," +
+                " V extends @RTB @RTB List<Object>> void test(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 0)
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    public String regularInterfaceRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% { <@RTA @RTA K extends @RTB @RTB Date," +
+                " @RTC @RTC V extends @RTD @RTD Object & @RTE @RTE Cloneable> void test(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1, genericLocation = {3, 1})
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 1, boundIndex = 1, genericLocation = {3, 0})
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER, paramIndex = 1)
+    @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER, paramIndex = 0)
+    public String regularInterfaceParameterizedRepeatableAnnotation() {
+        return "interface %TEST_CLASS_NAME% { <@RTF @RTF K extends @RTA @RTA Map<String, @RTB @RTB String>," +
+                " @RTE @RTE V extends @RTC @RTC List<@RTD @RTD Object>> void test(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN)
+    public String useInReturnRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME% { <T> @RTA @RTA T m() { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN, genericLocation = {3, 0})
+    public String useInReturnRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME% { <T> Class<@RTA @RTA T> m() { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN)
+    public String useInReturnRepeatableAnnotation3() {
+        return "class %TEST_CLASS_NAME% { <T extends @RTA @RTA Object> @RTB @RTB T m() { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0, genericLocation = {3, 0})
+    public String useInParamRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME% { <T> void m(Class<@RTA @RTA T> p) { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0, genericLocation = {3, 0})
+    public String useInParamRepeatableAnnotation2() {
+        return "class %TEST_CLASS_NAME% { void m(Class<@RTA @RTA Object> p) { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND, paramIndex = 0, boundIndex = 2)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    public String useInParamRepeatableAnnotation3() {
+        return "interface IA {} " +
+                "interface IB<XB> {} " +
+                "interface IC<XC> {} " +
+                "class %TEST_CLASS_NAME% { <T extends @RTA @RTA IB<IA> & @RTB @RTB IC<IA>>" +
+                " void m(@RTC @RTC T p) { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+            paramIndex = 0, boundIndex = 1,
+            genericLocation = {})
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+            paramIndex = 0, boundIndex = 2,
+            genericLocation = {})
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            paramIndex = 0)
+    public String useInParamRepeatableAnnotation4() {
+        return "class %TEST_CLASS_NAME% {" +
+                "  interface IA {} " +
+                "  interface IB<XB> {} " +
+                "  interface IC<XC> {} " +
+                "  <T extends @RTA @RTA IB<IA> & @RTB @RTB IC<IA>>" +
+                " void m(@RTC @RTC T p) { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+            paramIndex = 0, boundIndex = 0,
+            genericLocation = {})
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+            paramIndex = 0, boundIndex = 0,
+            genericLocation = {1, 0})
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+            paramIndex = 0, boundIndex = 0,
+            genericLocation = {1, 0, 3, 0})
+    public String useInParamRepeatableAnnotation5() {
+        return "class %TEST_CLASS_NAME% {" +
+                "  interface IA {} " +
+                "  class CB<XC> {} " +
+                "  <T extends @RTA @RTA %TEST_CLASS_NAME%. @RTB @RTB" +
+                " CB<@RTC @RTC IA>> void m(T p) { throw new RuntimeException(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER,
+            paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+            paramIndex = 0, boundIndex = 0,
+            genericLocation = {})
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+            paramIndex = 0, boundIndex = 0,
+            genericLocation = {1, 0, 3, 0})
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND,
+            paramIndex = 0, boundIndex = 1,
+            genericLocation = {})
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND,
+            paramIndex = 0, boundIndex = 1,
+            genericLocation = {3, 0})
+    public String useInParamRepeatableAnnotation6() {
+        return "class %TEST_CLASS_NAME% {" +
+                "  interface IA {} " +
+                "  interface IB<XB> {} " +
+                "  class CC<XC> {} " +
+                "  interface ID<XD> {} " +
+                "  <@RTA @RTA T extends @RTB @RTB %TEST_CLASS_NAME%.CC<@RTC @RTC IA> &" +
+                " %TEST_CLASS_NAME%. @RTD @RTD ID<@RTE @RTE IA>> void m(T p) { throw new RuntimeException(); } }";
     }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/MultiCatch.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/MultiCatch.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,7 +25,7 @@
 
 /*
  * @test
- * @bug 8006732 8006775
+ * @bug 8006732 8006775 8042451
  * @summary Test population of reference info for multicatch exception parameters
  * @author Werner Dietl
  * @compile -g Driver.java ReferenceInfoUtil.java MultiCatch.java
@@ -33,35 +33,59 @@
  */
 public class MultiCatch {
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
-        @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
-    })
+    @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
     public String multiCatch1() {
         return "void multiCatch1() { " +
             "try { new Object(); } catch (@TA NullPointerException | @TB IndexOutOfBoundsException e) { e.toString(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0),
-        @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
-        @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2),
-    })
+    @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
     public String multiCatch2() {
         return "void multiCatch2() { " +
             "try { new Object(); } catch (@TA NullPointerException | @TB IndexOutOfBoundsException | @TC IllegalArgumentException e) { e.toString(); } }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
-        @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1),
-        @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2),
-        @TADescription(annotation = "TD", type = EXCEPTION_PARAMETER, exceptionIndex = 2),
-        @TADescription(annotation = "TE", type = EXCEPTION_PARAMETER, exceptionIndex = 3),
-    })
+    @TADescription(annotation = "TA", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "TB", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "TC", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+    @TADescription(annotation = "TD", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+    @TADescription(annotation = "TE", type = EXCEPTION_PARAMETER, exceptionIndex = 3)
     public String multiCatch3() {
         return "void multiCatch3() { " +
             "try { new Object(); } catch (NullPointerException e1) {}" +
             "try { new Object(); } catch (@TA @TB NullPointerException | @TC @TD IndexOutOfBoundsException | @TE IllegalArgumentException e2) { e2.toString(); } }";
     }
+
+    @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    public String multiCatchRepeatableAnnotation1() {
+        return "void multiCatch1() { " +
+                "try { new Object(); } catch (@RTA @RTA NullPointerException |" +
+                " @RTB @RTB IndexOutOfBoundsException e) { e.toString(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 0)
+    @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+    public String multiCatchRepeatableAnnotation2() {
+        return "void multiCatch2() { " +
+                "try { new Object(); } catch (@RTA @RTA NullPointerException |" +
+                " @RTB @RTB IndexOutOfBoundsException | @RTC @RTC IllegalArgumentException e) { e.toString(); } }";
+    }
+
+    @TADescription(annotation = "RTAs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "RTBs", type = EXCEPTION_PARAMETER, exceptionIndex = 1)
+    @TADescription(annotation = "RTCs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+    @TADescription(annotation = "RTDs", type = EXCEPTION_PARAMETER, exceptionIndex = 2)
+    @TADescription(annotation = "RTEs", type = EXCEPTION_PARAMETER, exceptionIndex = 3)
+    public String multiCatchRepeatableAnnotation3() {
+        return "void multiCatch3() { " +
+                "try { new Object(); } catch (NullPointerException e1) {}" +
+                "try { new Object(); } catch (@RTA @RTA @RTB @RTB NullPointerException |" +
+                " @RTC @RTC @RTD @RTD IndexOutOfBoundsException |" +
+                " @RTE @RTE IllegalArgumentException e2) { e2.toString(); } }";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/NestedTypes.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/NestedTypes.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,6 +25,7 @@
 
 /*
  * @test
+ * @bug 8042451 8044009 8044010
  * @summary Test population of reference info for nested types
  * @compile -g Driver.java ReferenceInfoUtil.java NestedTypes.java
  * @run main Driver NestedTypes
@@ -33,22 +34,18 @@
 
     // method parameters
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0}, paramIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {1, 0}, paramIndex = 0)
     public String testParam1() {
         return "void test(@TA Outer.@TB Inner a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 1, 0}, paramIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 1, 0}, paramIndex = 0)
     public String testParam1b() {
         return "void test(List<@TA Outer.@TB Inner> a) { }";
     }
@@ -63,10 +60,9 @@
         return "void test(java.util.@TA Map.Entry a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = {1, 0}, paramIndex = 0)
     })
     public String testParam1d() {
@@ -79,10 +75,9 @@
         return "void test(List<java.util.@TA Map.Entry> a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+                genericLocation = {3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
                 genericLocation = {3, 0, 1, 0}, paramIndex = 0)
     })
     public String testParam1f() {
@@ -96,89 +91,81 @@
         return "void test(List<java.util.Map. @TB Entry> a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {1, 0}, paramIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {1, 0}, paramIndex = 0)
     public String testParam2() {
         return "void test(@TA GOuter<String,String>.@TB GInner<String,String> a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 1, 0}, paramIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 1, 0}, paramIndex = 0)
     public String testParam2b() {
         return "void test(List<@TA GOuter<String,String>.@TB GInner<String,String>> a) { }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0),
-        @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER, paramIndex = 0),
-        @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {0, 0}, paramIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+    @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0}, paramIndex = 0)
     public String testParam3() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " void test(@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] a) { }\n" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0),
-        @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0),
-        @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0}, paramIndex = 0),
-        @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
-                genericLocation = {3, 0, 0, 0}, paramIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TD", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TF", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "TH", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TI", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+    @TADescription(annotation = "TJ", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0}, paramIndex = 0)
+    @TADescription(annotation = "TK", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0}, paramIndex = 0)
     public String testParam4() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " void test(List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> a) { }\n" +
                 "}";
     }
@@ -186,14 +173,12 @@
 
     // Local variables
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
-                genericLocation = {},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
-                genericLocation = {1, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
-    })
+    @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+            genericLocation = {},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+            genericLocation = {1, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
     public String testLocal1a() {
         return "void test() { @TA Outer.@TB Inner a = null; }";
     }
@@ -212,104 +197,99 @@
         return "void test() { Outer.@TB Inner a = null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
-                genericLocation = {},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
-                genericLocation = {1, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
-    })
+    @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+            genericLocation = {},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+            genericLocation = {1, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
     public String testLocal2() {
         return "void test() { @TA GOuter<String,String>.@TB GInner<String,String> a = null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0, 0, 0},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0, 0, 0, 1, 0},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
-                genericLocation = {},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
-                genericLocation = {0, 0},
-                lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
-    })
+    @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
+            genericLocation = {},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
     public String testLocal3() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " void test() { @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] a = null; }\n" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0, 0, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1}),
-        @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
-                genericLocation = {3, 0, 0, 0},
-                lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
-    })
+
+    @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TE", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TF", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TG", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TH", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TI", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TJ", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "TK", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
     public String testLocal4() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " void test() { List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> a = null; }\n" +
                 "}";
     }
@@ -317,12 +297,10 @@
 
     // fields
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD,
-                genericLocation = {}),
-        @TADescription(annotation = "TB", type = FIELD,
-                genericLocation = {1, 0})
-    })
+    @TADescription(annotation = "TA", type = FIELD,
+            genericLocation = {})
+    @TADescription(annotation = "TB", type = FIELD,
+            genericLocation = {1, 0})
     public String testField1a() {
         return "@TA Outer.@TB Inner a;";
     }
@@ -339,79 +317,73 @@
         return "Outer.@TB Inner a;";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD,
-                genericLocation = {}),
-        @TADescription(annotation = "TB", type = FIELD,
-                genericLocation = {1, 0})
-    })
+    @TADescription(annotation = "TA", type = FIELD,
+            genericLocation = {})
+    @TADescription(annotation = "TB", type = FIELD,
+            genericLocation = {1, 0})
     public String testField2() {
         return "@TA GOuter<String,String>.@TB GInner<String,String> a;";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD,
-                genericLocation = {0, 0, 0, 0}),
-        @TADescription(annotation = "TB", type = FIELD,
-                genericLocation = {0, 0, 0, 0, 1, 0}),
-        @TADescription(annotation = "TC", type = FIELD,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}),
-        @TADescription(annotation = "TD", type = FIELD,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
-        @TADescription(annotation = "TE", type = FIELD,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = FIELD,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
-        @TADescription(annotation = "TG", type = FIELD,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}),
-        @TADescription(annotation = "TH", type = FIELD,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
-        @TADescription(annotation = "TI", type = FIELD,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
-        @TADescription(annotation = "TJ", type = FIELD),
-        @TADescription(annotation = "TK", type = FIELD,
-                genericLocation = {0, 0})
-    })
+    @TADescription(annotation = "TA", type = FIELD,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "TB", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "TC", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "TD", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "TE", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "TG", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "TH", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "TI", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+    @TADescription(annotation = "TJ", type = FIELD)
+    @TADescription(annotation = "TK", type = FIELD,
+            genericLocation = {0, 0})
     public String testField3() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] a;\n" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD,
-                genericLocation = {3, 0, 0, 0, 0, 0}),
-        @TADescription(annotation = "TB", type = FIELD,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}),
-        @TADescription(annotation = "TC", type = FIELD,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}),
-        @TADescription(annotation = "TD", type = FIELD,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
-        @TADescription(annotation = "TE", type = FIELD,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = FIELD,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
-        @TADescription(annotation = "TG", type = FIELD,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}),
-        @TADescription(annotation = "TH", type = FIELD,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
-        @TADescription(annotation = "TI", type = FIELD,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
-        @TADescription(annotation = "TJ", type = FIELD,
-                genericLocation = {3, 0}),
-        @TADescription(annotation = "TK", type = FIELD,
-                genericLocation = {3, 0, 0, 0})
-    })
+    @TADescription(annotation = "TA", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "TB", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "TC", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "TD", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "TE", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "TG", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "TH", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "TI", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+    @TADescription(annotation = "TJ", type = FIELD,
+            genericLocation = {3, 0})
+    @TADescription(annotation = "TK", type = FIELD,
+            genericLocation = {3, 0, 0, 0})
     public String testField4() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> a;\n" +
                 "}";
     }
@@ -419,121 +391,111 @@
 
     // return types
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN,
-                genericLocation = {}),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = {1, 0})
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN,
+            genericLocation = {})
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = {1, 0})
     public String testReturn1() {
         return "@TA Outer.@TB Inner test() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN,
-                genericLocation = {}),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = {1, 0})
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN,
+            genericLocation = {})
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = {1, 0})
     public String testReturn2() {
         return "@TA GOuter<String,String>.@TB GInner<String,String> test() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN,
-                genericLocation = {0, 0, 0, 0}),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = {0, 0, 0, 0, 1, 0}),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}),
-        @TADescription(annotation = "TD", type = METHOD_RETURN,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
-        @TADescription(annotation = "TE", type = METHOD_RETURN,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = METHOD_RETURN,
-                genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
-        @TADescription(annotation = "TG", type = METHOD_RETURN,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}),
-        @TADescription(annotation = "TH", type = METHOD_RETURN,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
-        @TADescription(annotation = "TI", type = METHOD_RETURN,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
-        @TADescription(annotation = "TJ", type = METHOD_RETURN),
-        @TADescription(annotation = "TK", type = METHOD_RETURN,
-                genericLocation = {0, 0})
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "TD", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "TE", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "TG", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "TH", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "TI", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+    @TADescription(annotation = "TJ", type = METHOD_RETURN)
+    @TADescription(annotation = "TK", type = METHOD_RETURN,
+            genericLocation = {0, 0})
     public String testReturn3() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[] test() { return null; }\n" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0, 0, 0}),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}),
-        @TADescription(annotation = "TD", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
-        @TADescription(annotation = "TE", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}),
-        @TADescription(annotation = "TF", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
-        @TADescription(annotation = "TG", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}),
-        @TADescription(annotation = "TH", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}),
-        @TADescription(annotation = "TI", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}),
-        @TADescription(annotation = "TJ", type = METHOD_RETURN,
-                genericLocation = {3, 0}),
-        @TADescription(annotation = "TK", type = METHOD_RETURN,
-                genericLocation = {3, 0, 0, 0})
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "TD", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "TE", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "TF", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "TG", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "TH", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "TI", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+    @TADescription(annotation = "TJ", type = METHOD_RETURN,
+            genericLocation = {3, 0})
+    @TADescription(annotation = "TK", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0})
     public String testReturn4() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]> test() { return null; }\n" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_RETURN,
-                genericLocation = {3, 0}),
-        @TADescription(annotation = "TB", type = METHOD_RETURN,
-                genericLocation = {3, 0, 3, 0}),
-        @TADescription(annotation = "TC", type = METHOD_RETURN,
-                genericLocation = {3, 0, 3, 1}),
-        @TADescription(annotation = "TD", type = METHOD_RETURN,
-                genericLocation = {3, 0, 3, 1, 3, 0}),
-        @TADescription(annotation = "TE", type = METHOD_RETURN,
-                genericLocation = {3, 0, 1, 0}),
-        @TADescription(annotation = "TF", type = METHOD_RETURN,
-                genericLocation = {3, 0, 1, 0, 3, 0}),
-        @TADescription(annotation = "TG", type = METHOD_RETURN,
-                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}),
-        @TADescription(annotation = "TH", type = METHOD_RETURN,
-                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}),
-        @TADescription(annotation = "TI", type = METHOD_RETURN,
-                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}),
-        @TADescription(annotation = "TJ", type = METHOD_RETURN,
-                genericLocation = {3, 0, 1, 0, 1, 0}),
-    })
+    @TADescription(annotation = "TA", type = METHOD_RETURN,
+                genericLocation = {3, 0})
+    @TADescription(annotation = "TB", type = METHOD_RETURN,
+                genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "TC", type = METHOD_RETURN,
+                genericLocation = {3, 0, 3, 1})
+    @TADescription(annotation = "TD", type = METHOD_RETURN,
+                genericLocation = {3, 0, 3, 1, 3, 0})
+    @TADescription(annotation = "TE", type = METHOD_RETURN,
+                genericLocation = {3, 0, 1, 0})
+    @TADescription(annotation = "TF", type = METHOD_RETURN,
+                genericLocation = {3, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "TG", type = METHOD_RETURN,
+                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "TH", type = METHOD_RETURN,
+                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "TI", type = METHOD_RETURN,
+                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "TJ", type = METHOD_RETURN,
+                genericLocation = {3, 0, 1, 0, 1, 0})
     public String testReturn5() {
         return "class GOuter<A, B> {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " List<@TA GOuter<@TB String, @TC List<@TD Object>> . @TE GInner<@TF List<@TG Object @TH[] @TI[]>>. @TJ GInner2<String, String>> test() { return null; }\n" +
                 "}";
     }
@@ -541,138 +503,128 @@
 
     // type parameters
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {}, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {}, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
-    })
     public String testTypeparam1() {
         return "<X extends @TA Outer.@TB Inner> X test() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {}, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {}, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
-    })
     public String testTypeparam2() {
         return "<X extends @TA GOuter<String,String>.@TB GInner<String,String>> X test() { return null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {},
-                paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0},
-                paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0, 3, 0},
-                paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
-                paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0, 3, 0, 3, 0},
-                paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0, 3, 0, 3, 0, 0, 0},
-                paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0, 1, 0},
-                paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0, 1, 0, 3, 0},
-                paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {1, 0, 1, 0, 3, 1},
-                paramIndex = 0, boundIndex = 0),
-    })
+                paramIndex = 0, boundIndex = 0)
     public String testTypeparam3() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " <X extends @TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object>> X test() { return null; }\n" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0, 0, 0},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0},
-                paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TK", type = METHOD_TYPE_PARAMETER_BOUND,
+                paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TK", type = METHOD_TYPE_PARAMETER_BOUND,
                 genericLocation = {3, 0, 0, 0},
                 paramIndex = 0, boundIndex = 1)
-    })
     public String testTypeparam4() {
         return "class Outer {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " <X extends List<@TA Outer . @TB GInner<@TC List<@TD Object @TE[] @TF[]>>. @TG GInner2<@TH Integer, @TI Object> @TJ[] @TK[]>> X test() { return null; }\n" +
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0}, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0, 3, 0}, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0, 3, 1}, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0, 3, 1, 3, 0}, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0, 1, 0}, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0, 1, 0, 3, 0}, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0, boundIndex = 1),
-        @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
-                genericLocation = {3, 0, 1, 0, 1, 0}, paramIndex = 0, boundIndex = 1),
-    })
+    @TADescription(annotation = "TA", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TB", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TC", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0, 3, 1}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TD", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0, 3, 1, 3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TE", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0, 1, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TF", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0, 1, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TG", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TH", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TI", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "TJ", type = METHOD_TYPE_PARAMETER_BOUND,
+                genericLocation = {3, 0, 1, 0, 1, 0}, paramIndex = 0, boundIndex = 1)
     public String testTypeparam5() {
         return "class GOuter<A, B> {\n" +
                 " class GInner<X> {\n" +
                 "  class GInner2<Y, Z> {}\n" +
                 "}}\n\n" +
-                "class Test {\n" +
+                "class %TEST_CLASS_NAME% {\n" +
                 " <X extends List<@TA GOuter<@TB String, @TC List<@TD Object>> . @TE GInner<@TF List<@TG Object @TH[] @TI[]>>. @TJ GInner2<String, String>>> X test() { return null; }\n" +
                 "}";
     }
@@ -680,91 +632,89 @@
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0, 1, 0})
     public String testUses1a() {
-        return "class Test { class Inner {}    List<@TA Inner> f; }";
+        return "class %TEST_CLASS_NAME% { class Inner {}    List<@TA Inner> f; }";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0})
     public String testUses1b() {
-        return "class Test { class Inner {}    List<@TA Test.Inner> f; }";
+        return "class %TEST_CLASS_NAME% { class Inner {}    List<@TA %TEST_CLASS_NAME%.Inner> f; }";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0, 1, 0, 1, 0})
-    @TestClass("Test$Inner")
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String testUses2a() {
-        return "class Test { class Inner { class Inner2{}    List<@TA Inner2> f; }}";
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}    List<@TA Inner2> f; }}";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0, 1, 0})
-    @TestClass("Test$Inner")
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String testUses2b() {
-        return "class Test { class Inner { class Inner2{}    List<@TA Inner.Inner2> f; }}";
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}    List<@TA Inner.Inner2> f; }}";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0, 1, 0, 1, 0})
-    @TestClass("Test$Inner")
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String testUses2c() {
-        return "class Test { class Inner { class Inner2{}    List<Inner.@TA Inner2> f; }}";
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}    List<Inner.@TA Inner2> f; }}";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0})
-    @TestClass("Test$Inner")
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String testUses2d() {
-        return "class Test{ class Inner { class Inner2{}    List<@TA Test.Inner.Inner2> f; }}";
+        return "class %TEST_CLASS_NAME%{ class Inner { class Inner2{}    List<@TA %TEST_CLASS_NAME%.Inner.Inner2> f; }}";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0, 1, 0})
-    @TestClass("Test$Inner")
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String testUses2e() {
-        return "class Test { class Inner { class Inner2{}    List<Test.@TA Inner.Inner2> f; }}";
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}    List<%TEST_CLASS_NAME%.@TA Inner.Inner2> f; }}";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0, 1, 0, 1, 0})
-    @TestClass("Test$Inner")
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String testUses2f() {
-        return "class Test { class Inner { class Inner2{}    List<Test.Inner.@TA Inner2> f; }}";
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}    List<%TEST_CLASS_NAME%.Inner.@TA Inner2> f; }}";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0, 1, 0, 1, 0})
-    @TestClass("Test$Inner")
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String testUses3a() {
-        return "class Test { class Inner<A, B> { class Inner2<C, D>{}\n" +
-                "    List<Test.Inner.@TA Inner2> f; }}";
+        return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+                "    List<%TEST_CLASS_NAME%.Inner.@TA Inner2> f; }}";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0, 1, 0})
-    @TestClass("Test$Inner")
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String testUses3b() {
-        return "class Test { class Inner<A, B> { class Inner2<C, D>{}\n" +
-                "    List<Test.@TA Inner.Inner2> f; }}";
+        return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+                "    List<%TEST_CLASS_NAME%.@TA Inner.Inner2> f; }}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD,
-                genericLocation = {}),
-        @TADescription(annotation = "TB", type = FIELD,
+    @TADescription(annotation = "TA", type = FIELD,
+                genericLocation = {})
+    @TADescription(annotation = "TB", type = FIELD,
                 genericLocation = {3, 0})
-    })
     public String testUses4() {
-        return "class Test { static class TInner {}\n" +
+        return "class %TEST_CLASS_NAME% { static class TInner {}\n" +
                 "    @TA TInner f; \n" +
                 "    List<@TB TInner> g; }";
     }
 
     @TADescription(annotation = "TA", type = FIELD,
             genericLocation = {3, 0, 1, 0, 3, 1})
-    @TestClass("Test$Inner")
+    @TestClass("%TEST_CLASS_NAME%$Inner")
     public String testUses3c() {
-        return "class Test { class Inner<A, B> { class Inner2<C, D>{}\n" +
-                "    List<Test.Inner<String, @TA Object>.Inner2<Test, Test>> f; }}";
+        return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+                "    List<%TEST_CLASS_NAME%.Inner<String, @TA Object>.Inner2<%TEST_CLASS_NAME%, %TEST_CLASS_NAME%>> f; }}";
     }
 
     @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER, paramIndex=0)
@@ -778,24 +728,22 @@
         return "void testme(List<java.security.@TA ProtectionDomain> protectionDomain) {}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
+    @TADescription(annotation = "TA", type = LOCAL_VARIABLE,
                 genericLocation = {},
                 lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
                 lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
-                lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
+                lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = LOCAL_VARIABLE,
                 genericLocation = {1, 0},
                 lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
                 lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
-                lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
+                lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TC", type = LOCAL_VARIABLE,
                 // Only classes count, not methods.
                 genericLocation = {1, 0, 1, 0},
                 lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
                 lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
-                lvarIndex = ReferenceInfoUtil.IGNORE_VALUE),
-    })
+                lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
     @TestClass("Outer$Inner")
     public String testMethodNesting1() {
         return "class Outer {\n" +
@@ -808,18 +756,16 @@
                 "}}\n";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW,
+    @TADescription(annotation = "TA", type = NEW,
                 genericLocation = {},
-                offset = 0),
-        @TADescription(annotation = "TB", type = NEW,
+                offset = 0)
+    @TADescription(annotation = "TB", type = NEW,
                 genericLocation = {1, 0},
-                offset = 0),
-        @TADescription(annotation = "TC", type = NEW,
+                offset = 0)
+    @TADescription(annotation = "TC", type = NEW,
                 // Only classes count, not methods.
                 genericLocation = {1, 0, 1, 0},
-                offset = 12),
-    })
+                offset = 12)
     @TestClass("Outer$Inner")
     public String testMethodNesting2() {
         return "class Outer {\n" +
@@ -832,20 +778,18 @@
                 "}}\n";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_EXTENDS,
-                genericLocation = {}, typeIndex = -1),
-        @TADescription(annotation = "TB", type = CLASS_EXTENDS,
-                genericLocation = {3, 0}, typeIndex = -1),
-        @TADescription(annotation = "TC", type = CLASS_EXTENDS,
-                genericLocation = {3, 1}, typeIndex = -1),
-        @TADescription(annotation = "TD", type = CLASS_EXTENDS,
-                genericLocation = {1, 0}, typeIndex = -1),
-        @TADescription(annotation = "TE", type = CLASS_EXTENDS,
-                genericLocation = {1, 0, 3, 0}, typeIndex = -1),
-        @TADescription(annotation = "TF", type = CLASS_EXTENDS,
+    @TADescription(annotation = "TA", type = CLASS_EXTENDS,
+                genericLocation = {}, typeIndex = -1)
+    @TADescription(annotation = "TB", type = CLASS_EXTENDS,
+                genericLocation = {3, 0}, typeIndex = -1)
+    @TADescription(annotation = "TC", type = CLASS_EXTENDS,
+                genericLocation = {3, 1}, typeIndex = -1)
+    @TADescription(annotation = "TD", type = CLASS_EXTENDS,
+                genericLocation = {1, 0}, typeIndex = -1)
+    @TADescription(annotation = "TE", type = CLASS_EXTENDS,
+                genericLocation = {1, 0, 3, 0}, typeIndex = -1)
+    @TADescription(annotation = "TF", type = CLASS_EXTENDS,
                 genericLocation = {1, 0, 3, 1}, typeIndex = -1)
-    })
     @TestClass("GOuter$GInner$Test")
     public String testExtends1() {
         return "class GOuter<A, B> {\n" +
@@ -855,19 +799,17 @@
                 "}";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER,
-                genericLocation = {}, paramIndex = 0),
-        @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND,
-                genericLocation = {}, paramIndex = 0, boundIndex = 0),
-        @TADescription(annotation = "TC", type = FIELD,
-                genericLocation = {}),
-        @TADescription(annotation = "TD", type = FIELD,
+    @TADescription(annotation = "TA", type = CLASS_TYPE_PARAMETER,
+                genericLocation = {}, paramIndex = 0)
+    @TADescription(annotation = "TB", type = CLASS_TYPE_PARAMETER_BOUND,
+                genericLocation = {}, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "TC", type = FIELD,
+                genericLocation = {})
+    @TADescription(annotation = "TD", type = FIELD,
                 genericLocation = {3, 0})
-    })
-    @TestClass("Test$1Nested")
+    @TestClass("%TEST_CLASS_NAME%$1Nested")
     public String testNestedInMethod1() {
-        return "class Test {\n" +
+        return "class %TEST_CLASS_NAME% {\n" +
                 "  void foobar() {\n" +
                 "    class Nested<@TA X extends @TB Object> {\n" +
                 "      @TC List<@TD Object> f;\n" +
@@ -875,4 +817,781 @@
                 "  }" +
                 "}";
     }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {}, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {1, 0}, paramIndex = 0)
+    public String testParamRepeatableAnnotation1() {
+        return "void test(@RTA @RTA Outer.@RTB @RTB Inner a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 1, 0}, paramIndex = 0)
+    public String testParamRepeatableAnnotation1b() {
+        return "void test(List<@RTA @RTA Outer.@RTB @RTB Inner> a) { }";
+    }
+
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0}, paramIndex = 0)
+    public String testParamRepeatableAnnotation1g() {
+        return "void test(List<java.util.Map. @RTB @RTB Entry> a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {}, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {1, 0}, paramIndex = 0)
+    public String testParamRepeatableAnnotation2() {
+        return "void test(@RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String> a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 1, 0}, paramIndex = 0)
+    public String testParamRepeatableAnnotation2b() {
+        return "void test(List<@RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String>> a) { }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTEs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTFs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTGs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTHs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTIs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+    @TADescription(annotation = "RTJs", type = METHOD_FORMAL_PARAMETER, paramIndex = 0)
+    @TADescription(annotation = "RTKs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {0, 0}, paramIndex = 0)
+    public String testParamRepeatableAnnotation3() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " void test(@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+                " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer, @RTI @RTI Object>" +
+                " @RTJ @RTJ[] @RTK @RTK[] a) { }\n" +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTDs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTEs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTFs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTGs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTHs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTIs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1}, paramIndex = 0)
+    @TADescription(annotation = "RTJs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0}, paramIndex = 0)
+    @TADescription(annotation = "RTKs", type = METHOD_FORMAL_PARAMETER,
+            genericLocation = {3, 0, 0, 0}, paramIndex = 0)
+    public String testParamRepeatableAnnotation4() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " void test(List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+                " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+                " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[]> a) { }\n" +
+                "}";
+    }
+
+    // Local variables
+
+    @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+            genericLocation = {},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+            genericLocation = {1, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    public String testLocalRepeatableAnnotation1a() {
+        return "void test() { @RTA @RTA Outer.@RTB @RTB Inner a = null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+            genericLocation = {},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    public String testLocalRepeatableAnnotation1b() {
+        return "void test() { @RTA @RTA Outer.Inner a = null; }";
+    }
+
+    @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+            genericLocation = {1, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    public String testLocalRepeatableAnnotation1c() {
+        return "void test() { Outer.@RTB @RTB Inner a = null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+            genericLocation = {},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+            genericLocation = {1, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    public String testLocalRepeatableAnnotation2() {
+        return "void test() { @RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String> a = null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTCs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTDs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTEs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTFs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTGs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTHs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTIs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTJs", type = LOCAL_VARIABLE,
+            genericLocation = {},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTKs", type = LOCAL_VARIABLE,
+            genericLocation = {0, 0},
+            lvarOffset = {5}, lvarLength = {1}, lvarIndex = {1})
+    public String testLocalRepeatableAnnotation3() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " void test() { @RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+                " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer, @RTI @RTI Object>" +
+                " @RTJ @RTJ[] @RTK @RTK[] a = null; }\n" +
+                "}";
+    }
+
+
+    @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTCs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTDs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTEs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTFs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTGs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTHs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTIs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTJs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    @TADescription(annotation = "RTKs", type = LOCAL_VARIABLE,
+            genericLocation = {3, 0, 0, 0},
+            lvarOffset = {2}, lvarLength = {1}, lvarIndex = {1})
+    public String testLocalRepeatableAnnotation4() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " void test() { List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD" +
+                " Object @RTE @RTE [] @RTF @RTF []>>. @RTG @RTG GInner2<@RTH @RTH" +
+                " Integer, @RTI @RTI Object> @RTJ @RTJ [] @RTK @RTK []> a = null; }\n" +
+                "}";
+    }
+
+
+    // fields
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {})
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = {1, 0})
+    public String testFieldRepeatableAnnotation1a() {
+        return "@RTA @RTA Outer.@RTB @RTB Inner a;";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {})
+    public String testFieldRepeatableAnnotation1b() {
+        return "@RTA @RTA Outer.Inner a;";
+    }
+
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = {1, 0})
+    public String testFieldRepeatableAnnotation1c() {
+        return "Outer.@RTB @RTB Inner a;";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {})
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = {1, 0})
+    public String testFieldRepeatableAnnotation2() {
+        return "@RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String> a;";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "RTCs", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "RTDs", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "RTEs", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "RTFs", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "RTGs", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "RTHs", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "RTIs", type = FIELD,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+    @TADescription(annotation = "RTJs", type = FIELD)
+    @TADescription(annotation = "RTKs", type = FIELD,
+            genericLocation = {0, 0})
+    public String testFieldRepeatableAnnotation3() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " @RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object @RTE @RTE[] @RTF @RTF[]>>." +
+                " @RTG @RTG GInner2<@RTH @RTH Integer, @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[] a;\n" +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "RTCs", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "RTDs", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "RTEs", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "RTFs", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "RTGs", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "RTHs", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "RTIs", type = FIELD,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+    @TADescription(annotation = "RTJs", type = FIELD,
+            genericLocation = {3, 0})
+    @TADescription(annotation = "RTKs", type = FIELD,
+            genericLocation = {3, 0, 0, 0})
+    public String testFieldRepeatableAnnotation4() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+                " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+                " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[]> a;\n" +
+                "}";
+    }
+
+
+    // return types
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+            genericLocation = {})
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = {1, 0})
+    public String testReturnRepeatableAnnotation1() {
+        return "@RTA @RTA Outer.@RTB @RTB Inner test() { return null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+            genericLocation = {})
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = {1, 0})
+    public String testReturnRepeatableAnnotation2() {
+        return "@RTA @RTA GOuter<String,String>." +
+                "@RTB @RTB GInner<String,String> test() { return null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "RTEs", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "RTFs", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "RTGs", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "RTHs", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "RTIs", type = METHOD_RETURN,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+    @TADescription(annotation = "RTJs", type = METHOD_RETURN)
+    @TADescription(annotation = "RTKs", type = METHOD_RETURN,
+            genericLocation = {0, 0})
+    public String testReturnRepeatableAnnotation3() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " @RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object @RTE @RTE[]" +
+                " @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+                " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[] test() { return null; }\n" +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "RTEs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "RTFs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "RTGs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "RTHs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "RTIs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1})
+    @TADescription(annotation = "RTJs", type = METHOD_RETURN,
+            genericLocation = {3, 0})
+    @TADescription(annotation = "RTKs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 0, 0})
+    public String testReturnRepeatableAnnotation4() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+                " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+                " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[]> test() { return null; }\n" +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_RETURN,
+            genericLocation = {3, 0})
+    @TADescription(annotation = "RTBs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 3, 0})
+    @TADescription(annotation = "RTCs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 3, 1})
+    @TADescription(annotation = "RTDs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 3, 1, 3, 0})
+    @TADescription(annotation = "RTEs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 1, 0})
+    @TADescription(annotation = "RTFs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 1, 0, 3, 0})
+    @TADescription(annotation = "RTGs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "RTHs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 1, 0, 3, 0, 3, 0})
+    @TADescription(annotation = "RTIs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0})
+    @TADescription(annotation = "RTJs", type = METHOD_RETURN,
+            genericLocation = {3, 0, 1, 0, 1, 0})
+    public String testReturnRepeatableAnnotation5() {
+        return "class GOuter<A, B> {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " List<@RTA @RTA GOuter<@RTB @RTB String, @RTC @RTC List<@RTD @RTD Object>> ." +
+                " @RTE @RTE GInner<@RTF @RTF List<@RTG @RTG Object @RTH @RTH[] @RTI @RTI[]>>." +
+                " @RTJ @RTJ GInner2<String, String>> test() { return null; }\n" +
+                "}";
+    }
+
+
+    // type parameters
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {}, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
+    public String testTypeparamRepeatableAnnotation1() {
+        return "<X extends @RTA @RTA Outer.@RTB @RTB Inner> X test() { return null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {}, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0}, paramIndex = 0, boundIndex = 0)
+    public String testTypeparamRepeatableAnnotation2() {
+        return "<X extends @RTA @RTA GOuter<String,String>.@RTB @RTB GInner<String,String>> X test() { return null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {},
+            paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0},
+            paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0, 3, 0},
+            paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+            paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0, 3, 0, 3, 0},
+            paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0, 3, 0, 3, 0, 0, 0},
+            paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTGs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0, 1, 0},
+            paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTHs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0, 1, 0, 3, 0},
+            paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTIs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {1, 0, 1, 0, 3, 1},
+            paramIndex = 0, boundIndex = 0)
+    public String testTypeparamRepeatableAnnotation3() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " <X extends @RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+                " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+                " @RTI @RTI Object>> X test() { return null; }\n" +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0, 0, 0},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 3, 0, 3, 0, 0, 0},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTGs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTHs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 0},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTIs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0, 3, 1},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTJs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0},
+            paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTKs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 0, 0},
+            paramIndex = 0, boundIndex = 1)
+    public String testTypeparamRepeatableAnnotation4() {
+        return "class Outer {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " <X extends List<@RTA @RTA Outer . @RTB @RTB GInner<@RTC @RTC List<@RTD @RTD Object" +
+                " @RTE @RTE[] @RTF @RTF[]>>. @RTG @RTG GInner2<@RTH @RTH Integer," +
+                " @RTI @RTI Object> @RTJ @RTJ[] @RTK @RTK[]>> X test() { return null; }\n" +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTBs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTCs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 3, 1}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTDs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 3, 1, 3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTEs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 1, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTFs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 1, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTGs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0, 0, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTHs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 1, 0, 3, 0, 3, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTIs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 1, 0, 3, 0, 3, 0, 0, 0}, paramIndex = 0, boundIndex = 1)
+    @TADescription(annotation = "RTJs", type = METHOD_TYPE_PARAMETER_BOUND,
+            genericLocation = {3, 0, 1, 0, 1, 0}, paramIndex = 0, boundIndex = 1)
+    public String testTypeparamRepeatableAnnotation5() {
+        return "class GOuter<A, B> {\n" +
+                " class GInner<X> {\n" +
+                "  class GInner2<Y, Z> {}\n" +
+                "}}\n\n" +
+                "class %TEST_CLASS_NAME% {\n" +
+                " <X extends List<@RTA @RTA GOuter<@RTB @RTB String, @RTC @RTC List<@RTD @RTD Object>> ." +
+                " @RTE @RTE GInner<@RTF @RTF List<@RTG @RTG Object @RTH @RTH[] @RTI @RTI[]>>." +
+                " @RTJ @RTJ GInner2<String, String>>> X test() { return null; }\n" +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 1, 0})
+    public String testUsesRepeatableAnnotation1a() {
+        return "class %TEST_CLASS_NAME% { class Inner {}    List<@RTA @RTA Inner> f; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0})
+    public String testUsesRepeatableAnnotation1b() {
+        return "class %TEST_CLASS_NAME% { class Inner {}    List<@RTA @RTA %TEST_CLASS_NAME%.Inner> f; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 1, 0, 1, 0})
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String testUsesRepeatableAnnotation2a() {
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}    List<@RTA @RTA Inner2> f; }}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 1, 0})
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String testUsesRepeatableAnnotation2b() {
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}    List<@RTA @RTA Inner.Inner2> f; }}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 1, 0, 1, 0})
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String testUsesRepeatableAnnotation2c() {
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}    List<Inner.@RTA @RTA Inner2> f; }}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0})
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String testUsesRepeatableAnnotation2d() {
+        return "class %TEST_CLASS_NAME%{ class Inner { class Inner2{}" +
+                "    List<@RTA @RTA %TEST_CLASS_NAME%.Inner.Inner2> f; }}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 1, 0})
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String testUsesRepeatableAnnotation2e() {
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}" +
+                "    List<%TEST_CLASS_NAME%.@RTA @RTA Inner.Inner2> f; }}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 1, 0, 1, 0})
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String testUsesRepeatableAnnotation2f() {
+        return "class %TEST_CLASS_NAME% { class Inner { class Inner2{}" +
+                "    List<%TEST_CLASS_NAME%.Inner.@RTA @RTA Inner2> f; }}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 1, 0, 1, 0})
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String testUsesRepeatableAnnotation3a() {
+        return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+                "    List<%TEST_CLASS_NAME%.Inner.@RTA @RTA Inner2> f; }}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 1, 0})
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String testUsesRepeatableAnnotation3b() {
+        return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+                "    List<%TEST_CLASS_NAME%.@RTA @RTA Inner.Inner2> f; }}";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {})
+    @TADescription(annotation = "RTBs", type = FIELD,
+            genericLocation = {3, 0})
+    public String testUsesRepeatableAnnotation4() {
+        return "class %TEST_CLASS_NAME% { static class TInner {}\n" +
+                "    @RTA @RTA TInner f; \n" +
+                "    List<@RTB @RTB TInner> g; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD,
+            genericLocation = {3, 0, 1, 0, 3, 1})
+    @TestClass("%TEST_CLASS_NAME%$Inner")
+    public String testUsesRepeatableAnnotation3c() {
+        return "class %TEST_CLASS_NAME% { class Inner<A, B> { class Inner2<C, D>{}\n" +
+                "    List<%TEST_CLASS_NAME%.Inner<String," +
+                " @RTA @RTA Object>.Inner2<%TEST_CLASS_NAME%, %TEST_CLASS_NAME%>> f; }}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex=0)
+    public String testFullyQualifiedRepeatableAnnotation1() {
+        return "void testme(java.security.@RTA @RTA ProtectionDomain protectionDomain) {}";
+    }
+
+    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER, paramIndex=0,
+            genericLocation = {3, 0})
+    public String testFullyQualifiedRepeatableAnnotation2() {
+        return "void testme(List<java.security.@RTA @RTA ProtectionDomain> protectionDomain) {}";
+    }
+
+    @TADescription(annotation = "RTAs", type = LOCAL_VARIABLE,
+            genericLocation = {},
+            lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
+            lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
+            lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = LOCAL_VARIABLE,
+            genericLocation = {1, 0},
+            lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
+            lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
+            lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = LOCAL_VARIABLE,
+            // Only classes count, not methods.
+            genericLocation = {1, 0, 1, 0},
+            lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
+            lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
+            lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
+    @TestClass("Outer$Inner")
+    public String testMethodNestingRepeatableAnnotation1() {
+        return "class Outer {\n" +
+                " class Inner {\n" +
+                "  void foo() {\n" +
+                "    class MInner {}\n" +
+                "    @RTA @RTA Outer . @RTB @RTB Inner l1 = null;\n" +
+                "    @RTC @RTC MInner l2 = null;\n" +
+                "  }\n" +
+                "}}\n";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW,
+            genericLocation = {},
+            offset = 0)
+    @TADescription(annotation = "RTBs", type = NEW,
+            genericLocation = {1, 0},
+            offset = 0)
+    @TADescription(annotation = "RTCs", type = NEW,
+            // Only classes count, not methods.
+            genericLocation = {1, 0, 1, 0},
+            offset = 12)
+    @TestClass("Outer$Inner")
+    public String testMethodNestingRepeatableAnnotation2() {
+        return "class Outer {\n" +
+                " class Inner {\n" +
+                "  void foo() {\n" +
+                "    class MInner {}\n" +
+                "    Object o1 = new @RTA @RTA Outer . @RTB @RTB Inner();" +
+                "    Object o2 = new @RTC @RTC MInner();\n" +
+                "  }\n" +
+                "}}\n";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_EXTENDS,
+            genericLocation = {}, typeIndex = -1)
+    @TADescription(annotation = "RTBs", type = CLASS_EXTENDS,
+            genericLocation = {3, 0}, typeIndex = -1)
+    @TADescription(annotation = "RTCs", type = CLASS_EXTENDS,
+            genericLocation = {3, 1}, typeIndex = -1)
+    @TADescription(annotation = "RTDs", type = CLASS_EXTENDS,
+            genericLocation = {1, 0}, typeIndex = -1)
+    @TADescription(annotation = "RTEs", type = CLASS_EXTENDS,
+            genericLocation = {1, 0, 3, 0}, typeIndex = -1)
+    @TADescription(annotation = "RTFs", type = CLASS_EXTENDS,
+            genericLocation = {1, 0, 3, 1}, typeIndex = -1)
+    @TestClass("GOuter$GInner$Test")
+    public String testExtendsRepeatableAnnotation1() {
+        return "class GOuter<A, B> {\n" +
+                "  class GInner<X, Y> {\n" +
+                "    class Test extends @RTA @RTA GOuter<@RTB @RTB String," +
+                " @RTC @RTC String>.@RTD @RTD GInner<@RTE @RTE String, @RTF @RTF String> {}" +
+                "  }" +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = CLASS_TYPE_PARAMETER,
+            genericLocation = {}, paramIndex = 0)
+    @TADescription(annotation = "RTBs", type = CLASS_TYPE_PARAMETER_BOUND,
+            genericLocation = {}, paramIndex = 0, boundIndex = 0)
+    @TADescription(annotation = "RTCs", type = FIELD,
+            genericLocation = {})
+    @TADescription(annotation = "RTDs", type = FIELD,
+            genericLocation = {3, 0})
+    @TestClass("%TEST_CLASS_NAME%$1Nested")
+    public String testNestedInMethodRepeatableAnnotation1() {
+        return "class %TEST_CLASS_NAME% {\n" +
+                "  void foobar() {\n" +
+                "    class Nested<@RTA @RTA X extends @RTB @RTB Object> {\n" +
+                "      @RTC @RTC List<@RTD @RTD Object> f;\n" +
+                "    }\n" +
+                "  }" +
+                "}";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/NewObjects.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/NewObjects.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,6 +25,7 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for new object creations
  * @compile -g Driver.java ReferenceInfoUtil.java NewObjects.java
  * @run main Driver NewObjects
@@ -36,11 +37,9 @@
         return "Object returnObject() { return new @TA String(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = NEW,
-                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String returnObjectGeneric() {
         return "Object returnObjectGeneric() { return new @TA ArrayList<@TB String>(); }";
     }
@@ -50,13 +49,11 @@
         return "void initObject() { Object a =  new @TA String(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = NEW,
-                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = NEW,
-                genericLocation = { 3, 1 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TC", type = NEW,
+            genericLocation = { 3, 1 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String initObjectGeneric() {
         return "void initObjectGeneric() { Object a = new @TA HashMap<@TB String, @TC String>(); }";
     }
@@ -66,90 +63,182 @@
         return "void eqtestObject() { if (null == new @TA String()); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = NEW,
-                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String eqtestObjectGeneric() {
         return "void eqtestObjectGeneric() { if (null == new @TA ArrayList<@TB String >()); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0}),
-        @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0})
+    @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String returnNewArray1() {
         return "Object returnNewArray1() { return new @TA String @TB[1]; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0, 0, 0}),
-        @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0}),
-    })
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0})
     public String returnNewArray2() {
         return "Object returnNewArray2() { return new @TA String @TB [1] @TC [2]; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0, 0, 0}),
-        @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0, 0, 0, 1, 0}),
-        @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0}),
-    })
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0})
     public String returnNewArray3() {
         return "Object returnNewArray3() { return new @TA Outer. @TB Inner @TC [1] @TD [2]; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0, 0, 0}),
-        @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0, 0, 0, 1, 0}),
-        @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0, 0, 0, 1, 0, 1, 0}),
-        @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0}),
-    })
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0})
     public String returnNewArray4() {
         return "Object returnNewArray4() { return new @TA Outer. @TB Middle. @TC MInner @TD [1] @TE [2]; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {3, 0, 0, 0, 0, 0}),
-        @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0}),
-        @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0}),
-        @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {3, 0}),
-        @TADescription(annotation = "TF", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {3, 0, 0, 0}),
-    })
+    @TADescription(annotation = "TA", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "TC", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "TD", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "TE", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0})
+    @TADescription(annotation = "TF", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0, 0, 0})
     public String returnNewArray5() {
         return "Object returnNewArray5() { return new @TA ArrayList<@TB Outer. @TC Middle. @TD MInner @TE [] @TF []>(); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0, 0, 0}),
-        @TADescription(annotation = "TB", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                genericLocation = {0, 0, 0, 0, 1, 0}),
-        @TADescription(annotation = "TC", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TD", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
-        genericLocation = {0, 0}),
-    })
+    @TADescription(annotation = "TA", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "TB", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "TC", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TD", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+    genericLocation = {0, 0})
     public String arrayField() {
         return "@TA Outer. @TB Inner @TC [] @TD [] f;";
     }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String returnObjectRepeatableAnnotation() {
+        return "Object returnObject() { return new @RTA @RTA String(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String returnObjectGenericRepeatableAnnotation() {
+        return "Object returnObjectGeneric() { return new @RTA @RTA ArrayList<@RTB @RTB String>(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String initObjectRepeatableAnnotation() {
+        return "void initObject() { Object a =  new @RTA @RTA String(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = NEW,
+            genericLocation = { 3, 1 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String initObjectGenericRepeatableAnnotation() {
+        return "void initObjectGeneric() { Object a = new @RTA @RTA HashMap<@RTB @RTB String, @RTC @RTC String>(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String eqtestObjectRepeatableAnnotation() {
+        return "void eqtestObject() { if (null == new @RTA @RTA String()); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = NEW,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String eqtestObjectGenericRepeatableAnnotation() {
+        return "void eqtestObjectGeneric() { if (null == new @RTA @RTA ArrayList<@RTB @RTB String >()); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0})
+    @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String returnNewArrayRepeatableAnnotation1() {
+        return "Object returnNewArray1() { return new @RTA @RTA String @RTB @RTB[1]; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0})
+    public String returnNewArrayRepeatableAnnotation2() {
+        return "Object returnNewArray2() { return new @RTA @RTA String @RTB @RTB [1] @RTC @RTC [2]; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTDs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0})
+    public String returnNewArrayRepeatableAnnotation3() {
+        return "Object returnNewArray3() { return new @RTA @RTA Outer. @RTB @RTB Inner @RTC @RTC [1] @RTD @RTD [2]; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "RTDs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTEs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0})
+    public String returnNewArrayRepeatableAnnotation4() {
+        return "Object returnNewArray4() { return new @RTA @RTA Outer." +
+                " @RTB @RTB Middle. @RTC @RTC MInner @RTD @RTD [1] @RTE @RTE [2]; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0, 0, 0, 0, 0})
+    @TADescription(annotation = "RTCs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "RTDs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0, 0, 0, 0, 0, 1, 0, 1, 0})
+    @TADescription(annotation = "RTEs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0})
+    @TADescription(annotation = "RTFs", type = NEW, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {3, 0, 0, 0})
+    public String returnNewArrayRepeatableAnnotation5() {
+        return "Object returnNewArray5() { return new @RTA @RTA ArrayList<@RTB @RTB Outer." +
+                " @RTC @RTC Middle. @RTD @RTD MInner @RTE @RTE [] @RTF @RTF []>(); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0})
+    @TADescription(annotation = "RTBs", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0, 0, 0, 1, 0})
+    @TADescription(annotation = "RTCs", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTDs", type = FIELD, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            genericLocation = {0, 0})
+    public String arrayFieldRepeatableAnnotation() {
+        return "@RTA @RTA Outer. @RTB @RTB Inner @RTC @RTC [] @RTD @RTD [] f;";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/ReferenceInfoUtil.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/ReferenceInfoUtil.java	Fri Jun 06 16:08:46 2014 -0400
@@ -41,7 +41,7 @@
     public static final int IGNORE_VALUE = -321;
 
     public static List<TypeAnnotation> extendedAnnotationsOf(ClassFile cf) {
-        List<TypeAnnotation> annos = new ArrayList<TypeAnnotation>();
+        List<TypeAnnotation> annos = new ArrayList<>();
         findAnnotations(cf, annos);
         return annos;
     }
@@ -119,128 +119,6 @@
         }
     }
 
-    /////////////////// TA Position Builder ///////////////////////
-    /* TODO: comment out this dead code. Was this unfinished code that was
-     * supposed to be used somewhere? The tests pass without this.
-    private static class TAPositionBuilder {
-        private TypeAnnotation.Position pos = new TypeAnnotation.Position();
-
-        private TAPositionBuilder() { }
-
-        public TypeAnnotation.Position build() { return pos; }
-
-        public static TAPositionBuilder ofType(TypeAnnotation.TargetType type) {
-            TAPositionBuilder builder = new TAPositionBuilder();
-            builder.pos.type = type;
-            return builder;
-        }
-
-        public TAPositionBuilder atOffset(int offset) {
-            switch (pos.type) {
-            // type cast
-            case TYPECAST:
-            // instanceof
-            case INSTANCEOF:
-            // new expression
-            case NEW:
-                pos.offset = offset;
-                break;
-            default:
-                throw new IllegalArgumentException("invalid field for given type: " + pos.type);
-            }
-            return this;
-        }
-
-        public TAPositionBuilder atLocalPosition(int offset, int length, int index) {
-            switch (pos.type) {
-            // local variable
-            case LOCAL_VARIABLE:
-                pos.lvarOffset = new int[] { offset };
-                pos.lvarLength = new int[] { length };
-                pos.lvarIndex  = new int[] { index  };
-                break;
-            default:
-                throw new IllegalArgumentException("invalid field for given type: " + pos.type);
-            }
-            return this;
-        }
-
-        public TAPositionBuilder atParameterIndex(int index) {
-            switch (pos.type) {
-            // type parameters
-            case CLASS_TYPE_PARAMETER:
-            case METHOD_TYPE_PARAMETER:
-            // method parameter
-            case METHOD_FORMAL_PARAMETER:
-                pos.parameter_index = index;
-                break;
-            default:
-                throw new IllegalArgumentException("invalid field for given type: " + pos.type);
-            }
-            return this;
-        }
-
-        public TAPositionBuilder atParamBound(int param, int bound) {
-            switch (pos.type) {
-            // type parameters bounds
-            case CLASS_TYPE_PARAMETER_BOUND:
-            case METHOD_TYPE_PARAMETER_BOUND:
-                pos.parameter_index = param;
-                pos.bound_index = bound;
-                break;
-            default:
-                throw new IllegalArgumentException("invalid field for given type: " + pos.type);
-            }
-            return this;
-        }
-
-        public TAPositionBuilder atWildcardPosition(TypeAnnotation.Position pos) {
-            switch (pos.type) {
-            // wildcards
-            case WILDCARD_BOUND:
-                pos.wildcard_position = pos;
-                break;
-            default:
-                throw new IllegalArgumentException("invalid field for given type: " + pos.type);
-            }
-            return this;
-        }
-
-        public TAPositionBuilder atTypeIndex(int index) {
-            switch (pos.type) {
-            // class extends or implements clauses
-            case CLASS_EXTENDS:
-            // throws
-            case THROWS:
-                pos.type_index = index;
-                break;
-            default:
-                throw new IllegalArgumentException("invalid field for given type: " + pos.type);
-            }
-            return this;
-        }
-
-        public TAPositionBuilder atOffsetWithIndex(int offset, int index) {
-            switch (pos.type) {
-            // method type argument: wasn't specified
-            case NEW_TYPE_ARGUMENT:
-            case METHOD_TYPE_ARGUMENT:
-                pos.offset = offset;
-                pos.type_index = index;
-                break;
-            default:
-                throw new IllegalArgumentException("invalid field for given type: " + pos.type);
-            }
-            return this;
-        }
-
-        public TAPositionBuilder atGenericLocation(Integer ...loc) {
-            pos.location = Arrays.asList(loc);
-            pos.type = pos.type.getGenericComplement();
-            return this;
-        }
-    }*/
-
     /////////////////////// Equality testing /////////////////////
     private static boolean areEquals(int a, int b) {
         return a == b || a == IGNORE_VALUE || b == IGNORE_VALUE;
@@ -264,21 +142,18 @@
     }
 
     public static boolean areEquals(TypeAnnotation.Position p1, TypeAnnotation.Position p2) {
-        if (p1 == p2)
-            return true;
-        if (p1 == null || p2 == null)
-            return false;
+        return p1 == p2 || !(p1 == null || p2 == null) &&
+                p1.type == p2.type &&
+                (p1.location.equals(p2.location)) &&
+                areEquals(p1.offset, p2.offset) &&
+                areEquals(p1.lvarOffset, p2.lvarOffset) &&
+                areEquals(p1.lvarLength, p2.lvarLength) &&
+                areEquals(p1.lvarIndex, p2.lvarIndex) &&
+                areEquals(p1.bound_index, p2.bound_index) &&
+                areEquals(p1.parameter_index, p2.parameter_index) &&
+                areEquals(p1.type_index, p2.type_index) &&
+                areEquals(p1.exception_index, p2.exception_index);
 
-        return ((p1.type == p2.type)
-                && (p1.location.equals(p2.location))
-                && areEquals(p1.offset, p2.offset)
-                && areEquals(p1.lvarOffset, p2.lvarOffset)
-                && areEquals(p1.lvarLength, p2.lvarLength)
-                && areEquals(p1.lvarIndex, p2.lvarIndex)
-                && areEquals(p1.bound_index, p2.bound_index)
-                && areEquals(p1.parameter_index, p2.parameter_index)
-                && areEquals(p1.type_index, p2.type_index)
-                && areEquals(p1.exception_index, p2.exception_index));
     }
 
     private static TypeAnnotation findAnnotation(String name, List<TypeAnnotation> annotations, ClassFile cf) throws InvalidIndex, UnexpectedEntry {
@@ -306,9 +181,6 @@
             if (actual == null)
                 throw new ComparisionException("Expected annotation not found: " + aName);
 
-            // TODO: you currently get an exception if the test case does not use all necessary
-            // annotation attributes, e.g. forgetting the offset for a local variable.
-            // It would be nicer to give an understandable warning instead.
             if (!areEquals(expected, actual.position)) {
                 throw new ComparisionException("Unexpected position for annotation : " + aName +
                         "\n  Expected: " + expected.toString() +
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/ResourceVariable.java	Fri Jun 06 16:08:46 2014 -0400
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8042451
+ * @summary Test population of reference info for resource variable
+ * @compile -g Driver.java ReferenceInfoUtil.java ResourceVariable.java
+ * @run main Driver ResourceVariable
+ */
+
+import static com.sun.tools.classfile.TypeAnnotation.TargetType.RESOURCE_VARIABLE;
+import static java.lang.System.lineSeparator;
+
+public class ResourceVariable {
+
+    @TADescription(annotation = "TA", type = RESOURCE_VARIABLE,
+            lvarOffset = {10}, lvarLength = {118}, lvarIndex = {1})
+    @TADescription(annotation = "TB", type = RESOURCE_VARIABLE,
+            lvarOffset = {22}, lvarLength = {35}, lvarIndex = {3})
+    public String testResourceVariable() {
+        return
+                "public void f() throws IOException {" + lineSeparator() +
+                "    try (@TA InputStream is1 = new FileInputStream(\"\")) {" + lineSeparator() +
+                "        try (@TB InputStream is2 = new FileInputStream(\"\")) {}" + lineSeparator() +
+                "    }" + lineSeparator() +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = RESOURCE_VARIABLE,
+            lvarOffset = {10}, lvarLength = {30}, lvarIndex = {1})
+    public String testRepeatedAnnotation1() {
+        return
+                "public void f() throws IOException {" + lineSeparator() +
+                "    try (@RTA @RTA InputStream is1 = new FileInputStream(\"\")) {}" + lineSeparator() +
+                "}";
+    }
+
+    @TADescription(annotation = "RTAs", type = RESOURCE_VARIABLE,
+            lvarOffset = {10}, lvarLength = {30}, lvarIndex = {1})
+    public String testRepeatedAnnotation2() {
+        return
+                "public void f() throws IOException {" + lineSeparator() +
+                "    try (@RTAs({@RTA, @RTA}) InputStream is1 = new FileInputStream(\"\")) {}" + lineSeparator() +
+                "}";
+    }
+
+    @TADescription(annotation = "TA", type = RESOURCE_VARIABLE,
+            lvarOffset = {10}, lvarLength = {118}, lvarIndex = {1})
+    @TADescription(annotation = "TB", type = RESOURCE_VARIABLE,
+            lvarOffset = {22}, lvarLength = {35}, lvarIndex = {3})
+    public String testSeveralVariablesInTryWithResources() {
+        return
+                "public void f() throws IOException {" + lineSeparator() +
+                        "    try (@TA InputStream is1 = new FileInputStream(\"\");" + lineSeparator() +
+                        "        @TB InputStream is2 = new FileInputStream(\"\")) {}" + lineSeparator() +
+                        "}";
+    }
+}
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeCasts.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeCasts.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,6 +25,7 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for type casts
  * @compile -g Driver.java ReferenceInfoUtil.java TypeCasts.java
  * @run main Driver TypeCasts
@@ -37,27 +38,23 @@
         return "Object returnObject() { return (@TA String)null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TC", type = CAST,
-                genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TC", type = CAST,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
     public String returnObjectArray() {
         return "Object returnObjectArray() { return (@TC String @TA [] @TB [])null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
     public String returnObjectGeneric() {
         return "Object returnObjectGeneric() { return (@TA List<@TB String>)null; }";
     }
@@ -68,13 +65,11 @@
         return "Object returnPrim() { return (@TA int)0; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
     public String returnPrimArray() {
         return "Object returnPrimArray() { return (@TB int @TA [])null; }";
     }
@@ -85,24 +80,20 @@
         return "void initObject() { Object a =  (@TA String)null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
     public String initObjectArray() {
         return "void initObjectArray() { Object a = (@TB String @TA [])null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
     public String initObjectGeneric() {
         return "void initObjectGeneric() { Object a = (@TA List<@TB String>)null; }";
     }
@@ -113,13 +104,11 @@
         return "void initPrim() { Object a =  (@TA int)0; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
     public String initPrimArray() {
         return "void initPrimArray() { Object a = (@TB int @TA [])null; }";
     }
@@ -130,24 +119,20 @@
         return "void eqtestObject() { if (null == (@TA String)null); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
     public String eqtestObjectArray() {
         return "void eqtestObjectArray() { if (null == (@TB String @TA [])null); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
     public String eqtestObjectGeneric() {
         return "void eqtestObjectGeneric() { if (null == (@TA List<@TB String >)null); }";
     }
@@ -159,42 +144,182 @@
         return "void eqtestPrim(int a) { if (0 == (@TA int)a); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
-                typeIndex = 0)
-    })
+    @TADescription(annotation = "TA", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
     public String eqtestPrimArray() {
         return "void eqtestPrimArray() { if (null == (@TB int @TA [])null); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST,
-                offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1),
-        @TADescription(annotation = "TC", type = CAST,
-                offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
-                genericLocation = {3, 0})
-    })
+    @TADescription(annotation = "TA", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1)
+    @TADescription(annotation = "TC", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
+            genericLocation = {3, 0})
     public String intersection1() {
         return "void intersection() { Object o = (@TA String & @TB Comparable<@TC String>) null; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = CAST,
-                offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0),
-        @TADescription(annotation = "TB", type = CAST,
-                offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1),
-        @TADescription(annotation = "TC", type = CAST,
-                offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
-                genericLocation = {3, 0}),
-        @TADescription(annotation = "TD", type = CAST,
-                offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 2),
-    })
+    @TADescription(annotation = "TA", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0)
+    @TADescription(annotation = "TB", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1)
+    @TADescription(annotation = "TC", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
+            genericLocation = {3, 0})
+    @TADescription(annotation = "TD", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 2)
     public String intersection2() {
         return "void intersection() { Object o = (@TA String & @TB Comparable<@TC String> & @TD CharSequence) null; }";
     }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String returnObjectRepeatableAnnotation() {
+        return "Object returnObject() { return (@RTA @RTA String)null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTCs", type = CAST,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String returnObjectArrayRepeatableAnnotation() {
+        return "Object returnObjectArray() { return (@RTC @RTC String @RTA @RTA [] @RTB @RTB [])null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String returnObjectGenericRepeatableAnnotation() {
+        return "Object returnObjectGeneric() { return (@RTA @RTA List<@RTB @RTB String>)null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String returnPrimRepeatableAnnotation() {
+        return "Object returnPrim() { return (@RTA @RTA int)0; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String returnPrimArrayRepeatableAnnotation() {
+        return "Object returnPrimArray() { return (@RTB @RTB int @RTA @RTA [])null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String initObjectRepeatableAnnotation() {
+        return "void initObject() { Object a =  (@RTA @RTA String)null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String initObjectArrayRepeatableAnnotation() {
+        return "void initObjectArray() { Object a = (@RTB @RTB String @RTA @RTA [])null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String initObjectGenericRepeatableAnnotation() {
+        return "void initObjectGeneric() { Object a = (@RTA @RTA List<@RTB @RTB String>)null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String initPrimRepeatableAnnotation() {
+        return "void initPrim() { Object a =  (@RTA @RTA int)0; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String initPrimArrayRepeatableAnnotation() {
+        return "void initPrimArray() { Object a = (@RTB @RTB int @RTA @RTA [])null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String eqtestObjectRepeatableAnnotation() {
+        return "void eqtestObject() { if (null == (@RTA @RTA String)null); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String eqtestObjectArrayRepeatableAnnotation() {
+        return "void eqtestObjectArray() { if (null == (@RTB @RTB String @RTA @RTA [])null); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            genericLocation = { 3, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String eqtestObjectGenericRepeatableAnnotation() {
+        return "void eqtestObjectGeneric() { if (null == (@RTA @RTA List<@RTB @RTB String >)null); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    // compiler optimizes away compile time constants casts
+    public String eqtestPrimRepeatableAnnotation() {
+        return "void eqtestPrim(int a) { if (0 == (@RTA @RTA int)a); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE,
+            typeIndex = 0)
+    public String eqtestPrimArrayRepeatableAnnotation() {
+        return "void eqtestPrimArray() { if (null == (@RTB @RTB int @RTA @RTA [])null); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1)
+    @TADescription(annotation = "RTCs", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
+            genericLocation = {3, 0})
+    public String intersectionRepeatableAnnotation1() {
+        return "void intersection() { Object o = (@RTA @RTA String & @RTB @RTB Comparable<@RTC @RTC String>) null; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 0)
+    @TADescription(annotation = "RTBs", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1)
+    @TADescription(annotation = "RTCs", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 1,
+            genericLocation = {3, 0})
+    @TADescription(annotation = "RTDs", type = CAST,
+            offset = ReferenceInfoUtil.IGNORE_VALUE, typeIndex = 2)
+    public String intersectionRepeatableAnnotation2() {
+        return "void intersection() { Object o = (@RTA @RTA String & @RTB @RTB Comparable<@RTC @RTC String> &" +
+                " @RTD @RTD CharSequence) null; }";
+    }
 }
--- a/test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeTests.java	Fri Jun 06 16:00:59 2014 -0400
+++ b/test/tools/javac/annotations/typeAnnotations/referenceinfos/TypeTests.java	Fri Jun 06 16:08:46 2014 -0400
@@ -25,6 +25,7 @@
 
 /*
  * @test
+ * @bug 8042451
  * @summary Test population of reference info for class literals
  * @compile -g Driver.java ReferenceInfoUtil.java TypeTests.java
  * @run main Driver TypeTests
@@ -36,26 +37,22 @@
         return "Object returnObject() { return null instanceof @TA String; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = INSTANCEOF,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = INSTANCEOF,
-                genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TC", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String returnObjectArray() {
         return "Object returnObjectArray() { return null instanceof @TC String @TA [] @TB []; }";
     }
 
     // no type test for primitives
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = INSTANCEOF,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = INSTANCEOF,
-                genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TC", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String returnPrimArray() {
         return "Object returnPrimArray() { return null instanceof @TC int @TA [] @TB []; }";
     }
@@ -68,26 +65,22 @@
         return "void initObject() { Object a =  null instanceof @TA String; }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = INSTANCEOF,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = INSTANCEOF,
-                genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TC", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String initObjectArray() {
         return "void initObjectArray() { Object a = null instanceof @TC String @TA [] @TB []; }";
     }
 
     // no primitive instanceof
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = INSTANCEOF,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = INSTANCEOF,
-                genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TC", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String initPrimArray() {
         return "void initPrimArray() { Object a = null instanceof @TC int @TA [] @TB []; }";
     }
@@ -100,26 +93,22 @@
         return "void eqtestObject() { if (true == (null instanceof @TA String)); }";
     }
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = INSTANCEOF,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = INSTANCEOF,
-                genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TC", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String eqtestObjectArray() {
         return "void eqtestObjectArray() { if (true == (null instanceof @TC String @TA [] @TB [])); }";
     }
 
     // no primitives
 
-    @TADescriptions({
-        @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TB", type = INSTANCEOF,
-                genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE),
-        @TADescription(annotation = "TC", type = INSTANCEOF,
-                genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
-    })
+    @TADescription(annotation = "TA", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TB", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "TC", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
     public String eqtestPrimArray() {
         return "void eqtestPrimArray() { if (true == (null instanceof @TC int @TA [] @TB [])); }";
     }
@@ -127,4 +116,72 @@
     // no void
     // no void array
 
+    @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String returnObjectRepeatableAnnotation() {
+        return "Object returnObject() { return null instanceof @RTA @RTA String; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String returnObjectArrayRepeatableAnnotation() {
+        return "Object returnObjectArray() { return null instanceof @RTC @RTC String @RTA @RTA [] @RTB @RTB []; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String returnPrimArrayRepeatableAnnotation() {
+        return "Object returnPrimArrayRepeatableAnnotation() { return null instanceof @RTC @RTC int @RTA @RTA [] @RTB @RTB []; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String initObjectRepeatableAnnotation() {
+        return "void initObject() { Object a =  null instanceof @RTA @RTA String; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String initObjectArrayRepeatableAnnotation() {
+        return "void initObjectArray() { Object a = null instanceof @RTC @RTC String @RTA @RTA [] @RTB @RTB []; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String initPrimArrayRepeatableAnnotation() {
+        return "void initPrimArray() { Object a = null instanceof @RTC @RTC int @RTA @RTA [] @RTB @RTB []; }";
+    }
+
+    @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String eqtestObjectRepeatableAnnotation() {
+        return "void eqtestObject() { if (true == (null instanceof @RTA @RTA String)); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String eqtestObjectArrayRepeatableAnnotation() {
+        return "void eqtestObjectArray() { if (true == (null instanceof @RTC @RTC String @RTA @RTA [] @RTB @RTB [])); }";
+    }
+
+    @TADescription(annotation = "RTAs", type = INSTANCEOF, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTBs", type = INSTANCEOF,
+            genericLocation = { 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    @TADescription(annotation = "RTCs", type = INSTANCEOF,
+            genericLocation = { 0, 0, 0, 0 }, offset = ReferenceInfoUtil.IGNORE_VALUE)
+    public String eqtestPrimArrayRepeatableAnnotation() {
+        return "void eqtestPrimArray() { if (true == (null instanceof @RTC @RTC int @RTA @RTA [] @RTB @RTB [])); }";
+    }
 }