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')) {
                 }
             }