blob: e7c69ceef025c112be248acc6697eebf97b4c620 [file] [log] [blame]
import java.util.List;
import org.checkerframework.checker.tainting.qual.PolyTainted;
import org.checkerframework.checker.tainting.qual.Tainted;
import org.checkerframework.checker.tainting.qual.Untainted;
public class TaintingPolyFields {
// :: error: (invalid.polymorphic.qualifier.use)
@PolyTainted Integer x;
// :: error: (invalid.polymorphic.qualifier.use)
@PolyTainted List<@PolyTainted String> lst;
// :: error: (invalid.polymorphic.qualifier.use)
@PolyTainted String @PolyTainted [] str;
// :: error: (invalid.polymorphic.qualifier.use)
List<@PolyTainted String> lst1;
// :: error: (invalid.polymorphic.qualifier.use)
@PolyTainted String[] str1;
// :: error: (invalid.polymorphic.qualifier.use)
@PolyTainted List<String> lst2;
// :: error: (invalid.polymorphic.qualifier.use)
String @PolyTainted [] str2;
// :: error: (invalid.polymorphic.qualifier.use)
@PolyTainted int z;
// Access of poly fields outside of the declaring class.
static void test() {
@Tainted TaintingPolyFields obj = new @Tainted TaintingPolyFields();
// :: error: (assignment)
@Untainted Integer myX = obj.x;
// :: error: (assignment)
@Untainted List<@Untainted String> myLst = obj.lst;
// :: error: (assignment)
@Untainted String @Untainted [] myStr = obj.str;
// :: warning: (cast.unsafe.constructor.invocation)
@Untainted TaintingPolyFields obj1 = new @Untainted TaintingPolyFields();
@Untainted Integer myX1 = obj1.x;
TaintingPolyFields obj2 = new TaintingPolyFields();
// :: error: (assignment)
@Untainted List<@Untainted String> myLst2 = obj2.lst;
}
static void polyTest(@PolyTainted TaintingPolyFields o) {
@PolyTainted Integer f = o.x;
}
}
class TypeParam<T> {
T field;
}