Skip to content

Commit d51ff52

Browse files
committed
GROOVY-10339
1 parent 59193b3 commit d51ff52

File tree

4 files changed

+39
-3
lines changed

4 files changed

+39
-3
lines changed

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

+25
Original file line numberDiff line numberDiff line change
@@ -4563,4 +4563,29 @@ public void testTypeChecked10336() {
45634563
"Groovy:The argument is a method reference, but the parameter type is not a functional interface\n" +
45644564
"----------\n");
45654565
}
4566+
4567+
@Test
4568+
public void testTypeChecked10339() {
4569+
//@formatter:off
4570+
String[] sources = {
4571+
"Main.groovy",
4572+
"def <T> T bar(T x, T y) {\n" +
4573+
"}\n" +
4574+
"String foo() {\n" +
4575+
"}\n" +
4576+
"@groovy.transform.TypeChecked\n" +
4577+
"void test() {\n" +
4578+
" Integer i = bar(foo(), 1)\n" +
4579+
"}\n",
4580+
};
4581+
//@formatter:on
4582+
4583+
runNegativeTest(sources,
4584+
"----------\n" +
4585+
"1. ERROR in Main.groovy (at line 7)\n" +
4586+
"\tInteger i = bar(foo(), 1)\n" +
4587+
"\t ^^^^^^^^^^^^^\n" +
4588+
"Groovy:[Static type checking] - Cannot assign value of type java.io.Serializable<? extends java.io.Serializable<java.lang.String>> to variable of type java.lang.Integer\n" +
4589+
"----------\n");
4590+
}
45664591
}

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -6365,7 +6365,11 @@ private Map<GenericsTypeName, GenericsType> extractGenericsConnectionsFromArgume
63656365
Map<GenericsTypeName, GenericsType> connections = new HashMap<>();
63666366
extractGenericsConnections(connections, wrapTypeIfNecessary(argumentType), paramType);
63676367
connections.forEach((gtn, gt) -> resolvedPlaceholders.merge(gtn, gt, (gt1, gt2) -> {
6368-
return gt2; // TODO
6368+
// GRECLIPSE edit -- GROOVY-10339: incorporate additional witness
6369+
ClassNode cn1 = GenericsUtils.makeClassSafe0(CLASS_Type, gt1);
6370+
ClassNode cn2 = GenericsUtils.makeClassSafe0(CLASS_Type, gt2);
6371+
return lowestUpperBound(cn1,cn2).getGenericsTypes()[0];
6372+
// GRECLIPSE end
63696373
}));
63706374
}
63716375
}

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -6035,7 +6035,11 @@ private Map<GenericsTypeName, GenericsType> extractGenericsConnectionsFromArgume
60356035
Map<GenericsTypeName, GenericsType> connections = new HashMap<>();
60366036
extractGenericsConnections(connections, wrapTypeIfNecessary(argumentType), paramType);
60376037
connections.forEach((gtn, gt) -> resolvedPlaceholders.merge(gtn, gt, (gt1, gt2) -> {
6038-
return gt2; // TODO
6038+
// GRECLIPSE edit -- GROOVY-10339: incorporate additional witness
6039+
ClassNode cn1 = GenericsUtils.makeClassSafe0(CLASS_Type, gt1);
6040+
ClassNode cn2 = GenericsUtils.makeClassSafe0(CLASS_Type, gt2);
6041+
return lowestUpperBound(cn1,cn2).getGenericsTypes()[0];
6042+
// GRECLIPSE end
60396043
}));
60406044
}
60416045
}

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -5487,7 +5487,10 @@ private Map<GenericsTypeName, GenericsType> extractGenericsConnectionsFromArgume
54875487
Map<GenericsTypeName, GenericsType> connections = new HashMap<>();
54885488
extractGenericsConnections(connections, wrapTypeIfNecessary(argumentType), paramType);
54895489
connections.forEach((gtn, gt) -> resolvedPlaceholders.merge(gtn, gt, (gt1, gt2) -> {
5490-
return gt2; // TODO
5490+
// GROOVY-10339: incorporate additional witness
5491+
ClassNode cn1 = makeClassSafe0(CLASS_Type, gt1);
5492+
ClassNode cn2 = makeClassSafe0(CLASS_Type, gt2);
5493+
return lowestUpperBound(cn1,cn2).getGenericsTypes()[0];
54915494
}));
54925495
}
54935496
}

0 commit comments

Comments
 (0)