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/09 00:04:09 UTC
groovy git commit: Minor refactoring: Extract common method for
`ClassNode`
Repository: groovy
Updated Branches:
refs/heads/master 3f41484e5 -> 3bbd5a75f
Minor refactoring: Extract common method for `ClassNode`
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/3bbd5a75
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/3bbd5a75
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/3bbd5a75
Branch: refs/heads/master
Commit: 3bbd5a75f6ae48604fe95067d21e55fc2206a380
Parents: 3f41484
Author: sunlan <su...@apache.org>
Authored: Fri Mar 9 08:04:00 2018 +0800
Committer: sunlan <su...@apache.org>
Committed: Fri Mar 9 08:04:00 2018 +0800
----------------------------------------------------------------------
.../java/org/codehaus/groovy/ast/ClassNode.java | 31 ++++++++++++++++++++
.../codehaus/groovy/classgen/asm/MopWriter.java | 2 +-
.../asm/sc/StaticTypesWriterController.java | 9 +++---
src/test/groovy/transform/stc/LambdaTest.groovy | 16 ++++++++++
4 files changed, 53 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/3bbd5a75/src/main/java/org/codehaus/groovy/ast/ClassNode.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassNode.java b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
index 4593b12..fe8a490 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
@@ -964,6 +964,21 @@ public class ClassNode extends AnnotatedNode implements Opcodes, GroovydocHolder
}
/**
+ *
+ * @param classNodes the class nodes for the interfaces
+ * @return true if this class or any base class implements any of the given interfaces
+ */
+ public boolean implementsAnyInterfaces(ClassNode... classNodes) {
+ for (ClassNode classNode : classNodes) {
+ if (implementsInterface(classNode)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
* @param classNode the class node for the interface
* @return true if this class or any base class implements the given interface
*/
@@ -980,6 +995,22 @@ public class ClassNode extends AnnotatedNode implements Opcodes, GroovydocHolder
}
/**
+ *
+ * @param classNodes the class nodes for the interfaces
+ * @return true if this class declares that it implements any of the given interfaces
+ * or if one of its interfaces extends directly or indirectly any of the given interfaces
+ */
+ public boolean declaresAnyInterfaces(ClassNode... classNodes) {
+ for (ClassNode classNode : classNodes) {
+ if (declaresInterface(classNode)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
* @param classNode the class node for the interface
* @return true if this class declares that it implements the given interface
* or if one of its interfaces extends directly or indirectly the interface
http://git-wip-us.apache.org/repos/asf/groovy/blob/3bbd5a75/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 fff65d1..6d06742 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) || classNode.declaresInterface(ClassHelper.GENERATED_LAMBDA_TYPE)) {
+ if (classNode.declaresAnyInterfaces(ClassHelper.GENERATED_CLOSURE_Type, ClassHelper.GENERATED_LAMBDA_TYPE)) {
return;
}
Set<MopKey> currentClassSignatures = buildCurrentClassSignatureSet(classNode.getMethods());
http://git-wip-us.apache.org/repos/asf/groovy/blob/3bbd5a75/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 5ce784a..7891d03 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,14 +94,15 @@ public class StaticTypesWriterController extends DelegatingController {
private void updateStaticCompileFlag(final MethodNode mn) {
ClassNode classNode = getClassNode();
AnnotatedNode node = mn;
- boolean implementsGeneratedClosureOrGeneratedLambdaInterface = classNode.implementsInterface(ClassHelper.GENERATED_CLOSURE_Type) || classNode.implementsInterface(ClassHelper.GENERATED_LAMBDA_TYPE);
+ boolean implementsGeneratedClosureOrGeneratedLambdaInterface = classNode.implementsAnyInterfaces(ClassHelper.GENERATED_CLOSURE_Type, ClassHelper.GENERATED_LAMBDA_TYPE);
if (implementsGeneratedClosureOrGeneratedLambdaInterface) {
node = classNode.getOuterClass();
}
- isInStaticallyCheckedMethod = mn != null && (
- StaticCompilationVisitor.isStaticallyCompiled(node)
- || implementsGeneratedClosureOrGeneratedLambdaInterface && classNode.getNodeMetaData(StaticCompilationMetadataKeys.STATIC_COMPILE_NODE) != null);
+ boolean isStaticCompileNode = classNode.getNodeMetaData(StaticCompilationMetadataKeys.STATIC_COMPILE_NODE) != null;
+ isInStaticallyCheckedMethod =
+ mn != null && (StaticCompilationVisitor.isStaticallyCompiled(node)
+ || implementsGeneratedClosureOrGeneratedLambdaInterface && isStaticCompileNode);
}
@Override
http://git-wip-us.apache.org/repos/asf/groovy/blob/3bbd5a75/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 6ffd42e..1654781 100644
--- a/src/test/groovy/transform/stc/LambdaTest.groovy
+++ b/src/test/groovy/transform/stc/LambdaTest.groovy
@@ -60,6 +60,7 @@ class LambdaTest extends GroovyTestCase {
'''
}
+
void testFunctionScript() {
assertScript '''
import groovy.transform.CompileStatic
@@ -75,6 +76,21 @@ class LambdaTest extends GroovyTestCase {
'''
}
+ void testFunctionScript2() {
+ assertScript '''
+ import groovy.transform.CompileStatic
+ import java.util.stream.Collectors
+ import java.util.stream.Stream
+
+ @CompileStatic
+ void p() {
+ assert [2, 3, 4] == [1, 2, 3].stream().map(e -> e.plus 1).collect(Collectors.toList());
+ }
+
+ p()
+ '''
+ }
+
void testBinaryOperator() {
assertScript '''
import groovy.transform.CompileStatic