
class AnnotatedObjectSuperType extends java.lang.@TA Object {

  AnnotatedObjectSuperType();
}

class UnannotatedObjectSuperType {

  UnannotatedObjectSuperType();
}

class TypeVariableWithAnnotation1<@TA T> {

  TypeVariableWithAnnotation1();
}

class TypeVariableWithAnnotation2<@TA T> {

  TypeVariableWithAnnotation2();
}

class TypeVariableWithBound1<T extends java.lang.@TA Object> {

  TypeVariableWithBound1();
}

class TypeVariableWithBound2<T extends java.lang.@TA CharSequence> {

  TypeVariableWithBound2();
}

class TypeVariableWithBound3<T extends java.lang.@TA Object & java.lang.CharSequence> {

  TypeVariableWithBound3();
}

class TypeVariableWithBound4<T extends java.lang.@TA CharSequence> {

  TypeVariableWithBound4();
}

class TypeVariableWithBound5<T extends java.lang.CharSequence> {

  TypeVariableWithBound5();
}

class TypeVariableWithBound6<T extends java.lang.CharSequence> {

  TypeVariableWithBound6();
}

class TypeVariableWithBoundRecursive<T extends TypeVariableWithBoundRecursive<T>> {

  TypeVariableWithBoundRecursive();
}

class TypeVariableBoundsOnMethods {

  TypeVariableBoundsOnMethods();

  public <@TA T> void test1();

  public <@TA T> void test2();

  public <T extends java.lang.@TA Object> void test3();

  public <T extends java.lang.@TA CharSequence> void test4();

  public <T extends java.lang.@TA Object & java.lang.CharSequence> void test5();

  public <T extends java.lang.@TA CharSequence> void test6();

  public <T extends java.lang.CharSequence> void test7();

  public <T extends java.lang.CharSequence> void test8();
}

class TypeVariableBoundsOnConstructors {

  public <@TA T> TypeVariableBoundsOnConstructors(boolean b);

  public <@TA T> TypeVariableBoundsOnConstructors(byte b);

  public <T extends java.lang.@TA Object> TypeVariableBoundsOnConstructors(char c);

  public <T extends java.lang.@TA CharSequence> TypeVariableBoundsOnConstructors(short s);

  public <T extends java.lang.@TA Object & java.lang.CharSequence> TypeVariableBoundsOnConstructors(int i);

  public <T extends java.lang.@TA CharSequence> TypeVariableBoundsOnConstructors(long l);

  public <T extends java.lang.CharSequence> TypeVariableBoundsOnConstructors(float f);

  public <T extends java.lang.CharSequence> TypeVariableBoundsOnConstructors(double d);
}

@java.lang.annotation.Target({TYPE_USE})
@interface TA {
}