Repository: groovy
Updated Branches:
  refs/heads/native-lambda c24c0b7e6 -> a4de62c89


Check the method name of callable lambda


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a4de62c8
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a4de62c8
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a4de62c8

Branch: refs/heads/native-lambda
Commit: a4de62c89b7c9d7b269771e44061144af21c5b2c
Parents: c24c0b7
Author: sunlan <[email protected]>
Authored: Wed Jan 31 11:02:45 2018 +0800
Committer: sunlan <[email protected]>
Committed: Wed Jan 31 11:39:35 2018 +0800

----------------------------------------------------------------------
 .../org/codehaus/groovy/classgen/asm/InvocationWriter.java  | 4 ++++
 .../groovy/classgen/asm/sc/StaticTypesLambdaWriter.java     | 9 ++-------
 2 files changed, 6 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/a4de62c8/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java 
b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
index 0d8cc1b..b9e1011 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
@@ -480,6 +480,10 @@ public class InvocationWriter {
     }
 
     private boolean isFunctionInterfaceCall(MethodCallExpression call) {
+        if (!"call".equals(call.getMethodAsString())) {
+            return false;
+        }
+
         ClassNode type = call.getObjectExpression().getType();
 
         if (ClassHelper.isFunctionInterface(type)) {

http://git-wip-us.apache.org/repos/asf/groovy/blob/a4de62c8/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesLambdaWriter.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesLambdaWriter.java
 
b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesLambdaWriter.java
index 2d877ec..96a07d8 100644
--- 
a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesLambdaWriter.java
+++ 
b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesLambdaWriter.java
@@ -97,18 +97,13 @@ public class StaticTypesLambdaWriter extends LambdaWriter {
     public void writeLambda(LambdaExpression expression) {
         ClassNode lambdaType = getLambdaType(expression);
 
-        List<MethodNode> abstractMethodNodeList =
-                lambdaType.redirect().getMethods().stream()
-                        .filter(MethodNode::isAbstract)
-                        .collect(Collectors.toList());
-
-        if (!(ClassHelper.isFunctionInterface(lambdaType.redirect()) && 
abstractMethodNodeList.size() == 1)) {
+        if (!ClassHelper.isFunctionInterface(lambdaType.redirect())) {
             // if the parameter type is not real FunctionInterface, generate 
the default bytecode, which is actually a closure
             super.writeLambda(expression);
             return;
         }
 
-        MethodNode abstractMethodNode = abstractMethodNodeList.get(0);
+        MethodNode abstractMethodNode = 
ClassHelper.findSAM(lambdaType.redirect());
         String abstractMethodDesc = createMethodDescriptor(abstractMethodNode);
 
         ClassNode classNode = controller.getClassNode();

Reply via email to