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 2022/02/24 19:37:34 UTC
[groovy] 06/06: GROOVY-6851, GROOVY-10104: SC: skip Verifier-generated methods
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 3a459edd9441fd646ba9d749c31073bccbbeab61
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue May 25 14:45:10 2021 -0500
GROOVY-6851, GROOVY-10104: SC: skip Verifier-generated methods
Conflicts:
src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
---
.../transform/sc/StaticCompilationVisitor.java | 15 ++++++++------
.../transform/stc/StaticTypeCheckingVisitor.java | 19 +-----------------
src/test/gls/invocation/DefaultParamTest.groovy | 23 ++++++++++++++++++++++
.../classgen/asm/sc/BugsStaticCompileTest.groovy | 8 --------
4 files changed, 33 insertions(+), 32 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 2cfca20..0337c40 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompilationVisitor.java
@@ -81,6 +81,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.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;
@@ -136,15 +137,17 @@ public class StaticCompilationVisitor extends StaticTypeCheckingVisitor {
return TYPECHECKED_ANNOTATIONS;
}
- public static boolean isStaticallyCompiled(AnnotatedNode node) {
- if (node.getNodeMetaData(STATIC_COMPILE_NODE) != null) {
+ public static boolean isStaticallyCompiled(final AnnotatedNode 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 InnerClassNode) {
- return isStaticallyCompiled(((InnerClassNode)node).getOuterClass());
+ // 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 c203d35..18efda4 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -2558,11 +2558,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);
}
@@ -2587,23 +2582,11 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
final 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 465af04..f8dca71 100644
--- a/src/test/gls/invocation/DefaultParamTest.groovy
+++ b/src/test/gls/invocation/DefaultParamTest.groovy
@@ -138,6 +138,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 _FIXME_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 b6c9f7d..bb63f47 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
@@ -1246,15 +1246,7 @@ final class BugsStaticCompileTest extends BugsSTCTest implements StaticCompilati
// 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')) {
}
}