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/09/09 21:25:42 UTC

[groovy] branch master updated: refactor skip checks

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 ed35f5d  refactor skip checks
ed35f5d is described below

commit ed35f5d3a64d3e0fbf74e44871c1d4002b6f7d76
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Thu Sep 9 16:25:31 2021 -0500

    refactor skip checks
---
 .../transform/stc/StaticTypeCheckingVisitor.java   | 46 ++++++++++------------
 1 file changed, 20 insertions(+), 26 deletions(-)

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 9b84a13..93f148c 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -467,6 +467,10 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         return Boolean.TRUE.equals(node.getNodeMetaData(StaticTypeCheckingVisitor.class)) || isSkipMode(node);
     }
 
+    protected boolean shouldSkipMethodNode(final MethodNode node) {
+        return Boolean.TRUE.equals(node.getNodeMetaData(StaticTypeCheckingVisitor.class)) || isSkipMode(node);
+    }
+
     public boolean isSkipMode(final AnnotatedNode node) {
         if (node == null) return false;
         for (ClassNode tca : getTypeCheckingAnnotations()) {
@@ -2160,18 +2164,6 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
     }
 
     @Override
-    protected void visitConstructorOrMethod(final MethodNode node, final boolean isConstructor) {
-        typeCheckingContext.pushEnclosingMethod(node);
-        if (!isSkipMode(node) && !shouldSkipMethodNode(node)) {
-            super.visitConstructorOrMethod(node, isConstructor);
-        }
-        if (!isConstructor) {
-            returnAdder.visitMethod(node); // return statement added after visitConstructorOrMethod finished... we can not count these auto-generated return statements(GROOVY-7753), see `typeCheckingContext.pushEnclosingReturnStatement`
-        }
-        typeCheckingContext.popEnclosingMethod();
-    }
-
-    @Override
     public void visitExpressionStatement(final ExpressionStatement statement) {
         typeCheckingContext.pushTemporaryTypeInfo();
         super.visitExpressionStatement(statement);
@@ -2552,14 +2544,17 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         }
     }
 
-    protected boolean shouldSkipMethodNode(final MethodNode node) {
-        return Boolean.TRUE.equals(node.getNodeMetaData(StaticTypeCheckingVisitor.class));
+    @Override
+    public void visitConstructor(final ConstructorNode node) {
+        if (shouldSkipMethodNode(node)) {
+            return;
+        }
+        super.visitConstructor(node);
     }
 
     @Override
     public void visitMethod(final MethodNode node) {
         if (shouldSkipMethodNode(node)) {
-            // method has already been visited by a static type checking visitor
             return;
         }
         if (!extension.beforeVisitMethod(node)) {
@@ -2574,18 +2569,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         extension.afterVisitMethod(node);
     }
 
-    @Override
-    public void visitConstructor(final ConstructorNode node) {
-        if (shouldSkipMethodNode(node)) {
-            // method has already been visited by a static type checking visitor
-            return;
-        }
-        super.visitConstructor(node);
-    }
-
     protected void startMethodInference(final MethodNode node, final ErrorCollector collector) {
-        if (isSkipMode(node)) return;
-
         // second, we must ensure that this method MUST be statically checked
         // for example, in a mixed mode where only some methods are statically checked
         // we must not visit a method which used dynamic dispatch.
@@ -2612,6 +2596,16 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
         node.putNodeMetaData(ERROR_COLLECTOR, collector);
     }
 
+    @Override
+    protected void visitConstructorOrMethod(final MethodNode node, final boolean isConstructor) {
+        typeCheckingContext.pushEnclosingMethod(node);
+        super.visitConstructorOrMethod(node, isConstructor);
+        if (!isConstructor) {
+            returnAdder.visitMethod(node); // GROOVY-7753: we cannot count these auto-generated return statements, see `typeCheckingContext.pushEnclosingReturnStatement`
+        }
+        typeCheckingContext.popEnclosingMethod();
+    }
+
     protected void addTypeCheckingInfoAnnotation(final MethodNode node) {
         // TypeChecked$TypeCheckingInfo can not be applied on constructors
         if (node instanceof ConstructorNode) return;