import org.checkerframework.checker.tainting.qual.PolyTainted;
import org.checkerframework.checker.tainting.qual.Tainted;
import org.checkerframework.checker.tainting.qual.Untainted;
import org.checkerframework.framework.qual.HasQualifierParameter;

public class ClassQPTypeVarTest {
  @HasQualifierParameter(Tainted.class)
  interface Buffer {
    void append(@PolyTainted String s);
  }

  <T> @Tainted T cast(T param) {
    return param;
  }

  void bug(@Untainted Buffer b, @Tainted String s) {
    // :: error: (argument)
    b.append(s);
    // :: error: (type.argument.hasqualparam)
    cast(b).append(s);
  }

  <T extends Buffer> @Tainted T castBuffer(T param) {
    return param;
  }

  <T extends @Tainted Buffer> T identity(T param) {
    @Tainted Buffer b = param;
    return param; // ok
  }

  void use(@Untainted Buffer ub, @Tainted Buffer tb) {
    // :: error: (type.argument)
    identity(ub);
    identity(tb); // ok
  }
}
