blob: a2db91db89d85ffcb57f634c1f3e71929ce9ba90 [file] [log] [blame]
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
}
}