aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/javac/handlers
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2011-01-29 16:54:14 +0100
committerReinier Zwitserloot <reinier@zwitserloot.com>2011-02-07 21:35:34 +0100
commitc98cec7d2ddceddcc0f127185912be4f826a6caa (patch)
treedc8c50a3ac256a08faac8adde76904bca004cbd8 /src/core/lombok/javac/handlers
parentaab3faa3cb43b4a854b5d094f1ef80eb39543bfb (diff)
downloadlombok-c98cec7d2ddceddcc0f127185912be4f826a6caa.tar.gz
lombok-c98cec7d2ddceddcc0f127185912be4f826a6caa.tar.bz2
lombok-c98cec7d2ddceddcc0f127185912be4f826a6caa.zip
Presence of isFoo(), hasFoo(), and getFoo(), as well as properties named 'isFoo', 'hasFoo', or 'getFoo' would trigger specialized handling for @Getter/@Setter. However, this special handling broke the bean spec, and has been simplified: Only fields named 'isFoo', and only if that field's type is 'boolean', results in both 'isFoo' and 'foo' being considered as possible property names for this property, with 'foo' preferred, so that @Getter boolean isFoo will generate setFoo and isFoo methods, not setIsFoo and isIsFoo.
Fixes issue #148
Diffstat (limited to 'src/core/lombok/javac/handlers')
-rw-r--r--src/core/lombok/javac/handlers/HandleSetter.java27
-rw-r--r--src/core/lombok/javac/handlers/JavacHandlerUtil.java16
2 files changed, 31 insertions, 12 deletions
diff --git a/src/core/lombok/javac/handlers/HandleSetter.java b/src/core/lombok/javac/handlers/HandleSetter.java
index 6dd88abd..ec5195ac 100644
--- a/src/core/lombok/javac/handlers/HandleSetter.java
+++ b/src/core/lombok/javac/handlers/HandleSetter.java
@@ -174,17 +174,22 @@ public class HandleSetter implements JavacAnnotationHandler<Setter> {
JCVariableDecl fieldDecl = (JCVariableDecl)fieldNode.get();
String methodName = toSetterName(fieldDecl);
- switch (methodExists(methodName, fieldNode, false)) {
- case EXISTS_BY_LOMBOK:
- return true;
- case EXISTS_BY_USER:
- if (whineIfExists) errorNode.addWarning(
- String.format("Not generating %s(%s %s): A method with that name already exists",
- methodName, fieldDecl.vartype, fieldDecl.name));
- return true;
- default:
- case NOT_EXISTS:
- //continue with creating the setter
+ for (String altName : toAllSetterNames(fieldDecl)) {
+ switch (methodExists(altName, fieldNode, false)) {
+ case EXISTS_BY_LOMBOK:
+ return true;
+ case EXISTS_BY_USER:
+ if (whineIfExists) {
+ String altNameExpl = "";
+ if (!altName.equals(methodName)) altNameExpl = String.format(" (%s)", altName);
+ errorNode.addWarning(
+ String.format("Not generating %s(): A method with that name already exists%s", methodName, altNameExpl));
+ }
+ return true;
+ default:
+ case NOT_EXISTS:
+ //continue scanning the other alt names.
+ }
}
long access = toJavacModifier(level) | (fieldDecl.mods.flags & Flags.STATIC);
diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java
index aa4e1bb2..1fb72dfa 100644
--- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java
+++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java
@@ -159,6 +159,18 @@ public class JavacHandlerUtil {
}
/**
+ * Translates the given field into all possible setter names.
+ * Convenient wrapper around {@link TransformationsUtil#toAllSetterNames(CharSequence, boolean)}.
+ */
+ public static java.util.List<String> toAllSetterNames(JCVariableDecl field) {
+ CharSequence fieldName = field.name;
+
+ boolean isBoolean = field.vartype.toString().equals("boolean");
+
+ return TransformationsUtil.toAllSetterNames(fieldName, isBoolean);
+ }
+
+ /**
* @return the likely setter name for the stated field. (e.g. private boolean foo; to setFoo).
*
* Convenient wrapper around {@link TransformationsUtil#toSetterName(CharSequence)}.
@@ -166,7 +178,9 @@ public class JavacHandlerUtil {
public static String toSetterName(JCVariableDecl field) {
CharSequence fieldName = field.name;
- return TransformationsUtil.toSetterName(fieldName);
+ boolean isBoolean = field.vartype.toString().equals("boolean");
+
+ return TransformationsUtil.toSetterName(fieldName, isBoolean);
}
/** Serves as return value for the methods that check for the existence of fields and methods. */