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 2018/03/20 17:18:28 UTC

groovy git commit: Make generated closure and lambda classes final

Repository: groovy
Updated Branches:
  refs/heads/master 5bfadcbea -> 4abc75487


Make generated closure and lambda classes final


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

Branch: refs/heads/master
Commit: 4abc7548755b0f82560e2e607a49d5dd2e09c07a
Parents: 5bfadcb
Author: danielsun1106 <re...@hotmail.com>
Authored: Wed Mar 21 01:14:54 2018 +0800
Committer: danielsun1106 <re...@hotmail.com>
Committed: Wed Mar 21 01:18:19 2018 +0800

----------------------------------------------------------------------
 src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java | 3 ++-
 .../codehaus/groovy/classgen/asm/sc/StaticTypesLambdaWriter.java  | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/4abc7548/src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java
index 22b8653..6ca8574 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java
@@ -51,6 +51,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
 import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
 import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
 import static org.objectweb.asm.Opcodes.ACC_STATIC;
@@ -91,7 +92,7 @@ public class ClosureWriter {
 
         // generate closure as public class to make sure it can be properly invoked by classes of the
         // Groovy runtime without circumventing JVM access checks (see CachedMethod for example).
-        int mods = ACC_PUBLIC;
+        int mods = ACC_PUBLIC | ACC_FINAL;
         if (classNode.isInterface()) {
             mods |= ACC_STATIC;
         }

http://git-wip-us.apache.org/repos/asf/groovy/blob/4abc7548/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 335945e..59e9df6 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
@@ -56,6 +56,7 @@ import java.util.stream.Collectors;
 
 import static org.codehaus.groovy.transform.stc.StaticTypesMarker.INFERRED_LAMBDA_TYPE;
 import static org.codehaus.groovy.transform.stc.StaticTypesMarker.PARAMETER_TYPE;
+import static org.objectweb.asm.Opcodes.ACC_FINAL;
 import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
 import static org.objectweb.asm.Opcodes.ACC_STATIC;
 import static org.objectweb.asm.Opcodes.ACC_SYNTHETIC;
@@ -106,7 +107,7 @@ public class StaticTypesLambdaWriter extends LambdaWriter {
 
         ClassNode classNode = controller.getClassNode();
         boolean isInterface = classNode.isInterface();
-        ClassNode lambdaWrapperClassNode = getOrAddLambdaClass(expression, ACC_PUBLIC | (isInterface ? ACC_STATIC : 0) | ACC_SYNTHETIC, abstractMethodNode);
+        ClassNode lambdaWrapperClassNode = getOrAddLambdaClass(expression, ACC_PUBLIC | ACC_FINAL | (isInterface ? ACC_STATIC : 0) | ACC_SYNTHETIC, abstractMethodNode);
         MethodNode syntheticLambdaMethodNode = lambdaWrapperClassNode.getMethods(DO_CALL).get(0);
 
         newGroovyLambdaWrapperAndLoad(lambdaWrapperClassNode, syntheticLambdaMethodNode);