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 2020/07/09 17:25:09 UTC
[groovy] 01/01: GROOVY-9601: reduce checks made by findClassMember
and getPropertyName
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY-9601
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 06527afebb22986286b8a1e9393bcffc608390f5
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Thu Jul 9 12:24:50 2020 -0500
GROOVY-9601: reduce checks made by findClassMember and getPropertyName
---
.../org/apache/groovy/ast/tools/MethodNodeUtils.java | 6 +++---
.../groovy/classgen/VariableScopeVisitor.java | 19 ++++++++++---------
2 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/src/main/java/org/apache/groovy/ast/tools/MethodNodeUtils.java b/src/main/java/org/apache/groovy/ast/tools/MethodNodeUtils.java
index 7bb057cb..190462c 100644
--- a/src/main/java/org/apache/groovy/ast/tools/MethodNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/MethodNodeUtils.java
@@ -86,17 +86,17 @@ public class MethodNodeUtils {
if (nameLength > 2) {
switch (name.charAt(0)) {
case 'g':
- if (nameLength > 3 && name.charAt(1) == 'e' && name.charAt(2) == 't' && mNode.getParameters().length == 0 && !ClassHelper.VOID_TYPE.equals(mNode.getReturnType())) {
+ if (nameLength > 3 && name.charAt(1) == 'e' && name.charAt(2) == 't' && mNode.getParameters().length == 0 && !mNode.getReturnType().equals(ClassHelper.VOID_TYPE)) {
return decapitalize(name.substring(3));
}
break;
case 's':
- if (nameLength > 3 && name.charAt(1) == 'e' && name.charAt(2) == 't' && mNode.getParameters().length == 1 /*&& ClassHelper.VOID_TYPE.equals(mNode.getReturnType())*/) {
+ if (nameLength > 3 && name.charAt(1) == 'e' && name.charAt(2) == 't' && mNode.getParameters().length == 1 /*&& mNode.getReturnType().equals(ClassHelper.VOID_TYPE)*/) {
return decapitalize(name.substring(3));
}
break;
case 'i':
- if (name.charAt(1) == 's' && mNode.getParameters().length == 0 && (ClassHelper.boolean_TYPE.equals(mNode.getReturnType()) /*|| ClassHelper.Boolean_TYPE.equals(mNode.getReturnType())*/)) {
+ if (name.charAt(1) == 's' && mNode.getParameters().length == 0 && (mNode.getReturnType().equals(ClassHelper.boolean_TYPE) /*|| mNode.getReturnType().equals(ClassHelper.Boolean_TYPE)*/)) {
return decapitalize(name.substring(2));
}
break;
diff --git a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
index b558b21..fbb3b36 100644
--- a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
@@ -167,7 +167,7 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
}
private Variable findClassMember(final ClassNode node, final String name) {
- for (ClassNode cn = node; cn != null; cn = cn.getSuperClass()) {
+ for (ClassNode cn = node; cn != null && !cn.equals(ClassHelper.OBJECT_TYPE); cn = cn.getSuperClass()) {
if (cn.isScript()) {
return new DynamicVariable(name, false);
}
@@ -181,14 +181,15 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
}
for (MethodNode mn : cn.getMethods()) {
- if (!mn.isAbstract() && name.equals(getPropertyName(mn))) {
- PropertyNode property = new PropertyNode(name, mn.getModifiers(), ClassHelper.OBJECT_TYPE, cn, null, null, null);
- final FieldNode field = property.getField();
- field.setHasNoRealSourcePosition(true);
- field.setSynthetic(true);
- field.setDeclaringClass(cn);
- property.setDeclaringClass(cn);
- return property;
+ if ((!mn.isAbstract() || cn.isAbstract()) && name.equals(getPropertyName(mn))) {
+ FieldNode fn = new FieldNode(name, mn.getModifiers() & 0xF, ClassHelper.OBJECT_TYPE, cn, null);
+ fn.setHasNoRealSourcePosition(true);
+ fn.setDeclaringClass(cn);
+ fn.setSynthetic(true);
+
+ PropertyNode pn = new PropertyNode(fn, fn.getModifiers(), null, null);
+ pn.setDeclaringClass(cn);
+ return pn;
}
}