import testlib.util.*; public class Varargs { public void testVarargsInvocation() { @Odd String s = null; aVarargsMethod(s); //:: error: (argument.type.incompatible) aVarargsMethod(s, ""); aVarargsMethod(s, s); moreVarargs(new @Odd String[1]); // The assignment context infers @Odd for the component type. // With invariant array subtyping, this will fail, as the main // type is a subtype. moreVarargs(new String @Odd [1]); moreVarargs(new @Odd String(), new @Odd String()); //:: error: (argument.type.incompatible) moreVarargs(new String(), new @Odd String()); moreVarargs( //:: error: (argument.type.incompatible) new String(), //:: error: (argument.type.incompatible) new String()); } /* ------------------------------------------------------------ */ public void aVarargsMethod(@Odd String s, @Odd String... more) {} public void moreVarargs(@Odd String... args) {} Varargs(String... args) {} void test() { new Varargs("m", "n"); new Varargs(); } void testVarargsConstructor() { new ProcessBuilder("hello"); } }