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();
