Skip to content

Commit 0f77c74

Browse files
committed
GROOVY-9985, GROOVY-10111
1 parent 236d191 commit 0f77c74

File tree

4 files changed

+63
-6
lines changed

4 files changed

+63
-6
lines changed

base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/TypeCheckedTests.java

+57
Original file line numberDiff line numberDiff line change
@@ -2186,6 +2186,24 @@ public void testTypeChecked9985() {
21862186

21872187
@Test
21882188
public void testTypeChecked9985a() {
2189+
assumeTrue(isParrotParser());
2190+
2191+
//@formatter:off
2192+
String[] sources = {
2193+
"Main.groovy",
2194+
"@groovy.transform.TypeChecked\n" +
2195+
"void test() {\n" +
2196+
" new char[] {'a','b','c'}\n" +
2197+
"}\n" +
2198+
"test()\n",
2199+
};
2200+
//@formatter:on
2201+
2202+
runConformTest(sources);
2203+
}
2204+
2205+
@Test
2206+
public void testTypeChecked9985b() {
21892207
//@formatter:off
21902208
String[] sources = {
21912209
"Main.groovy",
@@ -2890,4 +2908,43 @@ public void testTypeChecked10098() {
28902908

28912909
runConformTest(sources, "42");
28922910
}
2911+
2912+
@Test
2913+
public void testTypeChecked10111() {
2914+
assumeTrue(isParrotParser());
2915+
2916+
//@formatter:off
2917+
String[] sources = {
2918+
"Main.groovy",
2919+
"class C<X, Y> { }\n" +
2920+
"@groovy.transform.TypeChecked\n" +
2921+
"def <X extends C<Number, String>> X[] m() {\n" +
2922+
" new X[]{ new C<Number, String>() }\n" +
2923+
"}\n",
2924+
};
2925+
//@formatter:on
2926+
2927+
runConformTest(sources);
2928+
}
2929+
2930+
@Test
2931+
public void testTypeChecked10111a() {
2932+
assumeTrue(isParrotParser());
2933+
2934+
//@formatter:off
2935+
String[] sources = {
2936+
"Main.groovy",
2937+
"class C<X, Y> { }\n" +
2938+
"@groovy.transform.TypeChecked\n" +
2939+
"def String[] test() {\n" +
2940+
" new String[]{ 1, (long)2, (short)3 }\n" +
2941+
"}\n" +
2942+
"def result = test()\n" +
2943+
"assert result.toString == '[1, 2, 3]'\n" +
2944+
"assert result.every { it.class == String }\n",
2945+
};
2946+
//@formatter:on
2947+
2948+
runConformTest(sources);
2949+
}
28932950
}

base/org.codehaus.groovy25/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4673,8 +4673,8 @@ public void visitArrayExpression(final ArrayExpression expression) {
46734673
// GRECLIPSE add -- GROOVY-9985, GROOVY-9994
46744674
if (expression.getSizeExpression() != null) {
46754675
expression.getSizeExpression().forEach(sizeExpr -> {
4676-
if (!checkCast(int_TYPE, sizeExpr)) addStaticTypeError(
4677-
"Cannot convert from " + prettyPrintType(getType(sizeExpr)) + " to int", sizeExpr);
4676+
if (!checkCompatibleAssignmentTypes(int_TYPE, getType(sizeExpr), sizeExpr, false))
4677+
addStaticTypeError("Cannot convert from " + prettyPrintType(getType(sizeExpr)) + " to int", sizeExpr);
46784678
});
46794679
}
46804680
// GRECLIPSE end

base/org.codehaus.groovy30/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4422,7 +4422,7 @@ protected Map<VariableExpression, List<ClassNode>> pushAssignmentTracking() {
44224422
}
44234423

44244424
@Override
4425-
/* GRECLIPSE edit -- GROOVY-9985
4425+
/* GRECLIPSE edit -- GROOVY-9985, GROOVY-10111
44264426
public void visitArrayExpression(ArrayExpression source) {
44274427
super.visitArrayExpression(source);
44284428
ClassNode elementType = source.getElementType();
@@ -4447,7 +4447,7 @@ public void visitArrayExpression(final ArrayExpression expression) {
44474447
expressions = expression.getSizeExpression();
44484448
}
44494449
for (Expression elementExpr : expressions) {
4450-
if (!checkCast(elementType, elementExpr)) {
4450+
if (!checkCompatibleAssignmentTypes(elementType, getType(elementExpr), elementExpr, false)) {
44514451
addStaticTypeError("Cannot convert from " + prettyPrintType(getType(elementExpr)) + " to " + prettyPrintType(elementType), elementExpr);
44524452
}
44534453
}

base/org.codehaus.groovy40/src/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -4313,7 +4313,7 @@ protected Map<VariableExpression, List<ClassNode>> pushAssignmentTracking() {
43134313
}
43144314

43154315
@Override
4316-
/* GRECLIPSE edit -- GROOVY-9985
4316+
/* GRECLIPSE edit -- GROOVY-9985, GROOVY-10111
43174317
public void visitArrayExpression(ArrayExpression source) {
43184318
super.visitArrayExpression(source);
43194319
ClassNode elementType = source.getElementType();
@@ -4338,7 +4338,7 @@ public void visitArrayExpression(final ArrayExpression expression) {
43384338
expressions = expression.getSizeExpression();
43394339
}
43404340
for (Expression elementExpr : expressions) {
4341-
if (!checkCast(elementType, elementExpr)) {
4341+
if (!checkCompatibleAssignmentTypes(elementType, getType(elementExpr), elementExpr, false)) {
43424342
addStaticTypeError("Cannot convert from " + prettyPrintType(getType(elementExpr)) + " to " + prettyPrintType(elementType), elementExpr);
43434343
}
43444344
}

0 commit comments

Comments
 (0)