You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2020/09/20 05:00:34 UTC
[groovy] branch master updated: GROOVY-9744: PropertyNode should be
enriched to support getter/setter names (closes #1370)
This is an automated email from the ASF dual-hosted git repository.
paulk 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 3c02115 GROOVY-9744: PropertyNode should be enriched to support getter/setter names (closes #1370)
3c02115 is described below
commit 3c02115abd414f865d31e7dc146becf94c7310e5
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 16 14:40:10 2020 +1000
GROOVY-9744: PropertyNode should be enriched to support getter/setter names (closes #1370)
---
.../groovy/beans/BindableASTTransformation.java | 14 ++++----
.../groovy/beans/VetoableASTTransformation.java | 13 ++++----
src/main/java/groovy/lang/MetaProperty.java | 2 +-
.../java/org/codehaus/groovy/ast/PropertyNode.java | 36 +++++++++++++++++++++
.../codehaus/groovy/ast/tools/GeneralUtils.java | 37 ++++++++++++++--------
.../groovy/classgen/AsmClassGenerator.java | 6 ++--
.../groovy/classgen/ClassCompletionVerifier.java | 10 +++---
.../org/codehaus/groovy/classgen/Verifier.java | 6 ++--
.../groovy/control/StaticImportVisitor.java | 3 +-
.../EqualsAndHashCodeASTTransformation.java | 5 ++-
.../transform/ImmutableASTTransformation.java | 5 ++-
.../transform/trait/TraitASTTransformation.java | 4 +--
12 files changed, 90 insertions(+), 51 deletions(-)
diff --git a/src/main/java/groovy/beans/BindableASTTransformation.java b/src/main/java/groovy/beans/BindableASTTransformation.java
index f20dbc1..c0e863d 100644
--- a/src/main/java/groovy/beans/BindableASTTransformation.java
+++ b/src/main/java/groovy/beans/BindableASTTransformation.java
@@ -42,7 +42,6 @@ import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
-import static org.apache.groovy.util.BeanUtils.capitalize;
import static org.codehaus.groovy.ast.tools.GeneralUtils.args;
import static org.codehaus.groovy.ast.tools.GeneralUtils.assignX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.callThisX;
@@ -51,7 +50,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.declS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.fieldX;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
@@ -172,9 +170,9 @@ public class BindableASTTransformation implements ASTTransformation, Opcodes {
/*
* Wrap an existing setter.
*/
- private static void wrapSetterMethod(ClassNode classNode, String propertyName) {
- String getterName = "get" + capitalize(propertyName);
- MethodNode setter = classNode.getSetterMethod(getSetterName(propertyName));
+ private static void wrapSetterMethod(ClassNode classNode, PropertyNode propertyNode) {
+ String getterName = propertyNode.getGetterName();
+ MethodNode setter = classNode.getSetterMethod(propertyNode.getSetterName());
if (setter != null) {
// Get the existing code block
@@ -194,7 +192,7 @@ public class BindableASTTransformation implements ASTTransformation, Opcodes {
block.addStatement(declS(newValue, callThisX(getterName)));
// add the firePropertyChange method call
- block.addStatement(stmt(callThisX("firePropertyChange", args(constX(propertyName), oldValue, newValue))));
+ block.addStatement(stmt(callThisX("firePropertyChange", args(constX(propertyNode.getName()), oldValue, newValue))));
// replace the existing code block with our new one
setter.setCode(block);
@@ -202,14 +200,14 @@ public class BindableASTTransformation implements ASTTransformation, Opcodes {
}
private void createListenerSetter(ClassNode classNode, PropertyNode propertyNode) {
- String setterName = getSetterName(propertyNode.getName());
+ String setterName = propertyNode.getSetterName();
if (classNode.getMethods(setterName).isEmpty()) {
Statement setterBlock = createBindableStatement(propertyNode, fieldX(propertyNode.getField()));
// create method void <setter>(<type> fieldName)
createSetterMethod(classNode, propertyNode, setterName, setterBlock);
} else {
- wrapSetterMethod(classNode, propertyNode.getName());
+ wrapSetterMethod(classNode, propertyNode);
}
}
diff --git a/src/main/java/groovy/beans/VetoableASTTransformation.java b/src/main/java/groovy/beans/VetoableASTTransformation.java
index 32e3854..7b531dc 100644
--- a/src/main/java/groovy/beans/VetoableASTTransformation.java
+++ b/src/main/java/groovy/beans/VetoableASTTransformation.java
@@ -42,7 +42,6 @@ import java.beans.VetoableChangeListener;
import java.beans.VetoableChangeSupport;
import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
-import static org.apache.groovy.util.BeanUtils.capitalize;
import static org.codehaus.groovy.ast.tools.GeneralUtils.args;
import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.callThisX;
@@ -51,7 +50,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.declS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.fieldX;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
@@ -156,9 +154,10 @@ public class VetoableASTTransformation extends BindableASTTransformation {
/**
* Wrap an existing setter.
*/
- private static void wrapSetterMethod(ClassNode classNode, boolean bindable, String propertyName) {
- String getterName = "get" + capitalize(propertyName);
- MethodNode setter = classNode.getSetterMethod(getSetterName(propertyName));
+ private static void wrapSetterMethod(ClassNode classNode, boolean bindable, PropertyNode propertyNode) {
+ String getterName = propertyNode.getGetterName();
+ String propertyName = propertyNode.getName();
+ MethodNode setter = classNode.getSetterMethod(propertyNode.getSetterName());
if (setter != null) {
// Get the existing code block
@@ -199,7 +198,7 @@ public class VetoableASTTransformation extends BindableASTTransformation {
if (needsVetoableChangeSupport(declaringClass, source)) {
addVetoableChangeSupport(declaringClass);
}
- String setterName = getSetterName(propertyNode.getName());
+ String setterName = propertyNode.getSetterName();
if (declaringClass.getMethods(setterName).isEmpty()) {
Expression fieldExpression = fieldX(propertyNode.getField());
BlockStatement setterBlock = new BlockStatement();
@@ -213,7 +212,7 @@ public class VetoableASTTransformation extends BindableASTTransformation {
// create method void <setter>(<type> fieldName)
createSetterMethod(declaringClass, propertyNode, setterName, setterBlock);
} else {
- wrapSetterMethod(declaringClass, bindable, propertyNode.getName());
+ wrapSetterMethod(declaringClass, bindable, propertyNode);
}
}
diff --git a/src/main/java/groovy/lang/MetaProperty.java b/src/main/java/groovy/lang/MetaProperty.java
index 5318b47..c52eee6 100644
--- a/src/main/java/groovy/lang/MetaProperty.java
+++ b/src/main/java/groovy/lang/MetaProperty.java
@@ -81,7 +81,7 @@ public abstract class MetaProperty {
/**
* Gets the name for the getter for this property
*
- * @return The name of the property. The name is "get"+ the capitalized propertyName
+ * @return The name of the property. The name is "get" + the capitalized propertyName
* or, in the case of boolean values, "is" + the capitalized propertyName
*/
public static String getGetterName(String propertyName, Class type) {
diff --git a/src/main/java/org/codehaus/groovy/ast/PropertyNode.java b/src/main/java/org/codehaus/groovy/ast/PropertyNode.java
index 726aff5..8ed8959 100644
--- a/src/main/java/org/codehaus/groovy/ast/PropertyNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/PropertyNode.java
@@ -18,6 +18,7 @@
*/
package org.codehaus.groovy.ast;
+import groovy.lang.MetaProperty;
import org.codehaus.groovy.ast.expr.Expression;
import org.codehaus.groovy.ast.stmt.Statement;
@@ -25,6 +26,8 @@ import static org.objectweb.asm.Opcodes.ACC_PRIVATE;
import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
import static org.objectweb.asm.Opcodes.ACC_STATIC;
+import static org.apache.groovy.util.BeanUtils.capitalize;
+
/**
* Represents a property (member variable, a getter and setter)
*/
@@ -34,6 +37,8 @@ public class PropertyNode extends AnnotatedNode implements Variable {
private Statement getterBlock;
private Statement setterBlock;
+ private String getterName = null;
+ private String setterName = null;
private final int modifiers;
public PropertyNode(
@@ -66,6 +71,37 @@ public class PropertyNode extends AnnotatedNode implements Variable {
this.setterBlock = setterBlock;
}
+ public String getGetterName() {
+ if (getterName != null) return getterName;
+ String defaultName = "get" + capitalize(getName());
+ if (ClassHelper.boolean_TYPE.equals(getOriginType())
+ && getDeclaringClass().getMethod(defaultName, Parameter.EMPTY_ARRAY) == null) {
+ String altName = "is" + capitalize(getName());
+ if (getDeclaringClass().getMethod(altName, Parameter.EMPTY_ARRAY) != null) {
+ defaultName = altName;
+ }
+ }
+ return defaultName;
+ }
+
+ public void setGetterName(String getterName) {
+ if (getterName == null || getterName.isEmpty()) {
+ throw new IllegalArgumentException("A non-null non-empty getter name is required");
+ }
+ this.getterName = getterName;
+ }
+
+ public String getSetterName() {
+ return setterName != null ? setterName : MetaProperty.getSetterName(getName());
+ }
+
+ public void setSetterName(String setterName) {
+ if (setterName == null || setterName.isEmpty()) {
+ throw new IllegalArgumentException("A non-null non-empty setter name is required");
+ }
+ this.setterName = setterName;
+ }
+
public int getModifiers() {
return modifiers;
}
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
index 862ea4e..fd182e5 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
@@ -79,8 +79,6 @@ import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
-import static org.apache.groovy.util.BeanUtils.capitalize;
-
/**
* Handy methods when working with the Groovy AST
*/
@@ -519,7 +517,7 @@ public class GeneralUtils {
public static Expression getterThisX(final ClassNode annotatedNode, final PropertyNode pNode) {
ClassNode owner = pNode.getDeclaringClass();
if (annotatedNode.equals(owner)) {
- return callThisX(getterName(annotatedNode, pNode));
+ return callThisX(pNode.getGetterName());
}
return propX(varX("this"), pNode.getName());
}
@@ -536,7 +534,7 @@ public class GeneralUtils {
public static Expression getterX(final ClassNode annotatedNode, final Expression receiver, final PropertyNode pNode) {
ClassNode owner = pNode.getDeclaringClass();
if (annotatedNode.equals(owner)) {
- return callX(receiver, getterName(annotatedNode, pNode));
+ return callX(receiver, pNode.getGetterName());
}
return propX(receiver, pNode.getName());
}
@@ -555,7 +553,7 @@ public class GeneralUtils {
@Deprecated
public static BinaryExpression hasEqualPropertyX(final PropertyNode pNode, final Expression other) {
- String getterName = getGetterName(pNode);
+ String getterName = pNode.getGetterName();
return eqX(callThisX(getterName), callX(other, getterName));
}
@@ -871,17 +869,28 @@ public class GeneralUtils {
return ifElseS(equalsNullX(value), assignInit, assignS(fieldExpr, castX(fType, value)));
}
- private static String getterName(final ClassNode annotatedNode, final PropertyNode pNode) {
- String getterName = getGetterName(pNode);
- if (ClassHelper.boolean_TYPE.equals(pNode.getOriginType())
- && annotatedNode.getMethod(getterName, Parameter.EMPTY_ARRAY) == null) {
- getterName = "is" + capitalize(pNode.getName());
- }
- return getterName;
+ /**
+ * Generally preferred to use {@link PropertyNode#getGetterName()} directly.
+ */
+ public static String getGetterName(final PropertyNode pNode) {
+ return pNode.getGetterName();
}
- public static String getGetterName(final PropertyNode pNode) {
- return "get" + capitalize(pNode.getName());
+ /**
+ * WARNING: Avoid this method unless just the name and type are available.
+ * Use {@link #getGetterName(PropertyNode)} if the propertyNode is available.
+ */
+ public static String getGetterName(final String name, final Class<?> type) {
+ return MetaProperty.getGetterName(name, type);
+ }
+
+ /**
+ * WARNING: Avoid this method unless just the name is available.
+ * Use {@link #getGetterName(PropertyNode)} if the propertyNode is available.
+ * Use {@link #getGetterName(String, Class)} if the type is available.
+ */
+ public static String getGetterName(final String name) {
+ return MetaProperty.getGetterName(name, Object.class);
}
public static String getSetterName(final String name) {
diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 1f99040..72024f0 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -126,11 +126,11 @@ import java.util.Objects;
import java.util.Optional;
import static org.apache.groovy.ast.tools.ExpressionUtils.isThisOrSuper;
-import static org.apache.groovy.util.BeanUtils.capitalize;
import static org.codehaus.groovy.ast.tools.GeneralUtils.attrX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.classX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.fieldX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.getGetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.thisPropX;
@@ -1022,7 +1022,7 @@ public class AsmClassGenerator extends ClassGenerator {
ClassNode classNode = controller.getClassNode();
if (!controller.getCompileStack().isLHS()) {
- String methodName = "get" + capitalize(propertyName); // TODO: "is"
+ String methodName = getGetterName(propertyName); // TODO: "is"
callX(pexp.getObjectExpression(), methodName).visit(this);
return true;
}
@@ -1037,7 +1037,7 @@ public class AsmClassGenerator extends ClassGenerator {
}
MethodNode setter = classNode.getSuperClass().getSetterMethod(getSetterName(propertyName));
- MethodNode getter = classNode.getSuperClass().getGetterMethod("get" + capitalize(propertyName));
+ MethodNode getter = classNode.getSuperClass().getGetterMethod(getGetterName(propertyName));
if (fieldNode.isPrivate() && (setter == null || getter == null || !setter.getDeclaringClass().equals(getter.getDeclaringClass()))) {
throw new RuntimeParserException("Cannot access private field[" + propertyName + "] of " + classNode.getName() + "'s super class", pexp);
diff --git a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
index dff9da3..812da1c 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
@@ -61,7 +61,6 @@ import static java.lang.reflect.Modifier.isStrict;
import static java.lang.reflect.Modifier.isSynchronized;
import static java.lang.reflect.Modifier.isTransient;
import static java.lang.reflect.Modifier.isVolatile;
-import static org.apache.groovy.util.BeanUtils.capitalize;
import static org.codehaus.groovy.ast.ClassHelper.VOID_TYPE;
import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
import static org.objectweb.asm.Opcodes.ACC_FINAL;
@@ -541,12 +540,11 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport {
private void checkDuplicateProperties(PropertyNode node) {
ClassNode cn = node.getDeclaringClass();
String name = node.getName();
- String getterName = "get" + capitalize(name);
+ String getterName = node.getGetterName();
if (Character.isUpperCase(name.charAt(0))) {
- for (PropertyNode propNode : cn.getProperties()) {
- String otherName = propNode.getField().getName();
- String otherGetterName = "get" + capitalize(otherName);
- if (node != propNode && getterName.equals(otherGetterName)) {
+ for (PropertyNode otherNode : cn.getProperties()) {
+ String otherName = otherNode.getName();
+ if (node != otherNode && getterName.equals(otherNode.getGetterName())) {
String msg = "The field " + name + " and " + otherName + " on the class " +
cn.getName() + " will result in duplicate JavaBean properties, which is not allowed";
addError(msg, node);
diff --git a/src/main/java/org/codehaus/groovy/classgen/Verifier.java b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
index f6e5ff6..35e5f07 100644
--- a/src/main/java/org/codehaus/groovy/classgen/Verifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
@@ -105,7 +105,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.castX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.declS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.fieldX;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.getGetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
@@ -679,8 +679,8 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
String name = node.getName();
FieldNode field = node.getField();
- String getterName = "get" + capitalize(name);
- String setterName = getSetterName(name);
+ String getterName = getGetterName(name);
+ String setterName = node.getSetterName();
int accessorModifiers = adjustPropertyModifiersForMethod(node);
diff --git a/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java b/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
index de4e174..f92bde2 100644
--- a/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
@@ -62,6 +62,7 @@ import static org.apache.groovy.ast.tools.ClassNodeUtils.isValidAccessorName;
import static org.apache.groovy.ast.tools.ExpressionUtils.transformInlineConstants;
import static org.apache.groovy.util.BeanUtils.capitalize;
import static org.codehaus.groovy.ast.tools.ClosureUtils.getParametersSafe;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.getGetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
/**
@@ -508,7 +509,7 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer {
}
private String getAccessorName(String name) {
- return inLeftExpression ? getSetterName(name) : "get" + capitalize(name);
+ return inLeftExpression ? getSetterName(name) : getGetterName(name);
}
private Expression findStaticPropertyAccessorGivenArgs(ClassNode staticImportType, String propName, Expression args) {
diff --git a/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
index 928b400..76d72e0 100644
--- a/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
@@ -57,7 +57,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.constX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.declS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.equalsNullX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getAllProperties;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.getGetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getInstanceNonPropertyFields;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getterThisX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.hasClassX;
@@ -314,7 +313,7 @@ public class EqualsAndHashCodeASTTransformation extends AbstractASTTransformatio
}
private static BinaryExpression differentSelfRecursivePropertyX(PropertyNode pNode, Expression other) {
- String getterName = getGetterName(pNode);
+ String getterName = pNode.getGetterName();
Expression selfGetter = callThisX(getterName);
Expression otherGetter = callX(other, getterName);
return orX(
@@ -324,7 +323,7 @@ public class EqualsAndHashCodeASTTransformation extends AbstractASTTransformatio
}
private static BinaryExpression bothSelfRecursivePropertyX(PropertyNode pNode, Expression other) {
- String getterName = getGetterName(pNode);
+ String getterName = pNode.getGetterName();
Expression selfGetter = callThisX(getterName);
Expression otherGetter = callX(other, getterName);
return andX(
diff --git a/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java
index f21e50a..785a48a 100644
--- a/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java
@@ -66,7 +66,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.declS;
import static org.codehaus.groovy.ast.tools.GeneralUtils.eqX;
import static org.codehaus.groovy.ast.tools.GeneralUtils.equalsNullX;
-import static org.codehaus.groovy.ast.tools.GeneralUtils.getGetterName;
import static org.codehaus.groovy.ast.tools.GeneralUtils.getInstanceProperties;
import static org.codehaus.groovy.ast.tools.GeneralUtils.hasDeclaredMethod;
import static org.codehaus.groovy.ast.tools.GeneralUtils.ifElseS;
@@ -254,7 +253,7 @@ public class ImmutableASTTransformation extends AbstractASTTransformation implem
),
declS(
localVarX("oldValue", ClassHelper.OBJECT_TYPE),
- callThisX(getGetterName(pNode))
+ callThisX(pNode.getGetterName())
),
ifS(
neX(
@@ -287,7 +286,7 @@ public class ImmutableASTTransformation extends AbstractASTTransformation implem
"put",
args(
constX(pNode.getName()),
- callThisX(getGetterName(pNode))
+ callThisX(pNode.getGetterName())
)
))
)
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 7b6328d..c07cd85 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
@@ -397,8 +397,8 @@ public class TraitASTTransformation extends AbstractASTTransformation implements
FieldNode field = node.getField();
int propNodeModifiers = node.getModifiers() & 0x1F; // GROOVY-3726
- String getterName = GeneralUtils.getGetterName(node);
- String setterName = GeneralUtils.getSetterName(name);
+ String getterName = node.getGetterName();
+ String setterName = node.getSetterName();
Statement getterBlock = node.getGetterBlock();
if (getterBlock == null) {