diff options
author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2017-03-22 23:32:12 +0100 |
---|---|---|
committer | Reinier Zwitserloot <reinier@zwitserloot.com> | 2017-03-22 23:32:12 +0100 |
commit | 11fdfb56f735dde042aebd9be6e4b488edfa0d84 (patch) | |
tree | d49029e2266493f4fc94f6393b1ac9b036176db1 /src/core/lombok/eclipse | |
parent | f8f9e2a0254082219596e8e91ee6aea9e0262dce (diff) | |
download | lombok-11fdfb56f735dde042aebd9be6e4b488edfa0d84.tar.gz lombok-11fdfb56f735dde042aebd9be6e4b488edfa0d84.tar.bz2 lombok-11fdfb56f735dde042aebd9be6e4b488edfa0d84.zip |
Builder.Default now throws out a few more warnings if misused.
Diffstat (limited to 'src/core/lombok/eclipse')
-rw-r--r-- | src/core/lombok/eclipse/handlers/HandleBuilder.java | 31 | ||||
-rw-r--r-- | src/core/lombok/eclipse/handlers/HandleBuilderDefault.java | 25 |
2 files changed, 41 insertions, 15 deletions
diff --git a/src/core/lombok/eclipse/handlers/HandleBuilder.java b/src/core/lombok/eclipse/handlers/HandleBuilder.java index ae080c96..42d53a69 100644 --- a/src/core/lombok/eclipse/handlers/HandleBuilder.java +++ b/src/core/lombok/eclipse/handlers/HandleBuilder.java @@ -191,6 +191,17 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> { EclipseNode isDefault = findAnnotation(Builder.Default.class, fieldNode); boolean isFinal = ((fd.modifiers & ClassFileConstants.AccFinal) != 0) || (valuePresent && !hasAnnotation(NonFinal.class, fieldNode)); + BuilderFieldData bfd = new BuilderFieldData(); + bfd.rawName = fieldNode.getName().toCharArray(); + bfd.name = removePrefixFromField(fieldNode); + bfd.type = fd.type; + bfd.singularData = getSingularData(fieldNode, ast); + + if (bfd.singularData != null && isDefault != null) { + isDefault.addError("@Builder.Default and @Singular cannot be mixed."); + isDefault = null; + } + if (fd.initialization == null && isDefault != null) { isDefault.addWarning("@Builder.Default requires an initializing expression (' = something;')."); isDefault = null; @@ -201,22 +212,12 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> { fieldNode.addWarning("@Builder will ignore the initializing expression entirely. If you want the initializing expression to serve as default, add @Builder.Default. if it is not supposed to be settable during building, add @Builder.Constant."); } - BuilderFieldData bfd = new BuilderFieldData(); - bfd.rawName = fieldNode.getName().toCharArray(); - bfd.name = removePrefixFromField(fieldNode); - bfd.type = fd.type; - bfd.singularData = getSingularData(fieldNode, ast); if (isDefault != null) { - if (bfd.singularData != null) { - isDefault.addError("@Builder.Default and @Singular cannot be mixed."); - isDefault = null; - } else { - bfd.nameOfDefaultProvider = prefixWith(DEFAULT_PREFIX, bfd.name); - bfd.nameOfSetFlag = prefixWith(bfd.name, SET_PREFIX); - - MethodDeclaration md = generateDefaultProvider(bfd.nameOfDefaultProvider, fieldNode, ast); - if (md != null) injectMethod(tdParent, md); - } + bfd.nameOfDefaultProvider = prefixWith(DEFAULT_PREFIX, bfd.name); + bfd.nameOfSetFlag = prefixWith(bfd.name, SET_PREFIX); + + MethodDeclaration md = generateDefaultProvider(bfd.nameOfDefaultProvider, fieldNode, ast); + if (md != null) injectMethod(tdParent, md); } addObtainVia(bfd, fieldNode); builderFields.add(bfd); diff --git a/src/core/lombok/eclipse/handlers/HandleBuilderDefault.java b/src/core/lombok/eclipse/handlers/HandleBuilderDefault.java new file mode 100644 index 00000000..da184d0b --- /dev/null +++ b/src/core/lombok/eclipse/handlers/HandleBuilderDefault.java @@ -0,0 +1,25 @@ +package lombok.eclipse.handlers; + +import static lombok.eclipse.handlers.EclipseHandlerUtil.*; +import org.eclipse.jdt.internal.compiler.ast.Annotation; +import org.mangosdk.spi.ProviderFor; + +import lombok.Builder; +import lombok.core.AST.Kind; +import lombok.core.AnnotationValues; +import lombok.core.HandlerPriority; +import lombok.eclipse.EclipseAnnotationHandler; +import lombok.eclipse.EclipseNode; + +@ProviderFor(EclipseAnnotationHandler.class) +@HandlerPriority(-1025) //HandleBuilder's level, minus one. +public class HandleBuilderDefault extends EclipseAnnotationHandler<Builder.Default> { + @Override public void handle(AnnotationValues<Builder.Default> annotation, Annotation ast, EclipseNode annotationNode) { + EclipseNode annotatedField = annotationNode.up(); + if (annotatedField.getKind() != Kind.FIELD) return; + EclipseNode classWithAnnotatedField = annotatedField.up(); + if (!hasAnnotation(Builder.class, classWithAnnotatedField)) { + annotationNode.addWarning("@Builder.Default requires @Builder on the class for it to mean anything."); + } + } +} |