You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2023/04/11 22:00:58 UTC
[groovy] branch GROOVY_3_0_X updated: GROOVY-10994: SC: method reference in parameterized context
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
new 0647afad5a GROOVY-10994: SC: method reference in parameterized context
0647afad5a is described below
commit 0647afad5a3170d94892254211ef95058980ddaf
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Apr 11 15:56:30 2023 -0500
GROOVY-10994: SC: method reference in parameterized context
3_0_X backport
---
.../asm/sc/StaticTypesMethodReferenceExpressionWriter.java | 7 +++++++
src/test/groovy/transform/stc/MethodReferenceTest.groovy | 12 ++++++++++++
2 files changed, 19 insertions(+)
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesMethodReferenceExpressionWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesMethodReferenceExpressionWriter.java
index 9ce154ce64..7d5aff41cf 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesMethodReferenceExpressionWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesMethodReferenceExpressionWriter.java
@@ -21,6 +21,7 @@ package org.codehaus.groovy.classgen.asm.sc;
import org.codehaus.groovy.ast.ASTNode;
import org.codehaus.groovy.ast.ClassHelper;
import org.codehaus.groovy.ast.ClassNode;
+import org.codehaus.groovy.ast.GenericsType;
import org.codehaus.groovy.ast.MethodNode;
import org.codehaus.groovy.ast.Parameter;
import org.codehaus.groovy.ast.expr.ArgumentListExpression;
@@ -42,6 +43,7 @@ import org.objectweb.asm.Opcodes;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
import static java.util.Comparator.comparingInt;
import static java.util.stream.Collectors.joining;
@@ -258,6 +260,11 @@ public class StaticTypesMethodReferenceExpressionWriter extends MethodReferenceE
parameters = plusOne;
}
+ if (parameters.length > 0 && !method.isStatic() && !isExtensionMethod(method)
+ && typeOrTargetRefType.redirect().getGenericsTypes() != null) { // GROOVY-10994
+ Map<GenericsType.GenericsTypeName, GenericsType> spec = extractPlaceholders(typeOrTargetRefType);
+ parameters = Arrays.stream(parameters).map(p -> new Parameter(resolveClassNodeGenerics(spec, null, p.getType()), p.getName())).toArray(Parameter[]::new);
+ }
return !parametersCompatible(samParameters, parameters);
});
diff --git a/src/test/groovy/transform/stc/MethodReferenceTest.groovy b/src/test/groovy/transform/stc/MethodReferenceTest.groovy
index 4bbaa4311a..c358459357 100644
--- a/src/test/groovy/transform/stc/MethodReferenceTest.groovy
+++ b/src/test/groovy/transform/stc/MethodReferenceTest.groovy
@@ -419,6 +419,18 @@ final class MethodReferenceTest {
'''
}
+ @Test // instance::instanceMethod -- GROOVY-10994
+ void testPredicateII2() {
+ assertScript imports + '''
+ @CompileStatic
+ def <T> void test(List<T> list) {
+ Predicate<? super T> p = list::add
+ }
+
+ test([])
+ '''
+ }
+
@Test // instance::instanceMethod
void testBinaryOperatorII() {
assertScript imports + '''