Repository: groovy Updated Branches: refs/heads/GROOVY_2_6_X 93e145732 -> 235f9ccba
Make generated closure and lambda classes final (cherry picked from commit 4abc754) Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/235f9ccb Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/235f9ccb Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/235f9ccb Branch: refs/heads/GROOVY_2_6_X Commit: 235f9ccba48e9106bf4f1fc44306501bffb378ec Parents: 93e1457 Author: danielsun1106 <realblue...@hotmail.com> Authored: Wed Mar 21 01:14:54 2018 +0800 Committer: sunlan <sun...@apache.org> Committed: Wed Mar 21 08:22:05 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/235f9ccb/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/235f9ccb/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 510d580..50b8542 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.Map; 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; @@ -108,7 +109,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);