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