aboutsummaryrefslogtreecommitdiff
path: root/src/core/lombok/eclipse
diff options
context:
space:
mode:
authorReinier Zwitserloot <reinier@zwitserloot.com>2012-08-06 20:37:21 +0200
committerReinier Zwitserloot <reinier@zwitserloot.com>2012-08-06 20:37:21 +0200
commit87f763a94c87b03da269d110c44e7e750ddf5211 (patch)
tree05d59604320510e4bb7d5014917ba275e9061e5a /src/core/lombok/eclipse
parenteb4cbcd8bbd7bf7784aa229e9b6c5fe0670fa7a5 (diff)
parent34055fcdff786c9b809ce1a08c1c9218968ebc7d (diff)
downloadlombok-87f763a94c87b03da269d110c44e7e750ddf5211.tar.gz
lombok-87f763a94c87b03da269d110c44e7e750ddf5211.tar.bz2
lombok-87f763a94c87b03da269d110c44e7e750ddf5211.zip
Merge branch 'master' into wither
Conflicts: src/core/lombok/javac/handlers/JavacHandlerUtil.java
Diffstat (limited to 'src/core/lombok/eclipse')
-rw-r--r--src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java11
-rw-r--r--src/core/lombok/eclipse/handlers/HandleConstructor.java15
2 files changed, 18 insertions, 8 deletions
diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
index 8b330816..ed18dd45 100644
--- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
+++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
@@ -798,18 +798,19 @@ public class EclipseHandlerUtil {
}
}
- private static final Map<FieldDeclaration, GetterMethod> generatedLazyGetters = new WeakHashMap<FieldDeclaration, GetterMethod>();
+ private static final Map<FieldDeclaration, Object> generatedLazyGettersWithPrimitiveBoolean = new WeakHashMap<FieldDeclaration, Object>();
+ private static final Object MARKER = new Object();
static void registerCreatedLazyGetter(FieldDeclaration field, char[] methodName, TypeReference returnType) {
- generatedLazyGetters.put(field, new GetterMethod(methodName, returnType));
+ if (!nameEquals(returnType.getTypeName(), "boolean") || returnType.dimensions() > 0) return;
+ generatedLazyGettersWithPrimitiveBoolean.put(field, MARKER);
}
private static GetterMethod findGetter(EclipseNode field) {
FieldDeclaration fieldDeclaration = (FieldDeclaration) field.get();
- GetterMethod gm = generatedLazyGetters.get(fieldDeclaration);
- if (gm != null) return gm;
+ boolean forceBool = generatedLazyGettersWithPrimitiveBoolean.containsKey(fieldDeclaration);
TypeReference fieldType = fieldDeclaration.type;
- boolean isBoolean = nameEquals(fieldType.getTypeName(), "boolean") && fieldType.dimensions() == 0;
+ boolean isBoolean = forceBool || (nameEquals(fieldType.getTypeName(), "boolean") && fieldType.dimensions() == 0);
EclipseNode typeNode = field.up();
for (String potentialGetterName : toAllGetterNames(field, isBoolean)) {
diff --git a/src/core/lombok/eclipse/handlers/HandleConstructor.java b/src/core/lombok/eclipse/handlers/HandleConstructor.java
index eec41577..25d47870 100644
--- a/src/core/lombok/eclipse/handlers/HandleConstructor.java
+++ b/src/core/lombok/eclipse/handlers/HandleConstructor.java
@@ -156,20 +156,29 @@ public class HandleConstructor {
}
public void generateConstructor(EclipseNode typeNode, AccessLevel level, List<EclipseNode> fields, String staticName, boolean skipIfConstructorExists, boolean suppressConstructorProperties, ASTNode source) {
+ boolean staticConstrRequired = staticName != null && !staticName.equals("");
+
if (skipIfConstructorExists && constructorExists(typeNode) != MemberExistsResult.NOT_EXISTS) return;
if (skipIfConstructorExists) {
for (EclipseNode child : typeNode.down()) {
if (child.getKind() == Kind.ANNOTATION) {
if (annotationTypeMatches(NoArgsConstructor.class, child) ||
annotationTypeMatches(AllArgsConstructor.class, child) ||
- annotationTypeMatches(RequiredArgsConstructor.class, child))
+ annotationTypeMatches(RequiredArgsConstructor.class, child)) {
+
+ if (staticConstrRequired) {
+ // @Data has asked us to generate a constructor, but we're going to skip this instruction, as an explicit 'make a constructor' annotation
+ // will take care of it. However, @Data also wants a specific static name; this will be ignored; the appropriate way to do this is to use
+ // the 'staticName' parameter of the @XArgsConstructor you've stuck on your type.
+ // We should warn that we're ignoring @Data's 'staticConstructor' param.
+ typeNode.addWarning("Ignoring static constructor name: explicit @XxxArgsConstructor annotation present; its `staticName` parameter will be used.", source.sourceStart, source.sourceEnd);
+ }
return;
+ }
}
}
}
- boolean staticConstrRequired = staticName != null && !staticName.equals("");
-
ConstructorDeclaration constr = createConstructor(staticConstrRequired ? AccessLevel.PRIVATE : level, typeNode, fields, suppressConstructorProperties, source);
injectMethod(typeNode, constr);
if (staticConstrRequired) {