| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.Map; |
| import org.checkerframework.checker.regex.qual.*; |
| import org.checkerframework.framework.type.AnnotatedTypeMirror; |
| |
| public class InvariantTypes { |
| String[] sa = {"a"}; |
| String[] sa2 = {"a", "b"}; |
| public String[] sa3 = {"a", "b"}; |
| public static String[] sa4 = {"a", "b"}; |
| public final String[] sa5 = {"a", "b"}; |
| public static final String[] sa6 = {"a", "b"}; |
| final String[] sa7 = {"a", "b"}; |
| |
| // tested above: String[] sa = {"a"}; |
| @Regex String[] rsa = {"a"}; |
| String[] nrsa = {"(a"}; |
| // :: error: (array.initializer) :: error: (assignment) |
| @Regex String[] rsaerr = {"(a"}; |
| |
| List<String> ls = Arrays.asList("alice", "bob", "carol"); |
| List<@Regex String> lrs = Arrays.asList("alice", "bob", "carol"); |
| List<String> lnrs = Arrays.asList("(alice", "bob", "carol"); |
| // :: error: (assignment) |
| List<@Regex String> lrserr = Arrays.asList("(alice", "bob", "carol"); |
| |
| void unqm(String[] sa) {} |
| |
| void rem(@Regex String[] rsa) {} |
| |
| void recalls() { |
| unqm(new String[] {"a"}); |
| // TODOINVARR:: error: (argument) |
| unqm(new @Regex String[] {"a"}); |
| rem(new String[] {"a"}); |
| rem(new @Regex String[] {"a"}); |
| } |
| |
| void unqcalls() { |
| unqm(new String[] {"a("}); |
| // TODOINVARR:: error: (argument) |
| // :: error: (array.initializer) |
| unqm(new @Regex String[] {"a("}); |
| // :: error: (argument) |
| rem(new String[] {"a("}); |
| // :: error: (array.initializer) |
| rem(new @Regex String[] {"a("}); |
| } |
| |
| // method argument context |
| |
| String[] retunqm(String[] sa) { |
| return sa; |
| } |
| |
| @Regex String[] retrem(@Regex String[] rsa) { |
| return rsa; |
| } |
| |
| @Regex String[] mixedm(String[] rsa) { |
| return null; |
| } |
| |
| void retunqcalls() { |
| @Regex String[] re = mixedm(new String[] {"a("}); |
| // TODOINVARR:: error: (argument) |
| String[] u = retunqm(new String[] {"a"}); |
| // TODOINVARR:: error: (argument) |
| re = mixedm(new String[2]); |
| } |
| |
| void lrem(List<@Regex String> p) {} |
| |
| void lunqm(List<String> p) {} |
| |
| void listcalls() { |
| lunqm(Arrays.asList("alice", "bob", "carol")); |
| lrem(Arrays.asList("alice", "bob", "carol")); |
| lunqm(Arrays.asList("(alice", "bob", "carol")); |
| // :: error: (argument) |
| lrem(Arrays.asList("(alice", "bob", "carol")); |
| } |
| |
| class ReTests { |
| ReTests(List<@Regex String> p) {} |
| |
| ReTests(List<String> p, int i) {} |
| } |
| |
| void listctrs() { |
| new ReTests(Arrays.asList("alice", "bob", "carol"), 0); |
| new ReTests(Arrays.asList("alice", "bob", "carol")); |
| new ReTests(Arrays.asList("(alice", "bob", "carol"), 0); |
| // :: error: (argument) |
| new ReTests(Arrays.asList("(alice", "bob", "carol")); |
| } |
| |
| <J> String join(final String delimiter, final Collection<J> objs) { |
| return delimiter; |
| } |
| |
| String s1 = join(" ", Arrays.asList("1", "2", "3")); |
| String s2 = "xxx" + join(" ", Arrays.asList("1", "2", "3")); |
| |
| <K extends AnnotatedTypeMirror, V extends AnnotatedTypeMirror> V mapGetHelper( |
| Map<K, V> mappings) { |
| return null; |
| } |
| |
| Map<? extends AnnotatedTypeMirror, ? extends AnnotatedTypeMirror> mappings; |
| AnnotatedTypeMirror found = mapGetHelper(mappings); |
| |
| class TV<T> { |
| List<List<T>> emptylist = Collections.emptyList(); |
| } |
| } |