Skip to content

Commit 783164f

Browse files
committed
GROOVY-9963
1 parent f47e868 commit 783164f

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

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

+23
Original file line numberDiff line numberDiff line change
@@ -1067,4 +1067,27 @@ public void testTypeChecked9956b() {
10671067
"Groovy:[Static type checking] - Incompatible generic argument types. Cannot assign C <Number> to: A <String>\n" +
10681068
"----------\n");
10691069
}
1070+
1071+
@Test
1072+
public void testTypeChecked9963() {
1073+
//@formatter:off
1074+
String[] sources = {
1075+
"Main.groovy",
1076+
"@groovy.transform.TupleConstructor\n" +
1077+
"class C<T> {\n" +
1078+
" T p\n" +
1079+
"}\n" +
1080+
"static m(String s) {\n" +
1081+
" print s\n" +
1082+
"}\n" +
1083+
"@groovy.transform.TypeChecked\n" +
1084+
"static test() {\n" +
1085+
" m(new C<>('x').p)\n" +
1086+
"}\n" +
1087+
"test()\n",
1088+
};
1089+
//@formatter:on
1090+
1091+
runConformTest(sources, "x");
1092+
}
10701093
}

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

+5
Original file line numberDiff line numberDiff line change
@@ -1529,6 +1529,11 @@ protected boolean existsProperty(final PropertyExpression pexp, final boolean re
15291529

15301530
Expression objectExpression = pexp.getObjectExpression();
15311531
ClassNode objectExpressionType = getType(objectExpression);
1532+
// GRECLIPSE add -- GROOVY-9963
1533+
if (objectExpression instanceof ConstructorCallExpression) {
1534+
inferDiamondType((ConstructorCallExpression) objectExpression, objectExpressionType);
1535+
}
1536+
// GRECLIPSE end
15321537
List<ClassNode> enclosingTypes = typeCheckingContext.getEnclosingClassNodes();
15331538
boolean staticOnlyAccess = isClassClassNodeWrappingConcreteType(objectExpressionType);
15341539
if ("this".equals(propertyName) && staticOnlyAccess) {

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

+5
Original file line numberDiff line numberDiff line change
@@ -1492,6 +1492,11 @@ protected boolean existsProperty(final PropertyExpression pexp, final boolean re
14921492

14931493
Expression objectExpression = pexp.getObjectExpression();
14941494
ClassNode objectExpressionType = getType(objectExpression);
1495+
// GRECLIPSE add -- GROOVY-9963
1496+
if (objectExpression instanceof ConstructorCallExpression) {
1497+
inferDiamondType((ConstructorCallExpression) objectExpression, objectExpressionType);
1498+
}
1499+
// GRECLIPSE end
14951500
List<ClassNode> enclosingTypes = typeCheckingContext.getEnclosingClassNodes();
14961501

14971502
boolean staticOnlyAccess = isClassClassNodeWrappingConcreteType(objectExpressionType);

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

+5
Original file line numberDiff line numberDiff line change
@@ -1484,6 +1484,11 @@ protected boolean existsProperty(final PropertyExpression pexp, final boolean re
14841484

14851485
Expression objectExpression = pexp.getObjectExpression();
14861486
ClassNode objectExpressionType = getType(objectExpression);
1487+
// GRECLIPSE add -- GROOVY-9963
1488+
if (objectExpression instanceof ConstructorCallExpression) {
1489+
inferDiamondType((ConstructorCallExpression) objectExpression, objectExpressionType);
1490+
}
1491+
// GRECLIPSE end
14871492
List<ClassNode> enclosingTypes = typeCheckingContext.getEnclosingClassNodes();
14881493

14891494
boolean staticOnlyAccess = isClassClassNodeWrappingConcreteType(objectExpressionType);

0 commit comments

Comments
 (0)