diff options
author | Reinier Zwitserloot <reinier@zwitserloot.com> | 2018-08-28 00:37:38 +0200 |
---|---|---|
committer | Reinier Zwitserloot <reinier@zwitserloot.com> | 2018-08-28 00:37:54 +0200 |
commit | ef90e2ec2dcea35a22959f2c1295517edf090133 (patch) | |
tree | 32e8c25055b86ce36d80e5abee150ef862d13e99 | |
parent | 572222c54bc379ac322d906c39499e8dd02a4d59 (diff) | |
download | lombok-ef90e2ec2dcea35a22959f2c1295517edf090133.tar.gz lombok-ef90e2ec2dcea35a22959f2c1295517edf090133.tar.bz2 lombok-ef90e2ec2dcea35a22959f2c1295517edf090133.zip |
[fixes #1836] superbuilder didn’t play ball with field prefixes, at least in javac.
10 files changed, 176 insertions, 10 deletions
diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java index 87df6d1b..f89ef061 100644 --- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java +++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java @@ -24,7 +24,6 @@ package lombok.eclipse.handlers; import static lombok.core.handlers.HandlerUtil.*; import static lombok.eclipse.Eclipse.*; import static lombok.eclipse.EclipseAugments.*; -import static lombok.eclipse.handlers.EclipseHandlerUtil.setGeneratedBy; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; diff --git a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java index 413bdd5d..3c07ac55 100644 --- a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java +++ b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java @@ -48,7 +48,6 @@ import org.eclipse.jdt.internal.compiler.ast.FieldReference; import org.eclipse.jdt.internal.compiler.ast.IfStatement; import org.eclipse.jdt.internal.compiler.ast.MessageSend; import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration; -import org.eclipse.jdt.internal.compiler.ast.OperatorIds; import org.eclipse.jdt.internal.compiler.ast.ParameterizedQualifiedTypeReference; import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference; import org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference; @@ -61,7 +60,6 @@ import org.eclipse.jdt.internal.compiler.ast.ThisReference; import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration; import org.eclipse.jdt.internal.compiler.ast.TypeParameter; import org.eclipse.jdt.internal.compiler.ast.TypeReference; -import org.eclipse.jdt.internal.compiler.ast.UnaryExpression; import org.eclipse.jdt.internal.compiler.ast.Wildcard; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; import org.eclipse.jdt.internal.compiler.lookup.ClassScope; diff --git a/src/core/lombok/javac/handlers/HandleSuperBuilder.java b/src/core/lombok/javac/handlers/HandleSuperBuilder.java index 18e74908..b8f572d5 100644 --- a/src/core/lombok/javac/handlers/HandleSuperBuilder.java +++ b/src/core/lombok/javac/handlers/HandleSuperBuilder.java @@ -415,7 +415,7 @@ public class HandleSuperBuilder extends JavacAnnotationHandler<SuperBuilder> { bfd.singularData.getSingularizer().appendBuildCode(bfd.singularData, bfd.originalFieldNode, bfd.type, statements, bfd.name, "b"); rhs = maker.Ident(bfd.singularData.getPluralName()); } else { - rhs = maker.Select(maker.Ident(builderVariableName), bfd.rawName); + rhs = maker.Select(maker.Ident(builderVariableName), bfd.name); } JCFieldAccess fieldInThis = maker.Select(maker.Ident(typeNode.toName("this")), bfd.rawName); diff --git a/test/transform/resource/after-delombok/SuperBuilderWithCustomBuilderMethod.java b/test/transform/resource/after-delombok/SuperBuilderWithCustomBuilderMethod.java index 21a9db07..fc303583 100644 --- a/test/transform/resource/after-delombok/SuperBuilderWithCustomBuilderMethod.java +++ b/test/transform/resource/after-delombok/SuperBuilderWithCustomBuilderMethod.java @@ -48,7 +48,7 @@ public class SuperBuilderWithCustomBuilderMethod { }
@java.lang.Override
@java.lang.SuppressWarnings("all")
- protected ParentBuilderImpl self() {
+ protected ParentBuilderImpl<A> self() {
return this;
}
@java.lang.Override
@@ -111,7 +111,7 @@ public class SuperBuilderWithCustomBuilderMethod { }
@java.lang.Override
@java.lang.SuppressWarnings("all")
- protected ChildBuilderImpl self() {
+ protected ChildBuilderImpl<A> self() {
return this;
}
@java.lang.Override
diff --git a/test/transform/resource/after-delombok/SuperBuilderWithDefaults.java b/test/transform/resource/after-delombok/SuperBuilderWithDefaults.java index 17707bf5..842b7e55 100644 --- a/test/transform/resource/after-delombok/SuperBuilderWithDefaults.java +++ b/test/transform/resource/after-delombok/SuperBuilderWithDefaults.java @@ -50,7 +50,7 @@ public class SuperBuilderWithDefaults { }
@java.lang.Override
@java.lang.SuppressWarnings("all")
- protected ParentBuilderImpl self() {
+ protected ParentBuilderImpl<N> self() {
return this;
}
@java.lang.Override
diff --git a/test/transform/resource/after-delombok/SuperBuilderWithPrefixes.java b/test/transform/resource/after-delombok/SuperBuilderWithPrefixes.java new file mode 100644 index 00000000..2fb2dcca --- /dev/null +++ b/test/transform/resource/after-delombok/SuperBuilderWithPrefixes.java @@ -0,0 +1,87 @@ +class SuperBuilderWithPrefixes { + int mField; + int xOtherField; + java.util.List<String> mItems; + @java.lang.SuppressWarnings("all") + public static abstract class SuperBuilderWithPrefixesBuilder<C extends SuperBuilderWithPrefixes, B extends SuperBuilderWithPrefixesBuilder<C, B>> { + @java.lang.SuppressWarnings("all") + private int field; + @java.lang.SuppressWarnings("all") + private int otherField; + @java.lang.SuppressWarnings("all") + private java.util.ArrayList<String> items; + @java.lang.SuppressWarnings("all") + protected abstract B self(); + @java.lang.SuppressWarnings("all") + public abstract C build(); + @java.lang.SuppressWarnings("all") + public B field(final int field) { + this.field = field; + return self(); + } + @java.lang.SuppressWarnings("all") + public B otherField(final int otherField) { + this.otherField = otherField; + return self(); + } + @java.lang.SuppressWarnings("all") + public B item(final String item) { + if (this.items == null) this.items = new java.util.ArrayList<String>(); + this.items.add(item); + return self(); + } + @java.lang.SuppressWarnings("all") + public B items(final java.util.Collection<? extends String> items) { + if (this.items == null) this.items = new java.util.ArrayList<String>(); + this.items.addAll(items); + return self(); + } + @java.lang.SuppressWarnings("all") + public B clearItems() { + if (this.items != null) this.items.clear(); + return self(); + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + public java.lang.String toString() { + return "SuperBuilderWithPrefixes.SuperBuilderWithPrefixesBuilder(field=" + this.field + ", otherField=" + this.otherField + ", items=" + this.items + ")"; + } + } + @java.lang.SuppressWarnings("all") + private static final class SuperBuilderWithPrefixesBuilderImpl extends SuperBuilderWithPrefixesBuilder<SuperBuilderWithPrefixes, SuperBuilderWithPrefixesBuilderImpl> { + @java.lang.SuppressWarnings("all") + private SuperBuilderWithPrefixesBuilderImpl() { + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + protected SuperBuilderWithPrefixesBuilderImpl self() { + return this; + } + @java.lang.Override + @java.lang.SuppressWarnings("all") + public SuperBuilderWithPrefixes build() { + return new SuperBuilderWithPrefixes(this); + } + } + @java.lang.SuppressWarnings("all") + protected SuperBuilderWithPrefixes(final SuperBuilderWithPrefixesBuilder<?, ?> b) { + this.mField = b.field; + this.xOtherField = b.otherField; + java.util.List<String> items; + switch (b.items == null ? 0 : b.items.size()) { + case 0: + items = java.util.Collections.emptyList(); + break; + case 1: + items = java.util.Collections.singletonList(b.items.get(0)); + break; + default: + items = java.util.Collections.unmodifiableList(new java.util.ArrayList<String>(b.items)); + } + this.mItems = items; + } + @java.lang.SuppressWarnings("all") + public static SuperBuilderWithPrefixesBuilder<?, ?> builder() { + return new SuperBuilderWithPrefixesBuilderImpl(); + } +}
\ No newline at end of file diff --git a/test/transform/resource/after-ecj/SuperBuilderWithCustomBuilderMethod.java b/test/transform/resource/after-ecj/SuperBuilderWithCustomBuilderMethod.java index fe4938bf..ed0655c7 100644 --- a/test/transform/resource/after-ecj/SuperBuilderWithCustomBuilderMethod.java +++ b/test/transform/resource/after-ecj/SuperBuilderWithCustomBuilderMethod.java @@ -38,7 +38,7 @@ public class SuperBuilderWithCustomBuilderMethod { private ParentBuilderImpl() {
super();
}
- protected @java.lang.Override @java.lang.SuppressWarnings("all") ParentBuilderImpl self() {
+ protected @java.lang.Override @java.lang.SuppressWarnings("all") ParentBuilderImpl<A> self() {
return this;
}
public @java.lang.Override @java.lang.SuppressWarnings("all") Parent<A> build() {
@@ -87,7 +87,7 @@ public class SuperBuilderWithCustomBuilderMethod { private ChildBuilderImpl() {
super();
}
- protected @java.lang.Override @java.lang.SuppressWarnings("all") ChildBuilderImpl self() {
+ protected @java.lang.Override @java.lang.SuppressWarnings("all") ChildBuilderImpl<A> self() {
return this;
}
public @java.lang.Override @java.lang.SuppressWarnings("all") Child<A> build() {
diff --git a/test/transform/resource/after-ecj/SuperBuilderWithDefaults.java b/test/transform/resource/after-ecj/SuperBuilderWithDefaults.java index ef0713c5..e259b68d 100644 --- a/test/transform/resource/after-ecj/SuperBuilderWithDefaults.java +++ b/test/transform/resource/after-ecj/SuperBuilderWithDefaults.java @@ -29,7 +29,7 @@ public class SuperBuilderWithDefaults { private ParentBuilderImpl() {
super();
}
- protected @java.lang.Override @java.lang.SuppressWarnings("all") ParentBuilderImpl self() {
+ protected @java.lang.Override @java.lang.SuppressWarnings("all") ParentBuilderImpl<N> self() {
return this;
}
public @java.lang.Override @java.lang.SuppressWarnings("all") Parent<N> build() {
diff --git a/test/transform/resource/after-ecj/SuperBuilderWithPrefixes.java b/test/transform/resource/after-ecj/SuperBuilderWithPrefixes.java new file mode 100644 index 00000000..33400b3c --- /dev/null +++ b/test/transform/resource/after-ecj/SuperBuilderWithPrefixes.java @@ -0,0 +1,74 @@ +@lombok.experimental.SuperBuilder class SuperBuilderWithPrefixes { + public static abstract @java.lang.SuppressWarnings("all") class SuperBuilderWithPrefixesBuilder<C extends SuperBuilderWithPrefixes, B extends SuperBuilderWithPrefixesBuilder<C, B>> { + private @java.lang.SuppressWarnings("all") int field; + private @java.lang.SuppressWarnings("all") int otherField; + private @java.lang.SuppressWarnings("all") java.util.ArrayList<String> items; + public SuperBuilderWithPrefixesBuilder() { + super(); + } + protected abstract @java.lang.SuppressWarnings("all") B self(); + public abstract @java.lang.SuppressWarnings("all") C build(); + public @java.lang.SuppressWarnings("all") B field(final int field) { + this.field = field; + return self(); + } + public @java.lang.SuppressWarnings("all") B otherField(final int otherField) { + this.otherField = otherField; + return self(); + } + public @java.lang.SuppressWarnings("all") B item(String item) { + if ((this.items == null)) + this.items = new java.util.ArrayList<String>(); + this.items.add(item); + return self(); + } + public @java.lang.SuppressWarnings("all") B items(java.util.Collection<? extends String> items) { + if ((this.items == null)) + this.items = new java.util.ArrayList<String>(); + this.items.addAll(items); + return self(); + } + public @java.lang.SuppressWarnings("all") B clearItems() { + if ((this.items != null)) + this.items.clear(); + return self(); + } + public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { + return (((((("SuperBuilderWithPrefixes.SuperBuilderWithPrefixesBuilder(field=" + this.field) + ", otherField=") + this.otherField) + ", items=") + this.items) + ")"); + } + } + private static final @java.lang.SuppressWarnings("all") class SuperBuilderWithPrefixesBuilderImpl extends SuperBuilderWithPrefixesBuilder<SuperBuilderWithPrefixes, SuperBuilderWithPrefixesBuilderImpl> { + private SuperBuilderWithPrefixesBuilderImpl() { + super(); + } + protected @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderWithPrefixesBuilderImpl self() { + return this; + } + public @java.lang.Override @java.lang.SuppressWarnings("all") SuperBuilderWithPrefixes build() { + return new SuperBuilderWithPrefixes(this); + } + } + int mField; + int xOtherField; + @lombok.Singular java.util.List<String> mItems; + protected @java.lang.SuppressWarnings("all") SuperBuilderWithPrefixes(final SuperBuilderWithPrefixesBuilder<?, ?> b) { + super(); + this.mField = b.field; + this.xOtherField = b.otherField; + java.util.List<String> items; + switch (((b.items == null) ? 0 : b.items.size())) { + case 0 : + items = java.util.Collections.emptyList(); + break; + case 1 : + items = java.util.Collections.singletonList(b.items.get(0)); + break; + default : + items = java.util.Collections.unmodifiableList(new java.util.ArrayList<String>(b.items)); + } + this.mItems = items; + } + public static @java.lang.SuppressWarnings("all") SuperBuilderWithPrefixesBuilder<?, ?> builder() { + return new SuperBuilderWithPrefixesBuilderImpl(); + } +} diff --git a/test/transform/resource/before/SuperBuilderWithPrefixes.java b/test/transform/resource/before/SuperBuilderWithPrefixes.java new file mode 100644 index 00000000..b15c9607 --- /dev/null +++ b/test/transform/resource/before/SuperBuilderWithPrefixes.java @@ -0,0 +1,8 @@ +//CONF: lombok.accessors.prefix += m +//CONF: lombok.accessors.prefix += x +@lombok.experimental.SuperBuilder +class SuperBuilderWithPrefixes { + int mField; + int xOtherField; + @lombok.Singular java.util.List<String> mItems; +} |