package org.checkerframework.afu.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 @org.checkerframework.afu.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.@org.checkerframework.afu.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 @org.checkerframework.afu.annotator.tests.Y Comparable<T>> void m9(T o) {}

  class Inner<@X V extends @Y Object> {}
}

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