blob: c16b90c4956966845795b1d9ed9a573c3b28aa64 [file] [log] [blame]
import org.checkerframework.checker.tainting.qual.Tainted;
import org.checkerframework.checker.tainting.qual.Untainted;
public class TaintedIntersections {
interface MyInterface {}
void test1() {
// null is @Untainted
@Untainted Object o1 = (@Untainted Object & @Untainted MyInterface) null;
// :: warning: (explicit.annotation.ignored)
@Untainted Object o2 = (@Untainted Object & @Tainted MyInterface) null;
// :: error: (assignment) :: warning: (explicit.annotation.ignored)
@Untainted Object o3 = (@Tainted Object & @Untainted MyInterface) null;
// :: error: (assignment)
@Untainted Object o4 = (@Tainted Object & @Tainted MyInterface) null;
}
void test2() {
// null is @Untainted
@Untainted Object o1 = (@Untainted Object & MyInterface) null;
@Untainted Object o3 = (Object & @Untainted MyInterface) null;
// :: error: (assignment)
@Untainted Object o2 = (Object & @Tainted MyInterface) null;
// :: error: (assignment)
@Untainted Object o4 = (@Tainted Object & MyInterface) null;
}
void test3(@Tainted MyInterface i) {
// :: warning: (cast.unsafe)
@Untainted Object o1 = (@Untainted Object & @Untainted MyInterface) i;
// :: warning: (explicit.annotation.ignored) :: warning: (cast.unsafe)
@Untainted Object o2 = (@Untainted Object & @Tainted MyInterface) i;
// :: error: (assignment) :: warning: (explicit.annotation.ignored)
@Untainted Object o3 = (@Tainted Object & @Untainted MyInterface) i;
// :: error: (assignment)
@Untainted Object o4 = (@Tainted Object & @Tainted MyInterface) i;
}
void test4(@Tainted MyInterface i) {
// :: warning: (cast.unsafe)
@Untainted Object o1 = (@Untainted Object & MyInterface) i;
// :: warning: (cast.unsafe)
@Untainted Object o3 = (Object & @Untainted MyInterface) i;
// :: error: (assignment)
@Untainted Object o2 = (Object & @Tainted MyInterface) i;
// :: error: (assignment)
@Untainted Object o4 = (@Tainted Object & MyInterface) i;
}
}