You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2019/12/07 18:57:18 UTC

[groovy] branch GROOVY_3_0_X updated: Trivial refactoring: rename method name and extract common checks

This is an automated email from the ASF dual-hosted git repository.

sunlan 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 665726b  Trivial refactoring: rename method name and extract common checks
665726b is described below

commit 665726b4be83cf4c46f930ffed206d1790f50668
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Dec 8 02:55:45 2019 +0800

    Trivial refactoring: rename method name and extract common checks
    
    (cherry picked from commit 20a4daad7f908066a6dfa104d613d11345e0aa58)
---
 .../groovy/classgen/asm/sc/StaticTypesLambdaWriter.java   | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 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 4f7f5d9..a80c5c8 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
@@ -136,8 +136,9 @@ public class StaticTypesLambdaWriter extends LambdaWriter implements AbstractFun
                 addDeserializeLambdaMethod();
             }
 
-            newGroovyLambdaWrapperAndLoad(lambdaWrapperClassNode, syntheticLambdaMethodNode, expression);
-            loadEnclosingClassInstance(syntheticLambdaMethodNode);
+            boolean accessingInstanceMembers = isAccessingInstanceMembersOfEnclosingClass(syntheticLambdaMethodNode);
+            newGroovyLambdaWrapperAndLoad(lambdaWrapperClassNode, expression, accessingInstanceMembers);
+            loadEnclosingClassInstance(accessingInstanceMembers);
         }
 
         MethodVisitor mv = controller.getMethodVisitor();
@@ -161,12 +162,12 @@ public class StaticTypesLambdaWriter extends LambdaWriter implements AbstractFun
         return new Parameter[]{new Parameter(ClassHelper.SERIALIZEDLAMBDA_TYPE, SERIALIZED_LAMBDA_PARAM_NAME)};
     }
 
-    private void loadEnclosingClassInstance(MethodNode syntheticLambdaMethodNode) {
+    private void loadEnclosingClassInstance(boolean accessingInstanceMembers) {
         MethodVisitor mv = controller.getMethodVisitor();
         OperandStack operandStack = controller.getOperandStack();
         CompileStack compileStack = controller.getCompileStack();
 
-        if (controller.isStaticMethod() || compileStack.isInSpecialConstructorCall() || !isAccessingInstanceMembers(syntheticLambdaMethodNode)) {
+        if (controller.isStaticMethod() || compileStack.isInSpecialConstructorCall() || !accessingInstanceMembers) {
             operandStack.pushConstant(ConstantExpression.NULL);
         } else {
             mv.visitVarInsn(ALOAD, 0);
@@ -174,7 +175,7 @@ public class StaticTypesLambdaWriter extends LambdaWriter implements AbstractFun
         }
     }
 
-    private boolean isAccessingInstanceMembers(MethodNode syntheticLambdaMethodNode) {
+    private boolean isAccessingInstanceMembersOfEnclosingClass(MethodNode syntheticLambdaMethodNode) {
         ObjectHolder<Boolean> objectHolder = new ObjectHolder<>(false);
         ClassCodeVisitorSupport classCodeVisitorSupport = new ClassCodeVisitorSupport() {
             @Override
@@ -207,13 +208,13 @@ public class StaticTypesLambdaWriter extends LambdaWriter implements AbstractFun
         return objectHolder.getObject();
     }
 
-    private void newGroovyLambdaWrapperAndLoad(ClassNode lambdaWrapperClassNode, MethodNode syntheticLambdaMethodNode, LambdaExpression expression) {
+    private void newGroovyLambdaWrapperAndLoad(ClassNode lambdaWrapperClassNode, LambdaExpression expression, boolean accessingInstanceMembers) {
         MethodVisitor mv = controller.getMethodVisitor();
         String lambdaWrapperClassInternalName = BytecodeHelper.getClassInternalName(lambdaWrapperClassNode);
         mv.visitTypeInsn(NEW, lambdaWrapperClassInternalName);
         mv.visitInsn(DUP);
 
-        loadEnclosingClassInstance(syntheticLambdaMethodNode);
+        loadEnclosingClassInstance(accessingInstanceMembers);
         controller.getOperandStack().dup();
 
         loadSharedVariables(expression);