View | Details | Raw Unified | Return to bug 139931 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jdt/core/tests/compiler/regression/VarargsTest.java (-7 / +49 lines)
Lines 1402-1410 Link Here
1402
				"    }\n" + 
1402
				"    }\n" + 
1403
				"}\n",
1403
				"}\n",
1404
			},
1404
			},
1405
			// ensure no varargs warning
1405
			// check no varargs warning
1406
			"----------\n" + 
1406
			"----------\n" + 
1407
			"1. ERROR in X.java (at line 16)\n" + 
1407
			"1. WARNING in X.java (at line 13)\n" + 
1408
			"	varargs((Serializable[])new Object[] {1, 2}); //warns \"Varargs argument Object[] \n" + 
1409
			"	        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
1410
			"Unnecessary cast from Object[] to Serializable[]\n" + 
1411
			"----------\n" + 
1412
			"2. ERROR in X.java (at line 16)\n" + 
1408
			"	Zork z;\n" + 
1413
			"	Zork z;\n" + 
1409
			"	^^^^\n" + 
1414
			"	^^^^\n" + 
1410
			"Zork cannot be resolved to a type\n" + 
1415
			"Zork cannot be resolved to a type\n" + 
Lines 1547-1553 Link Here
1547
				"}\n",
1552
				"}\n",
1548
			},
1553
			},
1549
			"----------\n" + 
1554
			"----------\n" + 
1550
			"1. ERROR in X.java (at line 15)\n" + 
1555
			"1. WARNING in X.java (at line 10)\n" + 
1556
			"	varargs((Serializable) new Object[] {1, 2});\n" + 
1557
			"	        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
1558
			"Unnecessary cast from Object[] to Serializable\n" + 
1559
			"----------\n" + 
1560
			"2. ERROR in X.java (at line 15)\n" + 
1551
			"	Zork z;\n" + 
1561
			"	Zork z;\n" + 
1552
			"	^^^^\n" + 
1562
			"	^^^^\n" + 
1553
			"Zork cannot be resolved to a type\n" + 
1563
			"Zork cannot be resolved to a type\n" + 
Lines 1603-1615 Link Here
1603
					"}\n",
1613
					"}\n",
1604
				},
1614
				},
1605
				"----------\n" + 
1615
				"----------\n" + 
1606
				"1. WARNING in X.java (at line 10)\r\n" + 
1616
				"1. WARNING in X.java (at line 10)\n" + 
1607
				"	array((Serializable[]) new Serializable[] {3, 4}); //warns about unnecessary cast\r\n" + 
1617
				"	array((Serializable[]) new Serializable[] {3, 4}); //warns about unnecessary cast\n" + 
1608
				"	      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
1618
				"	      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
1609
				"Unnecessary cast from Serializable[] to Serializable[]\n" + 
1619
				"Unnecessary cast from Serializable[] to Serializable[]\n" + 
1610
				"----------\n" + 
1620
				"----------\n" + 
1611
				"2. ERROR in X.java (at line 14)\r\n" + 
1621
				"2. WARNING in X.java (at line 13)\n" + 
1612
				"	Zork z;\r\n" + 
1622
				"	array((Serializable[]) new Object[] {1, 2}); // CCE at run time\n" + 
1623
				"	      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + 
1624
				"Unnecessary cast from Object[] to Serializable[]\n" + 
1625
				"----------\n" + 
1626
				"3. ERROR in X.java (at line 14)\n" + 
1627
				"	Zork z;\n" + 
1613
				"	^^^^\n" + 
1628
				"	^^^^\n" + 
1614
				"Zork cannot be resolved to a type\n" + 
1629
				"Zork cannot be resolved to a type\n" + 
1615
				"----------\n");
1630
				"----------\n");
Lines 1640-1643 Link Here
1640
				"Zork cannot be resolved to a type\n" + 
1655
				"Zork cannot be resolved to a type\n" + 
1641
				"----------\n");
1656
				"----------\n");
1642
	}	
1657
	}	
1658
	//https://bugs.eclipse.org/bugs/show_bug.cgi?id=133931
1659
	public void test047() {
1660
		this.runNegativeTest(
1661
				new String[] {
1662
					"X.java",
1663
					"public class X {\n" + 
1664
					"        Y<String> [] foo() {\n" + 
1665
					"                return null;\n" + 
1666
					"        }\n" + 
1667
					"        void bar(Y... y) {\n" + 
1668
					"        }\n" + 
1669
					"        void fred() {\n" + 
1670
					"                bar(foo());\n" + 
1671
					"                bar((Y[])foo());\n" + 
1672
					"                Zork z;\n" +
1673
					"        }\n" + 
1674
					"}\n" + 
1675
					"class Y<E> {\n" + 
1676
					"}\n",
1677
				},
1678
				"----------\n" + 
1679
				"1. ERROR in X.java (at line 10)\n" + 
1680
				"	Zork z;\n" + 
1681
				"	^^^^\n" + 
1682
				"Zork cannot be resolved to a type\n" + 
1683
				"----------\n");
1684
	}		
1643
}
1685
}
(-)compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java (-1 / +1 lines)
Lines 253-259 Link Here
253
						if (varargsType.dimensions < dimensions) {
253
						if (varargsType.dimensions < dimensions) {
254
							scope.problemReporter().varargsArgumentNeedCast(method, lastArgType, invocationSite);
254
							scope.problemReporter().varargsArgumentNeedCast(method, lastArgType, invocationSite);
255
						} else if (varargsType.dimensions == dimensions 
255
						} else if (varargsType.dimensions == dimensions 
256
										&& varargsType.leafComponentType != lastArgType.leafComponentType()
256
										&& varargsType.leafComponentType.erasure() != lastArgType.leafComponentType().erasure()
257
										&& lastArgType.isCompatibleWith(varargsType)) {
257
										&& lastArgType.isCompatibleWith(varargsType)) {
258
							scope.problemReporter().varargsArgumentNeedCast(method, lastArgType, invocationSite);
258
							scope.problemReporter().varargsArgumentNeedCast(method, lastArgType, invocationSite);
259
						}
259
						}
(-)compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java (-1 / +11 lines)
Lines 253-260 Link Here
253
						ArrayBinding varargsType = (ArrayBinding) binding.parameters[varargsIndex];
253
						ArrayBinding varargsType = (ArrayBinding) binding.parameters[varargsIndex];
254
						TypeBinding lastArgType = alternateArgumentTypes[varargsIndex];
254
						TypeBinding lastArgType = alternateArgumentTypes[varargsIndex];
255
						// originalType may be compatible already, but cast mandated to clarify between varargs/non-varargs call
255
						// originalType may be compatible already, but cast mandated to clarify between varargs/non-varargs call
256
						if (lastArgType.isCompatibleWith(varargsType.elementsType()))
256
						int dimensions = lastArgType.dimensions();
257
						if (varargsType.dimensions < dimensions) {
257
							return;
258
							return;
259
						} else if (varargsType.dimensions == dimensions) {
260
							if (lastArgType.isCompatibleWith(varargsType.elementsType())
261
									&& lastArgType.isCompatibleWith(varargsType)) {
262
								return;
263
							}
264
							if (varargsType.leafComponentType.erasure() == lastArgType.leafComponentType().erasure()) {
265
								return;
266
							}
267
						}						
258
				   }
268
				   }
259
				}
269
				}
260
				for (int i = 0; i < argumentLength; i++) {
270
				for (int i = 0; i < argumentLength; i++) {

Return to bug 139931