Skip to content

Commit eb24b0c

Browse files
committed
GROOVY-9985
1 parent 66ce183 commit eb24b0c

File tree

4 files changed

+107
-0
lines changed

4 files changed

+107
-0
lines changed

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

+49
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
*/
1616
package org.eclipse.jdt.groovy.core.tests.xform;
1717

18+
import static org.eclipse.jdt.groovy.core.tests.GroovyBundle.isParrotParser;
19+
import static org.junit.Assume.assumeTrue;
20+
1821
import java.util.Map;
1922

2023
import org.eclipse.jdt.groovy.core.tests.basic.GroovyCompilerTestSuite;
@@ -1336,6 +1339,52 @@ public void testTypeChecked9984() {
13361339
runConformTest(sources, "null");
13371340
}
13381341

1342+
@Test
1343+
public void testTypeChecked9985() {
1344+
assumeTrue(isParrotParser());
1345+
1346+
//@formatter:off
1347+
String[] sources = {
1348+
"Main.groovy",
1349+
"@groovy.transform.TypeChecked\n" +
1350+
"void test() {\n" +
1351+
" new Integer[] {123, 'x'}\n" +
1352+
"}\n" +
1353+
"test()\n",
1354+
};
1355+
//@formatter:on
1356+
1357+
runNegativeTest(sources,
1358+
"----------\n" +
1359+
"1. ERROR in Main.groovy (at line 3)\n" +
1360+
"\tnew Integer[] {123, 'x'}\n" +
1361+
"\t ^^^\n" +
1362+
"Groovy:[Static type checking] - Cannot convert from java.lang.String to java.lang.Integer\n" +
1363+
"----------\n");
1364+
}
1365+
1366+
@Test
1367+
public void testTypeChecked9985a() {
1368+
//@formatter:off
1369+
String[] sources = {
1370+
"Main.groovy",
1371+
"@groovy.transform.TypeChecked\n" +
1372+
"void test() {\n" +
1373+
" new Integer[123]['x']\n" +
1374+
"}\n" +
1375+
"test()\n",
1376+
};
1377+
//@formatter:on
1378+
1379+
runNegativeTest(sources,
1380+
"----------\n" +
1381+
"1. ERROR in Main.groovy (at line 3)\n" +
1382+
"\tnew Integer[123]['x']\n" +
1383+
"\t ^^^\n" +
1384+
"Groovy:[Static type checking] - Cannot convert from java.lang.String to int\n" +
1385+
"----------\n");
1386+
}
1387+
13391388
@Test
13401389
public void testTypeChecked9991() {
13411390
if (Float.parseFloat(System.getProperty("java.specification.version")) > 8)

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

+14
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.codehaus.groovy.ast.Variable;
4949
import org.codehaus.groovy.ast.expr.AnnotationConstantExpression;
5050
import org.codehaus.groovy.ast.expr.ArgumentListExpression;
51+
import org.codehaus.groovy.ast.expr.ArrayExpression;
5152
import org.codehaus.groovy.ast.expr.AttributeExpression;
5253
import org.codehaus.groovy.ast.expr.BinaryExpression;
5354
import org.codehaus.groovy.ast.expr.BitwiseNegationExpression;
@@ -4425,6 +4426,19 @@ protected Map<VariableExpression, List<ClassNode>> pushAssignmentTracking() {
44254426
return oldTracker;
44264427
}
44274428

4429+
@Override
4430+
public void visitArrayExpression(final ArrayExpression expression) {
4431+
super.visitArrayExpression(expression);
4432+
// GRECLIPSE add -- GROOVY-9985, GROOVY-9994
4433+
if (expression.getSizeExpression() != null) {
4434+
expression.getSizeExpression().forEach(sizeExpr -> {
4435+
if (!checkCast(int_TYPE, sizeExpr)) addStaticTypeError(
4436+
"Cannot convert from " + prettyPrintType(getType(sizeExpr)) + " to int", sizeExpr);
4437+
});
4438+
}
4439+
// GRECLIPSE end
4440+
}
4441+
44284442
@Override
44294443
public void visitCastExpression(final CastExpression expression) {
44304444
/* GRECLIPSE edit -- GROOVY-9997

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

+22
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.codehaus.groovy.ast.Variable;
4949
import org.codehaus.groovy.ast.expr.AnnotationConstantExpression;
5050
import org.codehaus.groovy.ast.expr.ArgumentListExpression;
51+
import org.codehaus.groovy.ast.expr.ArrayExpression;
5152
import org.codehaus.groovy.ast.expr.AttributeExpression;
5253
import org.codehaus.groovy.ast.expr.BinaryExpression;
5354
import org.codehaus.groovy.ast.expr.BitwiseNegationExpression;
@@ -4245,6 +4246,27 @@ protected Map<VariableExpression, List<ClassNode>> pushAssignmentTracking() {
42454246
return oldTracker;
42464247
}
42474248

4249+
@Override
4250+
public void visitArrayExpression(final ArrayExpression expression) {
4251+
super.visitArrayExpression(expression);
4252+
// GRECLIPSE add -- GROOVY-9985
4253+
ClassNode elementType;
4254+
List<Expression> expressions;
4255+
if (expression.hasInitializer()) {
4256+
elementType = expression.getElementType();
4257+
expressions = expression.getExpressions();
4258+
} else {
4259+
elementType = int_TYPE;
4260+
expressions = expression.getSizeExpression();
4261+
}
4262+
for (Expression elementExpr : expressions) {
4263+
if (!checkCast(elementType, elementExpr)) {
4264+
addStaticTypeError("Cannot convert from " + prettyPrintType(getType(elementExpr)) + " to " + prettyPrintType(elementType), elementExpr);
4265+
}
4266+
}
4267+
// GRECLIPSE end
4268+
}
4269+
42484270
@Override
42494271
public void visitCastExpression(final CastExpression expression) {
42504272
/* GRECLIPSE edit -- GROOVY-9997

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

+22
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import org.codehaus.groovy.ast.Variable;
4949
import org.codehaus.groovy.ast.expr.AnnotationConstantExpression;
5050
import org.codehaus.groovy.ast.expr.ArgumentListExpression;
51+
import org.codehaus.groovy.ast.expr.ArrayExpression;
5152
import org.codehaus.groovy.ast.expr.AttributeExpression;
5253
import org.codehaus.groovy.ast.expr.BinaryExpression;
5354
import org.codehaus.groovy.ast.expr.BitwiseNegationExpression;
@@ -4211,6 +4212,27 @@ protected Map<VariableExpression, List<ClassNode>> pushAssignmentTracking() {
42114212
return oldTracker;
42124213
}
42134214

4215+
@Override
4216+
public void visitArrayExpression(final ArrayExpression expression) {
4217+
super.visitArrayExpression(expression);
4218+
// GRECLIPSE add -- GROOVY-9985
4219+
ClassNode elementType;
4220+
List<Expression> expressions;
4221+
if (expression.hasInitializer()) {
4222+
elementType = expression.getElementType();
4223+
expressions = expression.getExpressions();
4224+
} else {
4225+
elementType = int_TYPE;
4226+
expressions = expression.getSizeExpression();
4227+
}
4228+
for (Expression elementExpr : expressions) {
4229+
if (!checkCast(elementType, elementExpr)) {
4230+
addStaticTypeError("Cannot convert from " + prettyPrintType(getType(elementExpr)) + " to " + prettyPrintType(elementType), elementExpr);
4231+
}
4232+
}
4233+
// GRECLIPSE end
4234+
}
4235+
42144236
@Override
42154237
public void visitCastExpression(final CastExpression expression) {
42164238
/* GRECLIPSE edit -- GROOVY-9997

0 commit comments

Comments
 (0)