Repository: groovy
Updated Branches:
  refs/heads/native-lambda 8616d8967 -> 0165fb276


Refine constructing BSM


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

Branch: refs/heads/native-lambda
Commit: 0165fb276ef1df048da3cb69b7555710e1ba8801
Parents: 8616d89
Author: sunlan <[email protected]>
Authored: Tue Jan 16 11:37:20 2018 +0800
Committer: sunlan <[email protected]>
Committed: Tue Jan 16 11:37:20 2018 +0800

----------------------------------------------------------------------
 .../asm/sc/StaticTypesLambdaWriter.java         | 32 ++++----------------
 1 file changed, 6 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/0165fb27/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 cbc6d31..f3679b3 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,7 +97,8 @@ public class StaticTypesLambdaWriter extends LambdaWriter {
         MethodNode abstractMethodNode = abstractMethodNodeList.get(0);
         String abstractMethodDesc = createMethodDescriptor(abstractMethodNode);
 
-        ClassNode lambdaClassNode = getOrAddLambdaClass(expression, ACC_PUBLIC 
| (controller.getClassNode().isInterface() ? ACC_STATIC : 0));
+        boolean isInterface = controller.getClassNode().isInterface();
+        ClassNode lambdaClassNode = getOrAddLambdaClass(expression, ACC_PUBLIC 
| (isInterface ? ACC_STATIC : 0));
         MethodNode syntheticLambdaMethodNode = 
lambdaClassNode.getMethods(DO_CALL).get(0);
 
         MethodVisitor mv = controller.getMethodVisitor();
@@ -106,7 +107,7 @@ public class StaticTypesLambdaWriter extends LambdaWriter {
         mv.visitInvokeDynamicInsn(
                 abstractMethodNode.getName(),
                 createAbstractMethodDesc(syntheticLambdaMethodNode, 
parameterType),
-                createBootstrapMethod(),
+                createBootstrapMethod(isInterface),
                 createBootstrapMethodArguments(abstractMethodDesc, 
lambdaClassNode, syntheticLambdaMethodNode)
         );
         controller.getOperandStack().replace(parameterType.redirect(), 
lambdaSharedVariableParameters.length);
@@ -137,13 +138,13 @@ public class StaticTypesLambdaWriter extends LambdaWriter 
{
         return methodDescriptor;
     }
 
-    private Handle createBootstrapMethod() {
+    private Handle createBootstrapMethod(boolean isInterface) {
         return new Handle(
                 Opcodes.H_INVOKESTATIC,
                 "java/lang/invoke/LambdaMetafactory",
                 "metafactory",
                 
"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;",
-                false
+                isInterface
         );
     }
 
@@ -237,25 +238,9 @@ public class StaticTypesLambdaWriter extends LambdaWriter {
                 );
         methodNode.putNodeMetaData(ORIGINAL_PARAMETERS_WITH_EXACT_TYPE, 
parametersWithExactType);
         methodNode.putNodeMetaData(LAMBDA_SHARED_VARIABLES, 
localVariableParameters);
-
         methodNode.setSourcePosition(expression);
 
-
-        LocalVariableReplacementVisitor localVariableReplacementVisitor = new 
LocalVariableReplacementVisitor(methodNode);
-
-        localVariableReplacementVisitor.visitMethod(methodNode);
-
-//        System.out.println(methodNode);
-
-        /*
-        VariableScope varScope = expression.getVariableScope();
-        if (varScope == null) {
-            throw new RuntimeException(
-                    "Must have a VariableScope by now! for expression: " + 
expression + " class: " + answer.getName());
-        } else {
-            methodNode.setVariableScope(varScope.copy());
-        }
-        */
+        new 
LocalVariableReplacementVisitor(methodNode).visitMethod(methodNode);
     }
 
     private Parameter[] createParametersWithExactType(LambdaExpression 
expression) {
@@ -294,8 +279,6 @@ public class StaticTypesLambdaWriter extends LambdaWriter {
         public void visitVariableExpression(VariableExpression expression) {
             if (expression.isClosureSharedVariable()) {
                 final String variableName = expression.getName();
-//                System.out.println(">>>>>>>>>>>>>>>>>>>>>>\n");
-//                System.out.println("1, " + variableName + ":" + 
expression.isClosureSharedVariable() + "::" + expression.getAccessedVariable());
                 Parameter[] parametersWithSameVariableName =
                         Arrays.stream(methodNode.getParameters())
                                 .filter(e -> variableName.equals(e.getName()))
@@ -304,13 +287,10 @@ public class StaticTypesLambdaWriter extends LambdaWriter 
{
                 if (parametersWithSameVariableName.length != 1) {
                     throw new 
GroovyBugError(parametersWithSameVariableName.length + " parameters with same 
name " + variableName + " found(Expect only one matched).");
                 }
-//                System.out.println("2, " + variableName + ":" + 
parametersWithSameVariableName[0]);
 
                 
expression.setAccessedVariable(parametersWithSameVariableName[0]);
                 expression.setClosureSharedVariable(false);
 
-//                System.out.println("<<<<<<<<<<<<<<<<<<<<<<\n");
-
             }
 
             super.visitVariableExpression(expression);

Reply via email to