package annotator.tests;

import static java.lang.annotation.ElementType.TYPE_USE;
import java.lang.annotation.Target;

@Target({TYPE_USE}) @interface A {}
@Target({TYPE_USE}) @interface B {}
@Target({TYPE_USE}) @interface C {}
@Target({TYPE_USE}) @interface X {}
@Target({TYPE_USE}) @interface Y {}

class BoundZero<U> {
  <T extends Object> void m1(T o) {}
  <T extends @Y Object & Comparable<T>> void m2(T o) {}
  <T extends @annotator.tests.Y Object & Comparable<T>> void m3(T o) {}
  <T extends java.lang.Object & Comparable<T>> void m4(T o) {}
  <T extends java.lang.@Y Object & Comparable<T>> void m5(T o) {}
  <T extends java.lang.@annotator.tests.Y Object & Comparable<T>> void m6(T o) {}
  <T extends Comparable<T>> void m7(T o) {}
  <T extends @Y Comparable<T>> void m8(T o) {}
  <T extends @annotator.tests.Y Comparable<T>> void m9(T o) {}
  class Inner<@X V extends @Y Object> {}
}

class Outer<S extends java.io.Serializable> {
}

