import checkers.interning.quals.Interned; import checkers.util.test.*; class Arrays { Object[] @Odd [] objB1 = new Object[] @Odd [] {}; @interface A {} @interface B {} @interface C {} @interface D {} class Cell<T> {} // (This part is actually for the parser, not the framework; it should // be moved to the JSR 308 compiler test suite eventually.) void test() { Object z = new @A String [] { }; // 308 only: Cell<@D Object @C [] @B [] @A []> o1; // w/new: Object o2a = new @D Object @C [] @B [] @A [] {}; Object o2b = new @D Object @C [1] @B [2] @A [3]; // w/175: @D Object @C [] @B [] @A [] o3; // Assignments: @Interned String[] s = null; String @Interned [] t = null; s[0] = null; t[0] = null; (new @Interned String[1])[0] = null; (new String @Interned [1])[0] = null; (new @Interned String[] { "foo" })[0] = null; (new String @Interned [] { "foo" })[0] = null; } void test2() { Object[][] objA1 = new Object[][] {}; Object[][] objA2 = new Object[1][2]; Object[][] objA3 = new Object[1][]; Object[] @Odd [] objB1 = new Object[] @Odd [] {}; Object[] @Odd [] objB2 = new Object[1] @Odd [2]; Object[] @Odd [] objB3 = new Object[1] @Odd []; Object @Odd [][] objC1 = new Object @Odd [][] {}; Object @Odd [][] objC2 = new Object @Odd [1][2]; Object @Odd [][] objC3 = new Object @Odd [1][]; @Odd Object[][] objD1 = new @Odd Object[][] {}; @Odd Object[][] objD2 = new @Odd Object[1][2]; @Odd Object[][] objD3 = new @Odd Object[1][]; Object @Odd [] @Odd [] objE1 = new Object @Odd [] @Odd [] {}; Object @Odd [] @Odd [] objE2 = new Object @Odd [1] @Odd [2]; Object @Odd [] @Odd [] objE3 = new Object @Odd [1] @Odd []; @Odd Object[] @Odd [] objF1 = new @Odd Object[] @Odd [] {}; @Odd Object[] @Odd [] objF2 = new @Odd Object[1] @Odd [2]; @Odd Object[] @Odd [] objF3 = new @Odd Object[1] @Odd []; @Odd Object @Odd [][] objG1 = new @Odd Object @Odd [][] {}; @Odd Object @Odd [][] objG2 = new @Odd Object @Odd [1][2]; @Odd Object @Odd [][] objG3 = new @Odd Object @Odd [1][]; @Odd Object @Odd [] @Odd [] objH1 = new @Odd Object @Odd [] @Odd [] {}; @Odd Object @Odd [] @Odd [] objH2 = new @Odd Object @Odd [1] @Odd [2]; @Odd Object @Odd [] @Odd [] objH3 = new @Odd Object @Odd [1] @Odd []; } void test3() { @Odd Object o1 = new @Odd Object @Odd [] @Odd [] {}; //:: (assignment.type.incompatible) @Odd Object o2 = new @Odd Object [] @Odd [] {}; // ERROR @Odd Object @Odd [] o3 = (new @Odd Object [] @Odd [] {})[0]; //:: (assignment.type.incompatible) @Odd Object @Odd [] o4 = (new Object @Odd [][] {})[0]; // ERROR //:: (assignment.type.incompatible) @Odd Object @Odd [] o5 = (new @Odd Object[][] {})[0]; // ERROR Object @Odd [] o6 = (new Object [] @Odd [] {})[0]; @Odd Object[] o7 = (new @Odd Object[][] {})[0]; @Odd Object o8 = (new @Odd Object[][] {})[0][0]; } void test4() { @Odd Object @Odd [] @Odd [] o1 = new @Odd Object @Odd [] @Odd [] { }; @Odd Object @Odd [] @Odd [] @Odd [] o2 = new @Odd Object @Odd [1] @Odd [2] @Odd [3]; @Odd Object @Odd [] @Odd [] o3 = new @Odd Object @Odd [1] @Odd [2] @Odd []; @Odd Object @Odd [] @Odd [] o4 = new @Odd Object @Odd [1] @Odd [] @Odd []; } void testInitializers() { // @Odd String [] ara1 = { null, null }; @Odd String [] ara2 = new @Odd String [] { null, null }; // //:: (assignment.type.incompatible) // @Odd String [] arb1 = { null, "m" }; //:: (type.incompatible) @Odd String [] arb2 = new @Odd String [] { null, "m" }; } }