Skip to content

Commit 045b29e

Browse files
committed
GROOVY-10975
1 parent 7ab6540 commit 045b29e

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

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

+3-6
Original file line numberDiff line numberDiff line change
@@ -7307,12 +7307,9 @@ public void testCompileStatic10047b() {
73077307
runNegativeTest(sources,
73087308
"----------\n" +
73097309
"1. ERROR in Main.groovy (at line 5)\n" +
7310-
"\tprint(['a','bc','def'].stream().collect(toMap(Function.<String>identity(), List::size)))\n" + (isAtLeastGroovy(50)
7311-
? "\t ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" +
7312-
"Groovy:[Static type checking] - Cannot call <R,A> java.util.stream.Stream#collect(java.util.stream.Collector<? super java.lang.String, A, R>) with arguments [java.util.stream.Collector<java.util.List, ?, java.util.Map<java.lang.String, java.lang.Integer>>]\n"
7313-
: "\t ^^^^^^^^^^\n" +
7314-
"Groovy:Failed to find class method 'size(java.lang.String)' or instance method 'size()' for the type: java.util.List\n"
7315-
) +
7310+
"\tprint(['a','bc','def'].stream().collect(toMap(Function.<String>identity(), List::size)))\n" +
7311+
"\t ^^^^^^^^^^\n" +
7312+
"Groovy:Failed to find class method 'size(java.lang.String)' or instance method 'size()' for the type: java.util.List\n" +
73167313
"----------\n");
73177314
}
73187315

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

+20
Original file line numberDiff line numberDiff line change
@@ -6997,6 +6997,26 @@ public void testTypeChecked10897() {
69976997
runConformTest(sources, "E then C");
69986998
}
69996999

7000+
@Test
7001+
public void testTypeChecked10975() {
7002+
assumeTrue(isParrotParser());
7003+
7004+
//@formatter:off
7005+
String[] sources = {
7006+
"Main.groovy",
7007+
"@groovy.transform.TypeChecked\n" +
7008+
"void test() {\n" +
7009+
" Collection<Integer> c = [1]\n" +
7010+
" Map<Integer,Integer> m = [1:1]\n" +
7011+
" new Hashtable(Collections.min(c, m::put))\n" + // Cannot find matching constructor Hashtable(Object)
7012+
"}\n" +
7013+
"test()\n",
7014+
};
7015+
//@formatter:on
7016+
7017+
runConformTest(sources);
7018+
}
7019+
70007020
@Test
70017021
public void testTypeChecked10981() {
70027022
//@formatter:off

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

+4-3
Original file line numberDiff line numberDiff line change
@@ -5412,9 +5412,10 @@ private Map<GenericsTypeName, GenericsType> extractGenericsConnectionsFromArgume
54125412
} else { // argument instanceof MethodPointerExpression
54135413
List<MethodNode> candidates = argument.getNodeMetaData(MethodNode.class);
54145414
if (candidates != null && !candidates.isEmpty()) {
5415-
MethodPointerExpression methodPointer = (MethodPointerExpression) argument;
5416-
p = collateMethodReferenceParameterTypes(methodPointer, candidates.get(0));
5417-
if (p.length > 0) {
5415+
var methodPointer = (MethodPointerExpression) argument;
5416+
p = methodPointer.getNodeMetaData(CLOSURE_ARGUMENTS); // GROOVY-10975
5417+
if (p == null) p = collateMethodReferenceParameterTypes(methodPointer, candidates.get(0));
5418+
if (p.length > 0 && GenericsUtils.hasUnresolvedGenerics(returnType)) {
54185419
for (int j = 0; j < q.length; j += 1) {
54195420
// SAM parameters are like arguments in this case
54205421
extractGenericsConnections(connections, q[j], p[j]);

0 commit comments

Comments
 (0)