Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 417923 | Differences between
and this patch

Collapse All | Expand All

(-)a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java (-3 / +3 lines)
Lines 1657-1670 Link Here
1657
		Expression expression = fragment.getInitializer();
1657
		Expression expression = fragment.getInitializer();
1658
		assertTrue(expression instanceof LambdaExpression);
1658
		assertTrue(expression instanceof LambdaExpression);
1659
		LambdaExpression lambdaExpression = (LambdaExpression)expression;
1659
		LambdaExpression lambdaExpression = (LambdaExpression)expression;
1660
		assertEquals("(int [] ia) -> {\n  return ia.clone();\n}\n", lambdaExpression.toString());
1660
		assertEquals("(int[] ia) -> {\n  return ia.clone();\n}\n", lambdaExpression.toString());
1661
		IMethodBinding binding = lambdaExpression.resolveMethodBinding();
1661
		IMethodBinding binding = lambdaExpression.resolveMethodBinding();
1662
		assertEquals("private static java.lang.Object lambda$0(int[]) ", binding.toString());
1662
		assertEquals("private static java.lang.Object lambda$0(int[]) ", binding.toString());
1663
		assertTrue(lambdaExpression.parameters().size() == 1);
1663
		assertTrue(lambdaExpression.parameters().size() == 1);
1664
		VariableDeclaration variableDeclaration = (VariableDeclaration) lambdaExpression.parameters().get(0);
1664
		VariableDeclaration variableDeclaration = (VariableDeclaration) lambdaExpression.parameters().get(0);
1665
		assertTrue(variableDeclaration instanceof SingleVariableDeclaration);
1665
		assertTrue(variableDeclaration instanceof SingleVariableDeclaration);
1666
		SingleVariableDeclaration singleVariableDeclaration = (SingleVariableDeclaration)variableDeclaration;
1666
		SingleVariableDeclaration singleVariableDeclaration = (SingleVariableDeclaration)variableDeclaration;
1667
		assertEquals("int [] ia", singleVariableDeclaration.toString());		
1667
		assertEquals("int[] ia", singleVariableDeclaration.toString());
1668
	}
1668
	}
1669
1669
1670
	/**
1670
	/**
Lines 3342-3348 Link Here
3342
		assertEquals("Incorrect no of fragments", 1, fragments.size());
3342
		assertEquals("Incorrect no of fragments", 1, fragments.size());
3343
		VariableDeclarationFragment fragment = (VariableDeclarationFragment) fragments.get(0);
3343
		VariableDeclarationFragment fragment = (VariableDeclarationFragment) fragments.get(0);
3344
		assertEquals("Unexpected type", fragment.resolveBinding().getType().toString(), "String @Marker{ value = (String)\"Extended\"} [] @Marker{ value = (String)\"i0\"} @Marker2 [] [] @Marker{ value = (String)\"i1\"} []");
3344
		assertEquals("Unexpected type", fragment.resolveBinding().getType().toString(), "String @Marker{ value = (String)\"Extended\"} [] @Marker{ value = (String)\"i0\"} @Marker2 [] [] @Marker{ value = (String)\"i1\"} []");
3345
		assertEquals("Unexpected type", field.getType().toString(), "String @Marker(\"i0\") @Marker2 [] [] @Marker(\"i1\") []");
3345
		assertEquals("Unexpected type", "String @Marker(\"i0\") @Marker2 [][] @Marker(\"i1\") []", field.getType().toString());
3346
	}
3346
	}
3347
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=417669
3347
	// https://bugs.eclipse.org/bugs/show_bug.cgi?id=417669
3348
	public void testBug417669() throws JavaModelException {
3348
	public void testBug417669() throws JavaModelException {
(-)a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/TypeAnnotationsConverterTest.java (-8 / +8 lines)
Lines 162-168 Link Here
162
				"class Z<Q> {\n" + 
162
				"class Z<Q> {\n" + 
163
				"    }\n" + 
163
				"    }\n" + 
164
				"  }\n" + 
164
				"  }\n" + 
165
				"  Object o=(@Marker X<@Marker String>.@Marker Y<@Marker Integer>.@Marker Z<@Marker Object> @Marker [] [] @Marker [] [])null;\n" + 
165
				"  Object o=(@Marker X<@Marker String>.@Marker Y<@Marker Integer>.@Marker Z<@Marker Object> @Marker [][] @Marker [][])null;\n" + 
166
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
166
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
167
				"}\n";
167
				"}\n";
168
		assertASTNodeEquals(expectedOutput, node);
168
		assertASTNodeEquals(expectedOutput, node);
Lines 191-197 Link Here
191
				"class Z<Q> {\n" + 
191
				"class Z<Q> {\n" + 
192
				"    }\n" + 
192
				"    }\n" + 
193
				"  }\n" + 
193
				"  }\n" + 
194
				"  Object o=(@Marker X<@Marker String>.@Marker Y<@Marker Integer>.@Marker Z<@Marker Object> [] @Marker [] [] @Marker [])null;\n" + 
194
				"  Object o=(@Marker X<@Marker String>.@Marker Y<@Marker Integer>.@Marker Z<@Marker Object>[] @Marker [][] @Marker [])null;\n" + 
195
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
195
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
196
				"}\n";
196
				"}\n";
197
		assertASTNodeEquals(expectedOutput, node);
197
		assertASTNodeEquals(expectedOutput, node);
Lines 204-210 Link Here
204
			"        class Z<Q> {\n" +
204
			"        class Z<Q> {\n" +
205
		    "        }\n" +
205
		    "        }\n" +
206
			"    }\n" +
206
			"    }\n" +
207
			"    int [] [] [] [] o = (@One int [] @Two [] [] @Three []) null;\n" +
207
			"    int[][][][] o = (@One int[] @Two [][] @Three []) null;\n" +
208
			
208
			
209
			"    @java.lang.annotation.Target (java.lang.annotation.ElementType.TYPE_USE)\n" +
209
			"    @java.lang.annotation.Target (java.lang.annotation.ElementType.TYPE_USE)\n" +
210
			"    @interface Marker {\n" +
210
			"    @interface Marker {\n" +
Lines 220-226 Link Here
220
				"class Z<Q> {\n" + 
220
				"class Z<Q> {\n" + 
221
				"    }\n" + 
221
				"    }\n" + 
222
				"  }\n" + 
222
				"  }\n" + 
223
				"  int [] [] [] [] o=(@One int [] @Two [] [] @Three [])null;\n" + 
223
				"  int[][][][] o=(@One int[] @Two [][] @Three [])null;\n" + 
224
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
224
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
225
				"}\n";
225
				"}\n";
226
		assertASTNodeEquals(expectedOutput, node);
226
		assertASTNodeEquals(expectedOutput, node);
Lines 233-239 Link Here
233
			"        class Z<Q> {\n" +
233
			"        class Z<Q> {\n" +
234
		    "        }\n" +
234
		    "        }\n" +
235
			"    }\n" +
235
			"    }\n" +
236
			"    String [] [] [] [] o = (@One String [] @Two [] [] @Three []) null;\n" +
236
			"    String [][][][] o = (@One String[]@Two [][]@Three []) null;\n" +
237
			
237
			
238
			"    @java.lang.annotation.Target (java.lang.annotation.ElementType.TYPE_USE)\n" +
238
			"    @java.lang.annotation.Target (java.lang.annotation.ElementType.TYPE_USE)\n" +
239
			"    @interface Marker {\n" +
239
			"    @interface Marker {\n" +
Lines 249-255 Link Here
249
				"class Z<Q> {\n" + 
249
				"class Z<Q> {\n" + 
250
				"    }\n" + 
250
				"    }\n" + 
251
				"  }\n" + 
251
				"  }\n" + 
252
				"  String [] [] [] [] o=(@One String [] @Two [] [] @Three [])null;\n" + 
252
				"  String[][][][] o=(@One String[] @Two [][] @Three [])null;\n" + 
253
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
253
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
254
				"}\n";
254
				"}\n";
255
		assertASTNodeEquals(expectedOutput, node);
255
		assertASTNodeEquals(expectedOutput, node);
Lines 262-268 Link Here
262
			"        class Z<Q> {\n" +
262
			"        class Z<Q> {\n" +
263
		    "        }\n" +
263
		    "        }\n" +
264
			"    }\n" +
264
			"    }\n" +
265
			"    Object o = (@One X<String> [] @Two [] [] @Three []) null;\n" +
265
			"    Object o = (@One X<String> [] @Two [][]@Three []) null;\n" +
266
			
266
			
267
			"    @java.lang.annotation.Target (java.lang.annotation.ElementType.TYPE_USE)\n" +
267
			"    @java.lang.annotation.Target (java.lang.annotation.ElementType.TYPE_USE)\n" +
268
			"    @interface Marker {\n" +
268
			"    @interface Marker {\n" +
Lines 278-284 Link Here
278
				"class Z<Q> {\n" + 
278
				"class Z<Q> {\n" + 
279
				"    }\n" + 
279
				"    }\n" + 
280
				"  }\n" + 
280
				"  }\n" + 
281
				"  Object o=(@One X<String> [] @Two [] [] @Three [])null;\n" + 
281
				"  Object o=(@One X<String>[] @Two [][] @Three [])null;\n" + 
282
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
282
				"  @java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) @interface Marker {}\n" + 
283
				"}\n";
283
				"}\n";
284
		assertASTNodeEquals(expectedOutput, node);
284
		assertASTNodeEquals(expectedOutput, node);
(-)a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingMethodDeclTest.java (-3 / +3 lines)
Lines 3248-3256 Link Here
3248
		buf.append("package test1;\n");
3248
		buf.append("package test1;\n");
3249
		buf.append("import java.lang.annotation.ElementType;\n");
3249
		buf.append("import java.lang.annotation.ElementType;\n");
3250
		buf.append("public abstract class E {\n");
3250
		buf.append("public abstract class E {\n");
3251
		buf.append("    public Object foo1()[] @Annot1 [] @Annot2 [] { return null; }\n");
3251
		buf.append("    public Object foo1()[]@Annot1 []@Annot2 [] { return null; }\n");
3252
		buf.append("    public Object foo2()[] @Annot1 [] throws ArrayStoreException { return null; }\n");
3252
		buf.append("    public Object foo2()[]@Annot1 [] throws ArrayStoreException { return null; }\n");
3253
		buf.append("    public Object foo3() @Annot1 [] @Annot1 @Annot2 [] @Annot2 [] { return null; }\n");
3253
		buf.append("    public Object foo3() @Annot1 [] @Annot1 @Annot2 []@Annot2 [] { return null; }\n");
3254
		buf.append("    public Object foo4()@Annot2 @Annot1 [] @Annot2 @Annot1 [] throws IllegalArgumentException { return null; }\n");
3254
		buf.append("    public Object foo4()@Annot2 @Annot1 [] @Annot2 @Annot1 [] throws IllegalArgumentException { return null; }\n");
3255
		buf.append("    public Object foo5()  []   @Annot2 @Annot1 [] { return null; }\n");
3255
		buf.append("    public Object foo5()  []   @Annot2 @Annot1 [] { return null; }\n");
3256
		buf.append("    public Object foo6(int i)   []  [] throws IllegalArgumentException { return null; }\n");
3256
		buf.append("    public Object foo6(int i)   []  [] throws IllegalArgumentException { return null; }\n");
(-)a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingStatementsTest.java (-4 / +103 lines)
Lines 6039-6045 Link Here
6039
		buf.append("import java.lang.annotation.ElementType;\n");
6039
		buf.append("import java.lang.annotation.ElementType;\n");
6040
		buf.append("public class E {\n");
6040
		buf.append("public class E {\n");
6041
		buf.append("    public void foo() {\n");
6041
		buf.append("    public void foo() {\n");
6042
		buf.append("    	int [] i [] @Annot1 @Annot2 [] @Annot1 @Annot3 [] = new int @Annot1 @Annot2  [2] @Annot2 @Annot3 [size()] @Annot2 @Annot1 [][]@Annot3 @Annot2 @Annot1 [];\n");
6042
		buf.append("    	int [] i []@Annot1 @Annot2 [] @Annot1 @Annot3 [] = new int @Annot1 @Annot2 [2] @Annot2 @Annot3 [size()] @Annot2 @Annot1 [][] @Annot3 @Annot2 @Annot1 [];\n");
6043
		buf.append("    	int [] j [][] = new int @Annot2 [2] @Annot2 [] @Annot1 [], k [][] = new int [2] [10] [size()];\n");
6043
		buf.append("    	int [] j [][] = new int @Annot2 [2] @Annot2 [] @Annot1 [], k [][] = new int [2] [10] [size()];\n");
6044
		buf.append("    }\n");
6044
		buf.append("    }\n");
6045
		buf.append("    public int size() { return 2; }\n");
6045
		buf.append("    public int size() { return 2; }\n");
Lines 6059-6065 Link Here
6059
		buf.append("import java.lang.annotation.ElementType;\n");
6059
		buf.append("import java.lang.annotation.ElementType;\n");
6060
		buf.append("public class E {\n");
6060
		buf.append("public class E {\n");
6061
		buf.append("    public void foo() {\n");
6061
		buf.append("    public void foo() {\n");
6062
		buf.append("    	int [] i [][] = new int @Annot1 @Annot2  [2] @Annot2 @Annot3 [size(new int[][]{})] [];\n");
6062
		buf.append("    	int [] i [][] = new int @Annot1 @Annot2  [2]@Annot2 @Annot3[size(new int[][]{})] [];\n");
6063
		buf.append("    	int [] j [][] = new int @Annot1 @Annot2 [2] @Annot2 @Annot3 [size(new int[]{})] @Annot1 @Annot3 [], k [][] = new int @Annot1 @Annot2 [2] @Annot2 @Annot3 [10] @Annot1 @Annot3 [size(new int[][]{})];\n");
6063
		buf.append("    	int [] j [][] = new int @Annot1 @Annot2 [2] @Annot2 @Annot3 [size(new int[]{})] @Annot1 @Annot3 [], k [][] = new int @Annot1 @Annot2 [2] @Annot2 @Annot3 [10] @Annot1 @Annot3 [size(new int[][]{})];\n");
6064
		buf.append("    }\n");
6064
		buf.append("    }\n");
6065
		buf.append("    public int size(Object obj) { return 2; }\n");
6065
		buf.append("    public int size(Object obj) { return 2; }\n");
Lines 6094-6100 Link Here
6094
			ListRewrite listRewrite= rewrite.getListRewrite(dim, Dimension.ANNOTATIONS_PROPERTY);
6094
			ListRewrite listRewrite= rewrite.getListRewrite(dim, Dimension.ANNOTATIONS_PROPERTY);
6095
			listRewrite.remove((ASTNode)dim.annotations().get(0), null);
6095
			listRewrite.remove((ASTNode)dim.annotations().get(0), null);
6096
			listRewrite.remove((ASTNode)dim.annotations().get(1), null);
6096
			listRewrite.remove((ASTNode)dim.annotations().get(1), null);
6097
			rewrite.set(creation, ArrayCreation.TYPE_PROPERTY, arrayType, null);
6098
		}
6097
		}
6099
		{
6098
		{
6100
			statement = (VariableDeclarationStatement) statements.get(1);
6099
			statement = (VariableDeclarationStatement) statements.get(1);
Lines 6120-6126 Link Here
6120
		buf.append("import java.lang.annotation.ElementType;\n");
6119
		buf.append("import java.lang.annotation.ElementType;\n");
6121
		buf.append("public class E {\n");
6120
		buf.append("public class E {\n");
6122
		buf.append("    public void foo() {\n");
6121
		buf.append("    public void foo() {\n");
6123
		buf.append("    	int [] i [][] = new int @Annot1 @Annot2  [2]  [size(new int[][]{})] [];\n");
6122
		buf.append("    	int [] i [][] = new int @Annot1 @Annot2  [2][size(new int[][]{})] [];\n");
6124
		buf.append("    	int [] j [][] = new int @Annot1 @Annot2 [2] @Annot2 @Annot3 [size(new int[]{})], k [][] = new int @Annot1 @Annot2 [2] @Annot2 @Annot3 [10];\n");
6123
		buf.append("    	int [] j [][] = new int @Annot1 @Annot2 [2] @Annot2 @Annot3 [size(new int[]{})], k [][] = new int @Annot1 @Annot2 [2] @Annot2 @Annot3 [10];\n");
6125
		buf.append("    }\n");
6124
		buf.append("    }\n");
6126
		buf.append("    public int size(Object obj) { return 2; }\n");
6125
		buf.append("    public int size(Object obj) { return 2; }\n");
Lines 6155-6160 Link Here
6155
		edit.apply(doc);
6154
		edit.apply(doc);
6156
		assertTrue("Incorrect Formatting", doc.get().equals(formattedString));
6155
		assertTrue("Incorrect Formatting", doc.get().equals(formattedString));
6157
	}
6156
	}
6157
	public void testBug419723a_since_8() throws Exception {
6158
		IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null);
6159
		StringBuffer buf= new StringBuffer();
6160
		buf.append("package test1;\n");
6161
		buf.append("import java.lang.annotation.ElementType;\n");
6162
		buf.append("public class E {\n");
6163
		buf.append("    public void foo() {\n");
6164
		buf.append("    	int i [][];\n");
6165
		buf.append("    }\n");
6166
		buf.append("}\n");
6167
		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
6168
6169
		CompilationUnit astRoot= createAST(cu);
6170
		AST ast= astRoot.getAST();
6171
		ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST());
6172
6173
		// Get while statement block
6174
		TypeDeclaration typeDecl = (TypeDeclaration) astRoot.types().get(0);
6175
		MethodDeclaration methodDecl= typeDecl.getMethods()[0];
6176
		Block block= methodDecl.getBody();
6177
		List statements= block.statements();
6178
6179
		VariableDeclarationStatement statement = (VariableDeclarationStatement) statements.get(0);
6180
		List fragments = statement.fragments();
6181
		VariableDeclarationFragment fragment = (VariableDeclarationFragment) fragments.get(0);
6182
6183
		{
6184
			// Add new dimension with and without annotations
6185
6186
			ListRewrite listRewrite= rewrite.getListRewrite(fragment, VariableDeclarationFragment.EXTRA_DIMENSIONS2_PROPERTY);
6187
			Dimension dim = ast.newDimension();
6188
			listRewrite.insertFirst(dim, null);
6189
			
6190
		}
6191
		// Get new code
6192
		String preview= evaluateRewrite(cu, rewrite);
6193
6194
		buf= new StringBuffer();
6195
		buf.append("package test1;\n");
6196
		buf.append("import java.lang.annotation.ElementType;\n");
6197
		buf.append("public class E {\n");
6198
		buf.append("    public void foo() {\n");
6199
		buf.append("    	int i [][][];\n");
6200
		buf.append("    }\n");
6201
		buf.append("}\n");
6202
		assertEqualString(preview, buf.toString());
6203
	}
6204
	public void testBug419723b_since_8() throws Exception {
6205
		IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null);
6206
		StringBuffer buf= new StringBuffer();
6207
		buf.append("package test1;\n");
6208
		buf.append("import java.lang.annotation.ElementType;\n");
6209
		buf.append("public class E {\n");
6210
		buf.append("    public void foo() {\n");
6211
		buf.append("    	int [] i [][] = new int @Annot1 []@Annot1 [] [];\n");
6212
		buf.append("    }\n");
6213
		buf.append("@java.lang.annotation.Target(value= {ElementType.TYPE_USE})\n");
6214
		buf.append("@interface Annot1 {}\n");
6215
		ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
6216
6217
		CompilationUnit astRoot= createAST(cu);
6218
		ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST());
6219
6220
		TypeDeclaration typeDecl = (TypeDeclaration) astRoot.types().get(0);
6221
		MethodDeclaration methodDecl= typeDecl.getMethods()[0];
6222
		Block block= methodDecl.getBody();
6223
		List statements= block.statements();
6224
6225
		VariableDeclarationStatement statement = (VariableDeclarationStatement) statements.get(0);
6226
		List fragments = statement.fragments();
6227
		VariableDeclarationFragment fragment = (VariableDeclarationFragment) fragments.get(0);
6228
		Type type = statement.getType();
6229
6230
		{
6231
			assertEquals("Incorrect type", ASTNode.ARRAY_TYPE, type.getNodeType());
6232
			ArrayCreation creation = (ArrayCreation) fragment.getInitializer();
6233
6234
			ArrayType arrayType = creation.getType();
6235
			Dimension dim = (Dimension) arrayType.dimensions().get(0);
6236
			ListRewrite listRewrite= rewrite.getListRewrite(dim, Dimension.ANNOTATIONS_PROPERTY);
6237
			listRewrite.remove((ASTNode)dim.annotations().get(0), null);
6238
6239
			dim = (Dimension) arrayType.dimensions().get(1);
6240
			listRewrite= rewrite.getListRewrite(dim, Dimension.ANNOTATIONS_PROPERTY);
6241
			listRewrite.remove((ASTNode)dim.annotations().get(0), null);
6242
		}
6243
		// Get new code
6244
		String preview= evaluateRewrite(cu, rewrite);
6245
6246
		buf= new StringBuffer();
6247
		buf.append("package test1;\n");
6248
		buf.append("import java.lang.annotation.ElementType;\n");
6249
		buf.append("public class E {\n");
6250
		buf.append("    public void foo() {\n");
6251
		buf.append("    	int [] i [][] = new int[][] [];\n");
6252
		buf.append("    }\n");
6253
		buf.append("@java.lang.annotation.Target(value= {ElementType.TYPE_USE})\n");
6254
		buf.append("@interface Annot1 {}\n");
6255
		assertEqualString(preview, buf.toString());
6256
	}
6158
6257
6159
}
6258
}
6160
6259
(-)a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingTypeDeclTest.java (-2 / +2 lines)
Lines 1737-1743 Link Here
1737
		buf.append("import java.lang.annotation.ElementType;\n");
1737
		buf.append("import java.lang.annotation.ElementType;\n");
1738
		buf.append("public class E {\n");
1738
		buf.append("public class E {\n");
1739
		buf.append("    public void foo() {\n");
1739
		buf.append("    public void foo() {\n");
1740
		buf.append("        int i, j, k = 0, x, y [] [] [], z @Annot1 [], zz @Annot2 @Annot2[] = {0, 1};\n");
1740
		buf.append("        int i, j, k = 0, x, y[][][], z @Annot1 [], zz @Annot2 @Annot2[] = {0, 1};\n");
1741
		buf.append("    }\n");
1741
		buf.append("    }\n");
1742
		buf.append("}\n");
1742
		buf.append("}\n");
1743
		buf.append("@java.lang.annotation.Target(value= {ElementType.TYPE_USE})\n");
1743
		buf.append("@java.lang.annotation.Target(value= {ElementType.TYPE_USE})\n");
Lines 1848-1854 Link Here
1848
		buf.append("import java.lang.annotation.ElementType;\n");
1848
		buf.append("import java.lang.annotation.ElementType;\n");
1849
		buf.append("public class E {\n");
1849
		buf.append("public class E {\n");
1850
		buf.append("    public void foo() {\n");
1850
		buf.append("    public void foo() {\n");
1851
		buf.append("        int a @Annot1 @Annot2 [], j = 1, k @Annot1 @Annot2 [], x @Annot1 @Annot2 [] = null, y @Annot1[] @Annot2[], zz @Annot2 @Annot2[] = {0, 1};\n");
1851
		buf.append("        int a @Annot1 @Annot2 [], j = 1, k @Annot1 @Annot2 [], x @Annot1 @Annot2 [] = null, y @Annot1 [] @Annot2 [], zz @Annot2 @Annot2[] = {0, 1};\n");
1852
		buf.append("    }\n");
1852
		buf.append("    }\n");
1853
		buf.append("}\n");
1853
		buf.append("}\n");
1854
		buf.append("@java.lang.annotation.Target(value= {ElementType.TYPE_USE})\n");
1854
		buf.append("@java.lang.annotation.Target(value= {ElementType.TYPE_USE})\n");
(-)a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java (-2 / +4 lines)
Lines 620-627 Link Here
620
	}
620
	}
621
621
622
	public boolean visit(Dimension node) {
622
	public boolean visit(Dimension node) {
623
		this.buffer.append(" ");//$NON-NLS-1$
623
		List annotations = node.annotations();
624
		visitAnnotationsList(node.annotations());
624
		if (annotations.size() > 0)
625
			this.buffer.append(' ');
626
		visitAnnotationsList(annotations);
625
		this.buffer.append("[]"); //$NON-NLS-1$
627
		this.buffer.append("[]"); //$NON-NLS-1$
626
		return false;
628
		return false;
627
	}
629
	}
(-)a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java (-13 / +36 lines)
Lines 1266-1272 Link Here
1266
	}
1266
	}
1267
1267
1268
	protected int rewriteExtraDimensionsInfo(ASTNode node, int pos, ChildListPropertyDescriptor property) {
1268
	protected int rewriteExtraDimensionsInfo(ASTNode node, int pos, ChildListPropertyDescriptor property) {
1269
		return rewriteNodeList(node, property, pos, " ", " "); //$NON-NLS-1$ //$NON-NLS-2$
1269
		return rewriteNodeList(node, property, pos, " ", ""); //$NON-NLS-1$ //$NON-NLS-2$
1270
	}
1270
	}
1271
1271
1272
	private int rewriteExtraDimensions(ASTNode parent, StructuralPropertyDescriptor property, int pos) {
1272
	private int rewriteExtraDimensions(ASTNode parent, StructuralPropertyDescriptor property, int pos) {
Lines 1917-1923 Link Here
1917
		if (!hasChildrenChanges(node)) {
1917
		if (!hasChildrenChanges(node)) {
1918
			return doVisitUnchangedChildren(node);
1918
			return doVisitUnchangedChildren(node);
1919
		}
1919
		}
1920
		rewriteNodeList(node, Dimension.ANNOTATIONS_PROPERTY, node.getStartPosition(), Util.EMPTY_STRING, " "); //$NON-NLS-1$
1920
		rewriteNodeList(node, Dimension.ANNOTATIONS_PROPERTY, node.getStartPosition(), String.valueOf(' '), String.valueOf(' '), String.valueOf(' '));
1921
		return false;
1921
		return false;
1922
	}
1922
	}
1923
1923
Lines 2058-2067 Link Here
2058
		ArrayType arrayType= (ArrayType) getOriginalValue(node, ArrayCreation.TYPE_PROPERTY);
2058
		ArrayType arrayType= (ArrayType) getOriginalValue(node, ArrayCreation.TYPE_PROPERTY);
2059
		ArrayType replacingType= arrayType;
2059
		ArrayType replacingType= arrayType;
2060
		int nOldBrackets= getDimensions(arrayType); // number of total brackets
2060
		int nOldBrackets= getDimensions(arrayType); // number of total brackets
2061
		boolean astLevelGTE8 = node.getAST().apiLevel() >= AST.JLS8;
2062
		boolean typeReplaced = false;
2061
2063
2062
		TextEditGroup editGroup= null;
2064
		TextEditGroup editGroup= null;
2063
		RewriteEvent typeEvent= getEvent(node, ArrayCreation.TYPE_PROPERTY);
2065
		RewriteEvent typeEvent= getEvent(node, ArrayCreation.TYPE_PROPERTY);
2064
		if (typeEvent != null && typeEvent.getChangeKind() == RewriteEvent.REPLACED) { // changed arraytype can have different dimension or type name
2066
		if (typeEvent != null && typeEvent.getChangeKind() == RewriteEvent.REPLACED) { // changed arraytype can have different dimension or type name
2067
			typeReplaced = true;
2065
			replacingType= (ArrayType) typeEvent.getNewValue();
2068
			replacingType= (ArrayType) typeEvent.getNewValue();
2066
			editGroup= getEditGroup(typeEvent);
2069
			editGroup= getEditGroup(typeEvent);
2067
			Type newType= replacingType.getElementType();
2070
			Type newType= replacingType.getElementType();
Lines 2080-2094 Link Here
2080
			RewriteEvent dimEvent= getEvent(node, ArrayCreation.DIMENSIONS_PROPERTY);
2083
			RewriteEvent dimEvent= getEvent(node, ArrayCreation.DIMENSIONS_PROPERTY);
2081
			boolean hasDimensionChanges= (dimEvent != null && dimEvent.getChangeKind() != RewriteEvent.UNCHANGED);
2084
			boolean hasDimensionChanges= (dimEvent != null && dimEvent.getChangeKind() != RewriteEvent.UNCHANGED);
2082
			RewriteEvent[] events= hasDimensionChanges ? dimEvent.getChildren() : null;
2085
			RewriteEvent[] events= hasDimensionChanges ? dimEvent.getChildren() : null;
2083
			boolean astLevelGTE8 = node.getAST().apiLevel() >= AST.JLS8;
2084
			ArrayType currentLevel = astLevelGTE8 ? null : (ArrayType) replacingType.getElementType().getParent();
2086
			ArrayType currentLevel = astLevelGTE8 ? null : (ArrayType) replacingType.getElementType().getParent();
2085
			int replacingTypeDimensions = replacingType.getDimensions();
2087
			int replacingTypeDimensions = replacingType.getDimensions();
2086
			int i=0, dimSize= (events == null) ? 0 : events.length;
2088
			int i=0, dimSize= (events == null) ? 0 : events.length;
2087
			Type elementType= arrayType.getElementType();
2089
			Type elementType= arrayType.getElementType();
2088
			int offset= elementType.getStartPosition() + elementType.getLength();
2090
			int offset= elementType.getStartPosition() + elementType.getLength();
2091
			editGroup = null;
2089
			while(currentLevel != null || astLevelGTE8) {
2092
			while(currentLevel != null || astLevelGTE8) {
2090
				if (i < dimSize) {
2093
				if (i < dimSize) {
2091
					if (astLevelGTE8) rewriteAnnotationsOnDimension(replacingType, i, offset);
2094
					if (astLevelGTE8)
2095
						rewriteAnnotationsOnDimension(arrayType, replacingType, i, offset, typeReplaced, editGroup);
2092
					 offset= getScanner().getTokenEndOffset(TerminalTokens.TokenNameLBRACKET, offset);
2096
					 offset= getScanner().getTokenEndOffset(TerminalTokens.TokenNameLBRACKET, offset);
2093
					if (hasDimensionChanges) {
2097
					if (hasDimensionChanges) {
2094
						RewriteEvent event= events[i];
2098
						RewriteEvent event= events[i];
Lines 2123-2129 Link Here
2123
						offset= retrieveRightBracketEndPosition(offset, 1, true);
2127
						offset= retrieveRightBracketEndPosition(offset, 1, true);
2124
					}
2128
					}
2125
				} else if (i < nOldBrackets) {
2129
				} else if (i < nOldBrackets) {
2126
					if (astLevelGTE8) rewriteAnnotationsOnDimension(replacingType, i, offset);
2130
					if (astLevelGTE8)
2131
						rewriteAnnotationsOnDimension(arrayType, replacingType, i, offset, typeReplaced, editGroup);
2127
					offset= retrieveRightBracketEndPosition(offset, 1, false);
2132
					offset= retrieveRightBracketEndPosition(offset, 1, false);
2128
				} else {
2133
				} else {
2129
					insertAnnotationsOnDimension(replacingType, i, offset, editGroup, astLevelGTE8);
2134
					insertAnnotationsOnDimension(replacingType, i, offset, editGroup, astLevelGTE8);
Lines 2162-2179 Link Here
2162
			List annotations = dim.annotations();
2167
			List annotations = dim.annotations();
2163
			if (annotations != null) {
2168
			if (annotations != null) {
2164
				int size = annotations.size();
2169
				int size = annotations.size();
2165
				for (int j = 0; j < size; j++) {
2170
				if (size > 0) {
2166
					Annotation annotation = (Annotation) annotations.get(j);
2171
					doTextInsert(pos, " ", editGroup); //$NON-NLS-1$
2167
					doTextInsert(pos, annotation.toString() + " ", editGroup); //$NON-NLS-1$
2172
					for (int j = 0; j < size; j++) {
2173
						Annotation annotation = (Annotation) annotations.get(j);
2174
						doTextInsert(pos, annotation.toString() + " ", editGroup); //$NON-NLS-1$
2175
					}
2168
				}
2176
				}
2169
				
2170
			}
2177
			}
2171
		}
2178
		}
2172
	}
2179
	}
2173
2180
2174
	private void rewriteAnnotationsOnDimension(ArrayType replacingType, int index, int pos) {
2181
	private void rewriteAnnotationsOnDimension(ArrayType oldArrayType, ArrayType replacingType, int index, int pos, boolean typeReplaced, TextEditGroup editGroup) throws CoreException {
2175
		Dimension dim = (Dimension) replacingType.dimensions().get(index);
2182
		if (typeReplaced) {
2176
		rewriteTypeAnnotations(dim, Dimension.ANNOTATIONS_PROPERTY, pos);
2183
			List dimensions = oldArrayType.dimensions();
2184
			Dimension oldDim = index < dimensions.size() ? (Dimension) dimensions.get(index) : null;
2185
			if (oldDim != null) {
2186
				List annotations = oldDim.annotations();
2187
				int size = annotations.size();
2188
				if (size > 0) {
2189
					Annotation annotation = (Annotation) annotations.get(size - 1);
2190
					int end = annotation.getStartPosition() + annotation.getLength();
2191
					end = getScanner().getTokenEndOffset(TerminalTokens.TokenNameLBRACKET, end) - 1;
2192
					doTextRemove(pos, end - oldDim.getStartPosition() + 1, editGroup);
2193
				}
2194
			}
2195
			insertAnnotationsOnDimension(replacingType, index, pos, editGroup, true);
2196
		} else {
2197
			Dimension dim = (Dimension) replacingType.dimensions().get(index);
2198
			rewriteNodeList(dim, Dimension.ANNOTATIONS_PROPERTY, pos, String.valueOf(' '), String.valueOf(' '), String.valueOf(' '));
2199
		}
2177
	}
2200
	}
2178
2201
2179
	/**
2202
	/**
Lines 2254-2260 Link Here
2254
			rewriteRequiredNode(node, INTERNAL_ARRAY_COMPONENT_TYPE_PROPERTY);
2277
			rewriteRequiredNode(node, INTERNAL_ARRAY_COMPONENT_TYPE_PROPERTY);
2255
		} else {
2278
		} else {
2256
			int pos = rewriteRequiredNode(node, ArrayType.ELEMENT_TYPE_PROPERTY);
2279
			int pos = rewriteRequiredNode(node, ArrayType.ELEMENT_TYPE_PROPERTY);
2257
			rewriteNodeList(node, ArrayType.DIMENSIONS_PROPERTY, pos, Util.EMPTY_STRING, " "); //$NON-NLS-1$
2280
			rewriteNodeList(node, ArrayType.DIMENSIONS_PROPERTY, pos, Util.EMPTY_STRING, ""); //$NON-NLS-1$
2258
		}
2281
		}
2259
		return false;
2282
		return false;
2260
	}
2283
	}
(-)a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteFlattener.java (-1 / +1 lines)
Lines 305-311 Link Here
305
			this.result.append("[]"); //$NON-NLS-1$
305
			this.result.append("[]"); //$NON-NLS-1$
306
		} else {
306
		} else {
307
			getChildNode(node, ArrayType.ELEMENT_TYPE_PROPERTY).accept(this);
307
			getChildNode(node, ArrayType.ELEMENT_TYPE_PROPERTY).accept(this);
308
			visitList(node, ArrayType.DIMENSIONS_PROPERTY, String.valueOf(' '), Util.EMPTY_STRING, String.valueOf(' '));
308
			visitList(node, ArrayType.DIMENSIONS_PROPERTY, Util.EMPTY_STRING, Util.EMPTY_STRING, Util.EMPTY_STRING);
309
		}
309
		}
310
		return false;
310
		return false;
311
	}
311
	}

Return to bug 417923