Skip to content

Commit 41556b2

Browse files
committed
GROOVY-10324
1 parent d47b4aa commit 41556b2

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

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

+19
Original file line numberDiff line numberDiff line change
@@ -4348,6 +4348,25 @@ public void testTypeChecked10323() {
43484348
"----------\n");
43494349
}
43504350

4351+
@Test
4352+
public void testTypeChecked10324() {
4353+
//@formatter:off
4354+
String[] sources = {
4355+
"Main.groovy",
4356+
"class C<T> {\n" +
4357+
"}\n" +
4358+
"def <X> X m(C<X> c) {\n" +
4359+
"}\n" +
4360+
"@groovy.transform.TypeChecked\n" +
4361+
"void test() {\n" +
4362+
" Set<String> x = m(new C<>())\n" +
4363+
"}\n",
4364+
};
4365+
//@formatter:on
4366+
4367+
runNegativeTest(sources, "");
4368+
}
4369+
43514370
@Test
43524371
public void testTypeChecked10325() {
43534372
//@formatter:off

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -982,13 +982,13 @@ && isAssignment(enclosingBinaryExpression.getOperation().getType())) {
982982
if (rightExpression instanceof ConstructorCallExpression) {
983983
inferDiamondType((ConstructorCallExpression) rightExpression, lType);
984984
}
985-
// GRECLIPSE add -- unchecked assignment
985+
// GRECLIPSE add -- GROOVY-10051, GROOVY-10235, GROOVY-10324
986986
if (lType.isUsingGenerics() && missesGenericsTypes(resultType)) {
987987
// the inferred type of the binary expression is the type of the RHS
988988
// "completed" with generics type information available from the LHS
989989
if (lType.equals(resultType)) {
990990
if (!lType.isGenericsPlaceHolder()) resultType = lType;
991-
} else {
991+
} else if (!resultType.isGenericsPlaceHolder()) {
992992
Map<GenericsTypeName, GenericsType> gt = new HashMap<>();
993993
extractGenericsConnections(gt, resultType, resultType.redirect());
994994
extractGenericsConnections(gt, lType, getNextSuperClass(resultType, lType));

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -867,13 +867,13 @@ && isAssignment(enclosingBinaryExpression.getOperation().getType())) {
867867
if (rightExpression instanceof ConstructorCallExpression) {
868868
inferDiamondType((ConstructorCallExpression) rightExpression, lType);
869869
}
870-
// GRECLIPSE add -- unchecked assignment
870+
// GRECLIPSE add -- GROOVY-10051, GROOVY-10235, GROOVY-10324
871871
if (lType.isUsingGenerics() && missesGenericsTypes(resultType)) {
872872
// the inferred type of the binary expression is the type of the RHS
873873
// "completed" with generics type information available from the LHS
874874
if (lType.equals(resultType)) {
875875
if (!lType.isGenericsPlaceHolder()) resultType = lType;
876-
} else {
876+
} else if (!resultType.isGenericsPlaceHolder()) {
877877
Map<GenericsTypeName, GenericsType> gt = new HashMap<>();
878878
extractGenericsConnections(gt, resultType, resultType.redirect());
879879
extractGenericsConnections(gt, lType, getNextSuperClass(resultType, lType));

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -866,13 +866,13 @@ && isAssignment(enclosingBinaryExpression.getOperation().getType())) {
866866

867867
// the inferred type of the binary expression is the type of the RHS
868868
// "completed" with generics type information available from the LHS
869-
/* GRECLIPSE edit -- GROOVY-10235
869+
/* GRECLIPSE edit -- GROOVY-10051, GROOVY-10235, GROOVY-10324
870870
if (!resultType.isGenericsPlaceHolder()) // plain reference drops placeholder
871871
resultType = GenericsUtils.parameterizeType(lType, resultType.getPlainNodeReference());
872872
*/
873873
if (lType.equals(resultType)) {
874874
if (!lType.isGenericsPlaceHolder()) resultType = lType;
875-
} else {
875+
} else if (!resultType.isGenericsPlaceHolder()) {
876876
Map<GenericsTypeName, GenericsType> gt = new HashMap<>();
877877
extractGenericsConnections(gt, resultType, resultType.redirect());
878878
extractGenericsConnections(gt, lType, getNextSuperClass(resultType, lType));

0 commit comments

Comments
 (0)