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/08 11:32:37 UTC
groovy git commit: GROOVY-8493: Native lambdas with @CompileStatic at
method level
Repository: groovy
Updated Branches:
refs/heads/master 9ede855f3 -> 3f41484e5
GROOVY-8493: Native lambdas with @CompileStatic at method level
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/3f41484e
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/3f41484e
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/3f41484e
Branch: refs/heads/master
Commit: 3f41484e512a196149b9ec26e39958a436df56c4
Parents: 9ede855
Author: sunlan <su...@apache.org>
Authored: Thu Mar 8 19:32:31 2018 +0800
Committer: sunlan <su...@apache.org>
Committed: Thu Mar 8 19:32:31 2018 +0800
----------------------------------------------------------------------
.../codehaus/groovy/classgen/asm/MopWriter.java | 2 +-
.../classgen/asm/sc/StaticTypesLambdaWriter.java | 2 ++
.../asm/sc/StaticTypesWriterController.java | 5 +++--
src/test/groovy/transform/stc/LambdaTest.groovy | 19 +++++++++++++++++++
4 files changed, 25 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/3f41484e/src/main/java/org/codehaus/groovy/classgen/asm/MopWriter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/MopWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/MopWriter.java
index 0781108..fff65d1 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/MopWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/MopWriter.java
@@ -86,7 +86,7 @@ public class MopWriter {
public void createMopMethods() {
ClassNode classNode = controller.getClassNode();
- if (classNode.declaresInterface(ClassHelper.GENERATED_CLOSURE_Type)) {
+ if (classNode.declaresInterface(ClassHelper.GENERATED_CLOSURE_Type) || classNode.declaresInterface(ClassHelper.GENERATED_LAMBDA_TYPE)) {
return;
}
Set<MopKey> currentClassSignatures = buildCurrentClassSignatureSet(classNode.getMethods());
http://git-wip-us.apache.org/repos/asf/groovy/blob/3f41484e/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 d9453ae..335945e 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
@@ -40,6 +40,7 @@ import org.codehaus.groovy.classgen.asm.OperandStack;
import org.codehaus.groovy.classgen.asm.WriterController;
import org.codehaus.groovy.classgen.asm.WriterControllerFactory;
import org.codehaus.groovy.control.SourceUnit;
+import org.codehaus.groovy.transform.sc.StaticCompilationMetadataKeys;
import org.codehaus.groovy.transform.stc.StaticTypesMarker;
import org.objectweb.asm.Handle;
import org.objectweb.asm.MethodVisitor;
@@ -279,6 +280,7 @@ public class StaticTypesLambdaWriter extends LambdaWriter {
lambdaClass.addInterface(ClassHelper.GENERATED_LAMBDA_TYPE);
lambdaClass.putNodeMetaData(WriterControllerFactory.class, factory);
}
+ lambdaClass.putNodeMetaData(StaticCompilationMetadataKeys.STATIC_COMPILE_NODE, Boolean.TRUE);
return lambdaClass;
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/3f41484e/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterController.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterController.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterController.java
index 15943e5..5ce784a 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterController.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterController.java
@@ -94,13 +94,14 @@ public class StaticTypesWriterController extends DelegatingController {
private void updateStaticCompileFlag(final MethodNode mn) {
ClassNode classNode = getClassNode();
AnnotatedNode node = mn;
- if (classNode.implementsInterface(ClassHelper.GENERATED_CLOSURE_Type)) {
+ boolean implementsGeneratedClosureOrGeneratedLambdaInterface = classNode.implementsInterface(ClassHelper.GENERATED_CLOSURE_Type) || classNode.implementsInterface(ClassHelper.GENERATED_LAMBDA_TYPE);
+ if (implementsGeneratedClosureOrGeneratedLambdaInterface) {
node = classNode.getOuterClass();
}
isInStaticallyCheckedMethod = mn != null && (
StaticCompilationVisitor.isStaticallyCompiled(node)
- || classNode.implementsInterface(ClassHelper.GENERATED_CLOSURE_Type)&&classNode.getNodeMetaData(StaticCompilationMetadataKeys.STATIC_COMPILE_NODE)!=null);
+ || implementsGeneratedClosureOrGeneratedLambdaInterface && classNode.getNodeMetaData(StaticCompilationMetadataKeys.STATIC_COMPILE_NODE) != null);
}
@Override
http://git-wip-us.apache.org/repos/asf/groovy/blob/3f41484e/src/test/groovy/transform/stc/LambdaTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/groovy/transform/stc/LambdaTest.groovy b/src/test/groovy/transform/stc/LambdaTest.groovy
index a24e3c1..6ffd42e 100644
--- a/src/test/groovy/transform/stc/LambdaTest.groovy
+++ b/src/test/groovy/transform/stc/LambdaTest.groovy
@@ -41,6 +41,25 @@ class LambdaTest extends GroovyTestCase {
'''
}
+ void testFunction2() {
+ assertScript '''
+ import groovy.transform.CompileStatic
+ import java.util.stream.Collectors
+ import java.util.stream.Stream
+
+ public class Test1 {
+ public static void main(String[] args) {
+ p();
+ }
+
+ @CompileStatic
+ public static void p() {
+ assert [2, 3, 4] == [1, 2, 3].stream().map(e -> e.plus 1).collect(Collectors.toList());
+ }
+ }
+ '''
+ }
+
void testFunctionScript() {
assertScript '''
import groovy.transform.CompileStatic