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/12/16 18:07:48 UTC

[groovy] branch master updated: refactor and reuse `MethodNode#isStaticConstructor`

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 62a599a  refactor and reuse `MethodNode#isStaticConstructor`
62a599a is described below

commit 62a599a9ca6cad234d907f122c861d86766ffa7f
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Thu Dec 16 11:57:10 2021 -0600

    refactor and reuse `MethodNode#isStaticConstructor`
---
 src/main/java/org/codehaus/groovy/ast/MethodNode.java      |  9 +++++----
 .../codehaus/groovy/classgen/ClassCompletionVerifier.java  | 14 +++++---------
 .../org/codehaus/groovy/classgen/asm/WriterController.java |  4 ++--
 .../org/codehaus/groovy/tools/javac/JavaStubGenerator.java |  2 +-
 .../groovy/transform/trait/TraitASTTransformation.java     |  2 +-
 5 files changed, 14 insertions(+), 17 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/MethodNode.java b/src/main/java/org/codehaus/groovy/ast/MethodNode.java
index 844dede..5a9b4c2 100644
--- a/src/main/java/org/codehaus/groovy/ast/MethodNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/MethodNode.java
@@ -50,7 +50,6 @@ public class MethodNode extends AnnotatedNode {
     private boolean dynamicReturnType;
     private VariableScope variableScope;
     private final ClassNode[] exceptions;
-    private final boolean staticConstructor;
 
     // type spec for generics
     private GenericsType[] genericsTypes;
@@ -61,7 +60,6 @@ public class MethodNode extends AnnotatedNode {
     protected MethodNode() {
         this.name = null;
         this.exceptions = null;
-        this.staticConstructor = false;
     }
 
     public MethodNode(final String name, final int modifiers, final ClassNode returnType, final Parameter[] parameters, final ClassNode[] exceptions, final Statement code) {
@@ -71,7 +69,6 @@ public class MethodNode extends AnnotatedNode {
         this.code = code;
         setReturnType(returnType);
         setParameters(parameters);
-        this.staticConstructor = "<clinit>".equals(name);
     }
 
     /**
@@ -258,7 +255,11 @@ public class MethodNode extends AnnotatedNode {
     }
 
     public boolean isStaticConstructor() {
-        return staticConstructor;
+        return "<clinit>".equals(name);
+    }
+
+    public boolean isConstructor() {
+        return "<init>".equals(name);
     }
 
     /**
diff --git a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
index 9f4a627..adf4ce4 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
@@ -148,7 +148,7 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
                 ClassNode cn = declaringClass.getOuterClass();
                 if (cn == null && declaringClass.isResolved()) {
                     // in case of a precompiled class, the outerclass is unknown
-                    Class typeClass = declaringClass.getTypeClass();
+                    Class<?> typeClass = declaringClass.getTypeClass();
                     typeClass = typeClass.getEnclosingClass();
                     if (typeClass != null) {
                         cn = ClassHelper.make(typeClass);
@@ -395,8 +395,8 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
         if (!strictNames) return;
         List<MethodNode> methods = cn.getAllDeclaredMethods();
         for (MethodNode mNode : methods) {
+            if (mNode.isConstructor() || mNode.isStaticConstructor()) continue;
             String name = mNode.getName();
-            if (name.equals("<init>") || name.equals("<clinit>")) continue;
             // Groovy allows more characters than Character.isValidJavaIdentifier() would allow
             // if we find a good way to encode special chars we could remove (some of) these checks
             for (String ch : INVALID_NAME_CHARS) {
@@ -414,7 +414,7 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
                 addError("The " + getDescription(method) + " from " + getDescription(cn) +
                         " must not be final. It is by definition abstract.", method);
             }
-            if (method.isStatic() && !isConstructor(method)) {
+            if (method.isStatic() && !method.isStaticConstructor()) {
                 addError("The " + getDescription(method) + " from " + getDescription(cn) +
                         " must not be static. Only fields may be static in an interface.", method);
             }
@@ -427,10 +427,6 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
         }
     }
 
-    private static boolean isConstructor(MethodNode method) {
-        return method.getName().equals("<clinit>");
-    }
-
     private void checkMethodsForOverridingFinal(ClassNode cn) {
         for (MethodNode method : cn.getMethods()) {
             Parameter[] params = method.getParameters();
@@ -547,7 +543,7 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
     }
 
     private void checkOverloadingPrivateAndPublic(MethodNode node) {
-        if (isConstructor(node)) return;
+        if (node.isStaticConstructor()) return;
         boolean hasPrivate = node.isPrivate();
         boolean hasPublic = node.isPublic();
         for (MethodNode method : currentClass.getMethods(node.getName())) {
@@ -566,7 +562,7 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
     }
 
     private void checkRepetitiveMethod(MethodNode node) {
-        if (isConstructor(node)) return;
+        if (node.isStaticConstructor()) return;
         for (MethodNode method : currentClass.getMethods(node.getName())) {
             if (method == node) continue;
             if (!method.getDeclaringClass().equals(node.getDeclaringClass())) continue;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java b/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java
index 0f56c04..39f05cb 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/WriterController.java
@@ -329,11 +329,11 @@ public class WriterController {
     }
 
     public boolean isNotClinit() {
-        return methodNode == null || !methodNode.getName().equals("<clinit>");
+        return methodNode == null || !methodNode.isStaticConstructor();
     }
 
     public boolean isStaticConstructor() {
-        return methodNode != null && methodNode.getName().equals("<clinit>");
+        return methodNode != null && methodNode.isStaticConstructor();
     }
 
     public boolean isConstructor() {
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index ca4fe6d..80c8e10 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -694,7 +694,7 @@ public class JavaStubGenerator {
     }
 
     private void printMethod(PrintWriter out, ClassNode clazz, MethodNode methodNode) {
-        if (methodNode.getName().equals("<clinit>")) return;
+        if (methodNode.isStaticConstructor()) return;
         if (methodNode.isPrivate() || !Utilities.isJavaIdentifier(methodNode.getName())) return;
         if (methodNode.isSynthetic() && methodNode.getName().equals("$getStaticMetaClass")) return;
 
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
index b54ffed..df5fa2c 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
@@ -231,7 +231,7 @@ public class TraitASTTransformation extends AbstractASTTransformation implements
                 }
                 if (!methodNode.isAbstract()) {
                     MethodNode newMethod = processMethod(cNode, helper, methodNode, fieldHelper, fieldNames);
-                    if (methodNode.getName().equals("<clinit>")) {
+                    if (methodNode.isStaticConstructor()) {
                         staticInitStatements = getCodeAsBlock(newMethod).getStatements();
                     } else {
                         // add non-abstract methods; abstract methods covered from trait interface