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/06/15 08:14:12 UTC

[groovy] branch master updated: minor refactor: eliminate dup code for getting setter name

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 0e36e80  minor refactor: eliminate dup code for getting setter name
0e36e80 is described below

commit 0e36e803f4e89a18b805fb709819fa54104aecc0
Author: Paul King <pa...@asert.com.au>
AuthorDate: Mon Jun 15 18:14:02 2020 +1000

    minor refactor: eliminate dup code for getting setter name
---
 src/main/java/groovy/beans/BindableASTTransformation.java     |  5 +++--
 src/main/java/groovy/beans/VetoableASTTransformation.java     |  5 +++--
 .../java/groovy/transform/builder/InitializerStrategy.java    |  8 ++------
 src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java |  3 ++-
 .../java/org/codehaus/groovy/classgen/AsmClassGenerator.java  |  3 ++-
 src/main/java/org/codehaus/groovy/classgen/Verifier.java      |  3 ++-
 .../sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java    |  4 ++--
 .../java/org/codehaus/groovy/control/StaticImportVisitor.java |  3 ++-
 .../codehaus/groovy/transform/DelegateASTTransformation.java  |  6 ++++--
 .../org/codehaus/groovy/transform/FieldASTTransformation.java |  4 ++--
 .../groovy/transform/IndexedPropertyASTTransformation.java    |  3 ++-
 .../org/codehaus/groovy/transform/LazyASTTransformation.java  |  3 ++-
 .../groovy/transform/stc/StaticTypeCheckingVisitor.java       |  5 +++--
 .../src/main/groovy/groovy/cli/commons/CliBuilder.groovy      | 11 ++++-------
 14 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/src/main/java/groovy/beans/BindableASTTransformation.java b/src/main/java/groovy/beans/BindableASTTransformation.java
index 65f0062..f20dbc1 100644
--- a/src/main/java/groovy/beans/BindableASTTransformation.java
+++ b/src/main/java/groovy/beans/BindableASTTransformation.java
@@ -51,6 +51,7 @@ 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;
@@ -173,7 +174,7 @@ public class BindableASTTransformation implements ASTTransformation, Opcodes {
      */
     private static void wrapSetterMethod(ClassNode classNode, String propertyName) {
         String getterName = "get" + capitalize(propertyName);
-        MethodNode setter = classNode.getSetterMethod("set" + capitalize(propertyName));
+        MethodNode setter = classNode.getSetterMethod(getSetterName(propertyName));
 
         if (setter != null) {
             // Get the existing code block
@@ -201,7 +202,7 @@ public class BindableASTTransformation implements ASTTransformation, Opcodes {
     }
 
     private void createListenerSetter(ClassNode classNode, PropertyNode propertyNode) {
-        String setterName = "set" + capitalize(propertyNode.getName());
+        String setterName = getSetterName(propertyNode.getName());
         if (classNode.getMethods(setterName).isEmpty()) {
             Statement setterBlock = createBindableStatement(propertyNode, fieldX(propertyNode.getField()));
 
diff --git a/src/main/java/groovy/beans/VetoableASTTransformation.java b/src/main/java/groovy/beans/VetoableASTTransformation.java
index 5e35dff..32e3854 100644
--- a/src/main/java/groovy/beans/VetoableASTTransformation.java
+++ b/src/main/java/groovy/beans/VetoableASTTransformation.java
@@ -51,6 +51,7 @@ 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;
@@ -157,7 +158,7 @@ public class VetoableASTTransformation extends BindableASTTransformation {
      */
     private static void wrapSetterMethod(ClassNode classNode, boolean bindable, String propertyName) {
         String getterName = "get" + capitalize(propertyName);
-        MethodNode setter = classNode.getSetterMethod("set" + capitalize(propertyName));
+        MethodNode setter = classNode.getSetterMethod(getSetterName(propertyName));
 
         if (setter != null) {
             // Get the existing code block
@@ -198,7 +199,7 @@ public class VetoableASTTransformation extends BindableASTTransformation {
         if (needsVetoableChangeSupport(declaringClass, source)) {
             addVetoableChangeSupport(declaringClass);
         }
-        String setterName = "set" + capitalize(propertyNode.getName());
+        String setterName = getSetterName(propertyNode.getName());
         if (declaringClass.getMethods(setterName).isEmpty()) {
             Expression fieldExpression = fieldX(propertyNode.getField());
             BlockStatement setterBlock = new BlockStatement();
diff --git a/src/main/java/groovy/transform/builder/InitializerStrategy.java b/src/main/java/groovy/transform/builder/InitializerStrategy.java
index 6ce152a..7ccf008 100644
--- a/src/main/java/groovy/transform/builder/InitializerStrategy.java
+++ b/src/main/java/groovy/transform/builder/InitializerStrategy.java
@@ -33,7 +33,7 @@ import org.codehaus.groovy.ast.MethodNode;
 import org.codehaus.groovy.ast.Parameter;
 import org.codehaus.groovy.ast.expr.Expression;
 import org.codehaus.groovy.ast.stmt.BlockStatement;
-import org.codehaus.groovy.classgen.Verifier;
+import org.codehaus.groovy.ast.tools.GeneralUtils;
 import org.codehaus.groovy.transform.AbstractASTTransformation;
 import org.codehaus.groovy.transform.BuilderASTTransformation;
 
@@ -380,14 +380,10 @@ public class InitializerStrategy extends BuilderASTTransformation.AbstractBuilde
             String name = field.getName();
             body.addStatement(
                     stmt(useSetters && !field.isFinal()
-                                    ? callThisX(getSetterName(name), varX(param(field.getType(), name)))
+                                    ? callThisX(GeneralUtils.getSetterName(name), varX(param(field.getType(), name)))
                                     : assignX(propX(varX("this"), field.getName()), varX(param(field.getType(), name)))
                     )
             );
         }
     }
-
-    private static String getSetterName(String name) {
-        return "set" + Verifier.capitalize(name);
-    }
 }
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 12e6653..f91ffb9 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
@@ -18,6 +18,7 @@
  */
 package org.codehaus.groovy.ast.tools;
 
+import groovy.lang.MetaProperty;
 import org.codehaus.groovy.ast.ASTNode;
 import org.codehaus.groovy.ast.AnnotatedNode;
 import org.codehaus.groovy.ast.AnnotationNode;
@@ -857,7 +858,7 @@ public class GeneralUtils {
     }
 
     public static String getSetterName(final String name) {
-        return "set" + capitalize(name);
+        return MetaProperty.getSetterName(name);
     }
 
     /**
diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 3e0eec1..3f0844d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -128,6 +128,7 @@ 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.getSetterName;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.thisPropX;
 import static org.codehaus.groovy.transform.sc.StaticCompilationMetadataKeys.PROPERTY_OWNER;
@@ -1003,7 +1004,7 @@ public class AsmClassGenerator extends ClassGenerator {
     }
 
     private static MethodNode findSetterOfSuperClass(final ClassNode classNode, final FieldNode fieldNode) {
-        String setterMethodName = "set" + capitalize(fieldNode.getName());
+        String setterMethodName = getSetterName(fieldNode.getName());
         return classNode.getSuperClass().getSetterMethod(setterMethodName);
     }
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/Verifier.java b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
index 394ddfa..237cae4 100644
--- a/src/main/java/org/codehaus/groovy/classgen/Verifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
@@ -99,6 +99,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.bytecodeX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.callThisX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.castX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.declS;
+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.varX;
 import static org.codehaus.groovy.ast.tools.GenericsUtils.addMethodGenerics;
@@ -670,7 +671,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
         FieldNode field = node.getField();
 
         String getterName = "get" + capitalize(name);
-        String setterName = "set" + capitalize(name);
+        String setterName = getSetterName(name);
 
         int accessorModifiers = adjustPropertyModifiersForMethod(node);
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
index e7961a7..bf17639 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
@@ -59,7 +59,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import static org.apache.groovy.util.BeanUtils.capitalize;
 import static org.codehaus.groovy.ast.ClassHelper.CLOSURE_TYPE;
 import static org.codehaus.groovy.ast.ClassHelper.char_TYPE;
 import static org.codehaus.groovy.ast.ClassHelper.double_TYPE;
@@ -73,6 +72,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.castX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.classX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.ctorX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.declX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
@@ -288,7 +288,7 @@ public class StaticTypesBinaryExpressionMultiTypeDispatcher extends BinaryExpres
             }
         }
         if (!isAttribute) {
-            String setter = "set" + capitalize(property);
+            String setter = getSetterName(property);
             MethodNode setterMethod = receiverType.getSetterMethod(setter, false);
             ClassNode declaringClass = setterMethod != null ? setterMethod.getDeclaringClass() : null;
             if (isThisExpression && declaringClass != null && declaringClass.equals(controller.getClassNode())) {
diff --git a/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java b/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
index 30b1bbe..f83a84e 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.getSetterName;
 
 /**
  * Visitor to resolve constants and method calls from static imports.
@@ -503,7 +504,7 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer {
     }
 
     private String getAccessorName(String name) {
-        return (inLeftExpression ? "set" : "get") + capitalize(name);
+        return inLeftExpression ? getSetterName(name) : "get" + capitalize(name);
     }
 
     private Expression findStaticPropertyAccessorGivenArgs(ClassNode staticImportType, String propName, Expression args) {
diff --git a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
index 9eeba82..0d4c86c 100644
--- a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
@@ -49,6 +49,7 @@ import java.util.Map;
 import java.util.Set;
 
 import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedMethod;
+import static org.apache.groovy.util.BeanUtils.capitalize;
 import static org.codehaus.groovy.ast.ClassHelper.make;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.callThisX;
@@ -56,6 +57,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.getAllMethods;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.getAllProperties;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.getInterfacesAndSuperInterfaces;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
@@ -210,10 +212,10 @@ public class DelegateASTTransformation extends AbstractASTTransformation {
             String name = pNode.getField().getName();
             pNames.add(name);
             // add getter/setters since Groovy compiler hasn't added property accessors yet
-            String capitalized = Verifier.capitalize(name);
             if ((pNode.getModifiers() & ACC_FINAL) == 0) {
-                mNames.add("set" + capitalized);
+                mNames.add(getSetterName(name));
             }
+            String capitalized = capitalize(name);
             mNames.add("get" + capitalized);
             boolean isPrimBool = pNode.getOriginType().equals(ClassHelper.boolean_TYPE);
             if (isPrimBool) {
diff --git a/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java
index 1c08118..5df75e5 100644
--- a/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java
@@ -53,10 +53,10 @@ import java.util.Iterator;
 import java.util.List;
 
 import static org.apache.groovy.ast.tools.ClassNodeUtils.addGeneratedConstructor;
-import static org.apache.groovy.util.BeanUtils.capitalize;
 import static org.codehaus.groovy.ast.ClassHelper.make;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.assignX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.block;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.nullX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.param;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
@@ -119,7 +119,7 @@ public class FieldASTTransformation extends ClassCodeExpressionTransformer imple
                     addError("Can't have a final field also annotated with @" + OPTION_TYPE.getNameWithoutPackage(), de);
                 }
             } else {
-                String setterName = "set" + capitalize(variableName);
+                String setterName = getSetterName(variableName);
                 cNode.addMethod(setterName, ACC_PUBLIC | ACC_SYNTHETIC, ClassHelper.VOID_TYPE, params(param(ve.getType(), variableName)), ClassNode.EMPTY_ARRAY, block(
                         stmt(assignX(propX(varX("this"), variableName), varX(variableName)))
                 ));
diff --git a/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java
index 82f5378..6f30ab7 100644
--- a/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java
@@ -37,6 +37,7 @@ import static org.apache.groovy.util.BeanUtils.capitalize;
 import static org.codehaus.groovy.ast.ClassHelper.make;
 import static org.codehaus.groovy.ast.ClassHelper.makeWithoutCaching;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.assignS;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.indexX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.params;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt;
@@ -113,7 +114,7 @@ public class IndexedPropertyASTTransformation extends AbstractASTTransformation
                 new Parameter(ClassHelper.int_TYPE, "index"),
                 new Parameter(componentType, "value"));
         body.addStatement(assignS(indexX(varX(fNode), varX(theParams[0])), varX(theParams[1])));
-        addGeneratedMethod(cNode, makeName(fNode, "set"), getModifiers(fNode), ClassHelper.VOID_TYPE, theParams, null, body);
+        addGeneratedMethod(cNode, getSetterName(fNode.getName()), getModifiers(fNode), ClassHelper.VOID_TYPE, theParams, null, body);
     }
 
     private static ClassNode getComponentTypeForList(ClassNode fType) {
diff --git a/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
index 58fd226..c7d3578 100644
--- a/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
@@ -51,6 +51,7 @@ 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.ctorX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.declS;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.getSetterName;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.ifElseS;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.notNullX;
@@ -212,7 +213,7 @@ public class LazyASTTransformation extends AbstractASTTransformation {
     private static void createSoftSetter(FieldNode fieldNode, ClassNode type) {
         final BlockStatement body = new BlockStatement();
         final Expression fieldExpr = varX(fieldNode);
-        final String name = "set" + capitalize(fieldNode.getName().substring(1));
+        final String name = getSetterName(fieldNode.getName().substring(1));
         final Parameter parameter = param(type, "value");
         final Expression paramExpr = varX(parameter);
         body.addStatement(ifElseS(
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 f5485fa..397594e 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -184,6 +184,7 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.block;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.callX;
 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.getSetterName;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.isOrImplements;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.localVarX;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.thisPropX;
@@ -1313,7 +1314,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
                             " for class: " + receiverType.getName(), receiver);
                 } else {
                     ClassNode valueType = getType(entryExpression.getValueExpression());
-                    MethodNode setter = receiverType.getSetterMethod("set" + capitalize(pexp.getPropertyAsString()), false);
+                    MethodNode setter = receiverType.getSetterMethod(getSetterName(pexp.getPropertyAsString()), false);
                     ClassNode toBeAssignedTo = setter == null ? lookup.get() : setter.getParameters()[0].getType();
                     if (!isAssignableTo(valueType, toBeAssignedTo)
                             && !extension.handleIncompatibleAssignment(toBeAssignedTo, valueType, entryExpression)) {
@@ -1517,7 +1518,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
                 getter = allowStaticAccessToMember(getter, staticOnly);
                 if (getter == null) getter = findGetter(current, "is" + capName, pexp.isImplicitThis());
                 getter = allowStaticAccessToMember(getter, staticOnly);
-                List<MethodNode> setters = findSetters(current, "set" + capName, false);
+                List<MethodNode> setters = findSetters(current, getSetterName(propertyName), false);
                 setters = allowStaticAccessToMember(setters, staticOnly);
 
                 // need to visit even if we only look for setters for compatibility
diff --git a/subprojects/groovy-cli-commons/src/main/groovy/groovy/cli/commons/CliBuilder.groovy b/subprojects/groovy-cli-commons/src/main/groovy/groovy/cli/commons/CliBuilder.groovy
index e066ec8..15d6632 100644
--- a/subprojects/groovy-cli-commons/src/main/groovy/groovy/cli/commons/CliBuilder.groovy
+++ b/subprojects/groovy-cli-commons/src/main/groovy/groovy/cli/commons/CliBuilder.groovy
@@ -38,7 +38,7 @@ import java.lang.annotation.Annotation
 import java.lang.reflect.Field
 import java.lang.reflect.Method
 
-import static org.apache.groovy.util.BeanUtils.capitalize
+import static groovy.lang.MetaProperty.getSetterName
 
 /**
  * Provides a builder to assist the processing of command line arguments.
@@ -419,8 +419,7 @@ class CliBuilder {
         }
         optionFields.each { Field f ->
             Annotation annotation = f.getAnnotation(Option)
-            String setterName = "set" + capitalize(f.getName())
-            Method m = optionClass.getMethod(setterName, f.getType())
+            Method m = optionClass.getMethod(getSetterName(f.getName()), f.getType())
             def typedOption = processAddAnnotation(annotation, m, true)
             options.addOption(typedOption.cliOption)
         }
@@ -515,8 +514,7 @@ class CliBuilder {
         }
         optionClass.declaredFields.findAll { it.getAnnotation(Option) }.each { Field f ->
             Annotation annotation = f.getAnnotation(Option)
-            String setterName = "set" + capitalize(f.getName())
-            Method m = optionClass.getMethod(setterName, f.getType())
+            Method m = optionClass.getMethod(getSetterName(f.getName()), f.getType())
             Map names = calculateNames(annotation.longName(), annotation.shortName(), m, true)
             processSetAnnotation(m, t, names.long ?: names.short, cli, true)
         }
@@ -525,8 +523,7 @@ class CliBuilder {
             processSetRemaining(m, remaining, t, cli, namesAreSetters)
         }
         optionClass.declaredFields.findAll{ it.getAnnotation(Unparsed) }.each { Field f ->
-            String setterName = "set" + capitalize(f.getName())
-            Method m = optionClass.getMethod(setterName, f.getType())
+            Method m = optionClass.getMethod(getSetterName(f.getName()), f.getType())
             processSetRemaining(m, remaining, t, cli, namesAreSetters)
         }
     }