blob: d1a3c89540916a6648610cdac02593e21a995704 [file] [log] [blame]
import java.util.ArrayList;
import java.util.List;
import org.checkerframework.framework.testchecker.util.*;
public class Supertypes {
static interface Inter<E> {}
static class A extends ArrayList<String> implements Inter<@Odd String> {}
static class B extends ArrayList<@Odd String> implements Inter<String> {}
A a1;
@Odd A a2;
B b1;
@Odd B b2;
void testSelf() {
// :: error: (assignment)
@Odd A t1 = a1; // should emit error
@Odd A t2 = a2;
// :: error: (assignment)
@Odd B t3 = b1; // should emit error
@Odd B t4 = b2;
}
void testList() {
List<String> l1 = a1;
List<String> l2 = a2;
// :: error: (assignment)
List<String> l3 = b1; // should emit error
// :: error: (assignment)
List<String> l4 = b2; // should emit error
// :: error: (assignment)
List<@Odd String> l5 = a1; // should emit error
// :: error: (assignment)
List<@Odd String> l6 = a2; // should emit error
List<@Odd String> l7 = b1;
List<@Odd String> l8 = b2;
}
void testInter() {
// :: error: (assignment)
Inter<String> l1 = a1; // should emit error
// :: error: (assignment)
Inter<String> l2 = a2; // should emit error
Inter<String> l3 = b1;
Inter<String> l4 = b2;
Inter<@Odd String> l5 = a1;
Inter<@Odd String> l6 = a2;
// :: error: (assignment)
Inter<@Odd String> l7 = b1; // should emit error
// :: error: (assignment)
Inter<@Odd String> l8 = b2; // should emit error
}
void testListOp() {
String s1 = a1.get(0);
String s2 = a2.get(0);
String s3 = b1.get(0);
String s4 = b2.get(0);
// :: error: (assignment)
@Odd String s5 = a1.get(0); // should emit error
// :: error: (assignment)
@Odd String s6 = a2.get(0); // should emit error
@Odd String s7 = b1.get(0);
@Odd String s8 = b2.get(0);
}
void ListIterable() {
for (String s : a1) {}
for (String s : a2) {}
for (String s : b1) {}
for (String s : b2) {}
// :: error: (enhancedfor)
for (@Odd String s : a1) {}
// :: error: (enhancedfor)
for (@Odd String s : a2) {}
for (@Odd String s : b1) {}
for (@Odd String s : b2) {}
}
}