You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2021/05/25 19:45:19 UTC
[groovy] branch master updated: GROOVY-6851, GROOVY-9151,
GROOVY-10104: SC: skip Verifier-generated method nodes
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 8cbfc36 GROOVY-6851, GROOVY-9151, GROOVY-10104: SC: skip Verifier-generated method nodes
8cbfc36 is described below
commit 8cbfc36e596bda62518aef36903221cec5fbf992
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue May 25 14:45:10 2021 -0500
GROOVY-6851, GROOVY-9151, GROOVY-10104: SC: skip Verifier-generated method nodes
---
.../transform/sc/StaticCompilationVisitor.java | 17 ++++++-----
.../transform/stc/StaticTypeCheckingVisitor.java | 20 +------------
src/test/gls/invocation/DefaultParamTest.groovy | 23 +++++++++++++++
.../classgen/asm/sc/BugsStaticCompileTest.groovy | 33 +++++++++-------------
4 files changed, 47 insertions(+), 46 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
index ceda968..da07917 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
@@ -69,6 +69,8 @@ import java.util.Set;
import static org.codehaus.groovy.ast.ClassHelper.LIST_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.OBJECT_TYPE;
import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.isStringType;
+import static org.codehaus.groovy.ast.ClassHelper.isWrapperCharacter;
import static org.codehaus.groovy.ast.tools.GeneralUtils.args;
import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.attrX;
@@ -83,8 +85,7 @@ import static org.codehaus.groovy.ast.tools.GenericsUtils.applyGenericsContextTo
import static org.codehaus.groovy.ast.tools.GenericsUtils.correctToGenericsSpecRecurse;
import static org.codehaus.groovy.ast.tools.GenericsUtils.createGenericsSpec;
import static org.codehaus.groovy.ast.tools.GenericsUtils.extractSuperClassGenerics;
-import static org.codehaus.groovy.ast.ClassHelper.isStringType;
-import static org.codehaus.groovy.ast.ClassHelper.isWrapperCharacter;
+import static org.codehaus.groovy.classgen.Verifier.DEFAULT_PARAMETER_GENERATED;
import static org.codehaus.groovy.transform.sc.StaticCompilationMetadataKeys.BINARY_EXP_TARGET;
import static org.codehaus.groovy.transform.sc.StaticCompilationMetadataKeys.COMPONENT_TYPE;
import static org.codehaus.groovy.transform.sc.StaticCompilationMetadataKeys.DYNAMIC_OUTER_NODE_CALLBACK;
@@ -139,13 +140,15 @@ public class StaticCompilationVisitor extends StaticTypeCheckingVisitor {
}
public static boolean isStaticallyCompiled(final AnnotatedNode node) {
- if (node.getNodeMetaData(STATIC_COMPILE_NODE) != null) {
- return (Boolean) node.getNodeMetaData(STATIC_COMPILE_NODE);
+ if (node != null && node.getNodeMetaData(STATIC_COMPILE_NODE) != null) {
+ return Boolean.TRUE.equals(node.getNodeMetaData(STATIC_COMPILE_NODE));
}
if (node instanceof MethodNode) {
- return isStaticallyCompiled(node.getDeclaringClass());
- }
- if (node instanceof ClassNode && ((ClassNode) node).getOuterClass() != null) {
+ // GROOVY-6851, GROOVY-9151, GROOVY-10104
+ if (!Boolean.TRUE.equals(node.getNodeMetaData(DEFAULT_PARAMETER_GENERATED))) {
+ return isStaticallyCompiled(node.getDeclaringClass());
+ }
+ } else if (node instanceof ClassNode) {
return isStaticallyCompiled(((ClassNode) node).getOuterClass());
}
return false;
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index b48f47f..ca85db6 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -2575,11 +2575,6 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
// method has already been visited by a static type checking visitor
return;
}
- for (Parameter parameter : node.getParameters()) {
- if (parameter.getInitialExpression() != null) {
- parameter.getInitialExpression().visit(this);
- }
- }
super.visitConstructor(node);
}
@@ -2600,27 +2595,14 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
typeCheckingContext.alreadyVisitedMethods.add(node);
typeCheckingContext.pushErrorCollector(collector);
-
boolean osc = typeCheckingContext.isInStaticContext;
try {
typeCheckingContext.isInStaticContext = node.isStatic();
+
super.visitMethod(node);
- for (Parameter parameter : node.getParameters()) {
- if (parameter.getInitialExpression() != null) {
- parameter.getInitialExpression().visit(this);
- }
- }
-/*
- ClassNode rtype = getInferredReturnType(node);
- if (rtype == null) {
- storeInferredReturnType(node, node.getReturnType());
- }
- addTypeCheckingInfoAnnotation(node);
-*/
} finally {
typeCheckingContext.isInStaticContext = osc;
}
-
typeCheckingContext.popErrorCollector();
node.putNodeMetaData(ERROR_COLLECTOR, collector);
}
diff --git a/src/test/gls/invocation/DefaultParamTest.groovy b/src/test/gls/invocation/DefaultParamTest.groovy
index 341e681..1dad4df 100644
--- a/src/test/gls/invocation/DefaultParamTest.groovy
+++ b/src/test/gls/invocation/DefaultParamTest.groovy
@@ -139,6 +139,29 @@ final class DefaultParamTest extends GroovyTestCase {
'''
}
+ // GROOVY-6851, GROOVY-9151, GROOVY-10104
+ void testMethodWithAllParametersDefaultedCS() {
+ assertScript '''
+ @groovy.transform.CompileStatic
+ String greet(Object o = 'world', String s = o.toString()) {
+ "hello $s"
+ }
+ assert greet() == 'hello world'
+ '''
+
+ assertScript '''
+ @groovy.transform.CompileStatic
+ class Main {
+ static main(args) {
+ assert new Main().test().isEmpty()
+ }
+ Map test(Map<String, Object> m = new HashMap<>(Collections.emptyMap())) {
+ return m
+ }
+ }
+ '''
+ }
+
// GROOVY-9151
void testConstructorWithAllParametersDefaulted() {
assertScript '''
diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
index b8c41d6..0377642 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
@@ -1200,27 +1200,20 @@ assert it.next() == 1G
// GROOVY-6851
void testShouldNotThrowNPEIfElvisOperatorIsUsedInDefaultArgumentValue() {
- assertScript '''import org.codehaus.groovy.ast.expr.MethodCallExpression
-
-class GrailsHomeWorkspaceReader {
- @ASTTest(phase=INSTRUCTION_SELECTION,value={
- def defaultValue = node.parameters[0].initialExpression
- assert defaultValue instanceof MethodCallExpression
- def target = defaultValue.getNodeMetaData(DIRECT_METHOD_CALL_TARGET)
- assert target != null
- })
- GrailsHomeWorkspaceReader(String grailsHome = System.getProperty('grails.home')) {
- }
-}
-new GrailsHomeWorkspaceReader()
-'''
assertScript '''
-class GrailsHomeWorkspaceReader {
- GrailsHomeWorkspaceReader(String grailsHome = System.getProperty('grails.home') ?: System.getenv('GRAILS_HOME')) {
- }
-}
-new GrailsHomeWorkspaceReader()
-'''
+ class GrailsHomeWorkspaceReader {
+ GrailsHomeWorkspaceReader(String grailsHome = System.getProperty('grails.home')) {
+ }
+ }
+ new GrailsHomeWorkspaceReader()
+ '''
+ assertScript '''
+ class GrailsHomeWorkspaceReader {
+ GrailsHomeWorkspaceReader(String grailsHome = System.getProperty('grails.home') ?: System.getenv('GRAILS_HOME')) {
+ }
+ }
+ new GrailsHomeWorkspaceReader()
+ '''
}
// GROOVY-6342