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;