You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2019/04/08 12:59:10 UTC
[groovy] 18/20: Improve the robustness
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit df5c8c6f8b915500a5a2ea3897eb348ebdb38d58
Author: Daniel Sun <su...@apache.org>
AuthorDate: Wed Mar 27 00:36:33 2019 +0800
Improve the robustness
---
.../groovy/classgen/asm/sc/StaticTypesLambdaWriter.java | 11 ++++++++---
.../asm/sc/StaticTypesMethodReferenceExpressionWriter.java | 11 ++++++++---
2 files changed, 16 insertions(+), 6 deletions(-)
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 1a3c1c8..af3e631 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
@@ -86,10 +86,15 @@ public class StaticTypesLambdaWriter extends LambdaWriter implements AbstractFun
@Override
public void writeLambda(LambdaExpression expression) {
ClassNode functionalInterfaceType = getFunctionalInterfaceType(expression);
- ClassNode redirect = functionalInterfaceType.redirect();
+ if (null == functionalInterfaceType) {
+ // if the parameter type failed to be inferred, generate the default bytecode, which is actually a closure
+ super.writeLambda(expression);
+ return;
+ }
- if (null == functionalInterfaceType || !ClassHelper.isFunctionalInterface(redirect)) {
- // if the parameter type is not real FunctionInterface or failed to be inferred, generate the default bytecode, which is actually a closure
+ ClassNode redirect = functionalInterfaceType.redirect();
+ if (!ClassHelper.isFunctionalInterface(redirect)) {
+ // if the parameter type is not real FunctionalInterface, generate the default bytecode, which is actually a closure
super.writeLambda(expression);
return;
}
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 f41a37b..7e1275d 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
@@ -64,10 +64,15 @@ public class StaticTypesMethodReferenceExpressionWriter extends MethodReferenceE
@Override
public void writeMethodReferenceExpression(MethodReferenceExpression methodReferenceExpression) {
ClassNode functionalInterfaceType = getFunctionalInterfaceType(methodReferenceExpression);
- ClassNode redirect = functionalInterfaceType.redirect();
+ if (null == functionalInterfaceType) {
+ // if the parameter type failed to be inferred, generate the default bytecode, which is actually a method closure
+ super.writeMethodReferenceExpression(methodReferenceExpression);
+ return;
+ }
- if (null == functionalInterfaceType || !ClassHelper.isFunctionalInterface(redirect)) {
- // if the parameter type is not real FunctionInterface or failed to be inferred, generate the default bytecode, which is actually a method closure
+ ClassNode redirect = functionalInterfaceType.redirect();
+ if (!ClassHelper.isFunctionalInterface(redirect)) {
+ // if the parameter type is not real FunctionalInterface, generate the default bytecode, which is actually a method closure
super.writeMethodReferenceExpression(methodReferenceExpression);
return;
}