aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/changelog.markdown1
-rw-r--r--src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java2
-rwxr-xr-xsrc/core/lombok/eclipse/handlers/EclipseSingularsRecipes.java6
-rwxr-xr-xsrc/core/lombok/eclipse/handlers/HandleBuilder.java27
-rwxr-xr-xsrc/core/lombok/eclipse/handlers/HandleConstructor.java2
-rwxr-xr-xsrc/core/lombok/eclipse/handlers/HandleSuperBuilder.java2
-rw-r--r--src/core/lombok/javac/handlers/HandleBuilder.java13
-rw-r--r--src/core/lombok/javac/handlers/HandleSuperBuilder.java2
-rw-r--r--src/core/lombok/javac/handlers/JavacHandlerUtil.java2
-rw-r--r--src/core/lombok/javac/handlers/JavacSingularsRecipes.java6
-rw-r--r--test/core/src/lombok/DirectoryRunner.java17
-rw-r--r--test/transform/resource/after-delombok/BuilderComplex.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderDefaults.java6
-rw-r--r--test/transform/resource/after-delombok/BuilderDefaultsGenerics.java6
-rw-r--r--test/transform/resource/after-delombok/BuilderDefaultsWarnings.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderGenericMethod.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderInstanceMethod.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderJavadoc.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderSimple.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderSimpleWithSetterPrefix.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderTypeAnnos.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderTypeAnnosWithSetterPrefix.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithAccessors.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithBadNames.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithDeprecated.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithExistingBuilderClass.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithExistingBuilderClassWithSetterPrefix.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithNoBuilderMethod.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithNonNull.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithNonNullWithSetterPrefix.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithRecursiveGenerics.java2
-rw-r--r--test/transform/resource/after-delombok/BuilderWithToBuilder.java4
-rw-r--r--test/transform/resource/after-delombok/BuilderWithTolerate.java2
-rw-r--r--test/transform/resource/after-delombok/CheckerFrameworkBuilder.java4
-rw-r--r--test/transform/resource/after-delombok/ConstructorsWithBuilderDefaults.java4
-rw-r--r--test/transform/resource/after-delombok/ConstructorsWithBuilderDefaults2.java6
-rw-r--r--test/transform/resource/after-delombok/JacksonJsonProperty.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderComplex.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderDefaults.java8
-rw-r--r--test/transform/resource/after-ecj/BuilderDefaultsGenerics.java11
-rw-r--r--test/transform/resource/after-ecj/BuilderDefaultsWarnings.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderGenericMethod.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderInstanceMethod.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderJavadoc.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderSimple.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderSimpleWithSetterPrefix.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderTypeAnnos.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderTypeAnnosWithSetterPrefix.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithAccessors.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithBadNames.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithDeprecated.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithExistingBuilderClass.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithExistingBuilderClassWithSetterPrefix.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithNoBuilderMethod.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithNonNull.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithNonNullWithSetterPrefix.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithRecursiveGenerics.java2
-rw-r--r--test/transform/resource/after-ecj/BuilderWithToBuilder.java4
-rw-r--r--test/transform/resource/after-ecj/BuilderWithTolerate.java2
-rw-r--r--test/transform/resource/after-ecj/CheckerFrameworkBuilder.java5
-rw-r--r--test/transform/resource/after-ecj/ConstructorsWithBuilderDefaults.java5
-rw-r--r--test/transform/resource/after-ecj/ConstructorsWithBuilderDefaults2.java8
-rw-r--r--test/transform/resource/after-ecj/JacksonJsonProperty.java2
63 files changed, 144 insertions, 87 deletions
diff --git a/doc/changelog.markdown b/doc/changelog.markdown
index 13cceff8..40a0e120 100644
--- a/doc/changelog.markdown
+++ b/doc/changelog.markdown
@@ -5,6 +5,7 @@ Lombok Changelog
* PLATFORM: Support for JDK13 (including `yield` in switch expressions, as well as delombok having a nicer style for arrow-style switch blocks, and text blocks).
* FEATURE: You can now configure a builder's 'setter' prefixes via `@Builder(setterPrefix = "set")` for example. We discourage doing this, but if some library you use requires them, have at it. [Pull Request #2174](https://github.com/rzwitserloot/lombok/pull/2174], [Issue #1805](https://github.com/rzwitserloot/lombok/issues/1805).
* BUGFIX: Referring to an inner class inside the generics on a class marked with `@SuperBuilder` would cause the error `wrong number of type arguments; required 3` [Issue #2262](https://github.com/rzwitserloot/lombok/issues/2262); fixed by github user [`@Lekanich`](https://github.com/rzwitserloot/lombok/issues/2262) - thank you!
+* BUGFIX: Some of the code generated by `@Builder` did not include `this.` prefixes when accessing fields. While semantically it didn't matter, if you use the 'add this prefix for field accesses' save action in eclipse, the save action would break. [Issue #2327](https://github.com/rzwitserloot/lombok/issues/2327)
* IMPROBABLE BREAKING CHANGE: Lombok now generates qualified types (so, `Outer.Inner` instead of just `Inner`) in most type signatures that it generates; this should avoid exotic scenarios where the types lombok puts in signatures end up referring to unintended other types, which can occur if your class implements an interface that itself defines a type with the same name as one defined in your source file. I told you it was exotic. Thanks to Hunter Anderson for doing some preliminary work on this change. [Issue #2268](https://github.com/rzwitserloot/lombok/issues/2268)
diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
index 1c988d31..948902d5 100644
--- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
+++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2019 The Project Lombok Authors.
+ * Copyright (C) 2009-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/core/lombok/eclipse/handlers/EclipseSingularsRecipes.java b/src/core/lombok/eclipse/handlers/EclipseSingularsRecipes.java
index cb2ebe18..9d79d75c 100755
--- a/src/core/lombok/eclipse/handlers/EclipseSingularsRecipes.java
+++ b/src/core/lombok/eclipse/handlers/EclipseSingularsRecipes.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015-2019 The Project Lombok Authors.
+ * Copyright (C) 2015-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -273,6 +273,10 @@ public class EclipseSingularsRecipes {
public abstract void appendBuildCode(SingularData data, EclipseNode builderType, List<Statement> statements, char[] targetVariableName, String builderVariable);
+ public boolean shadowedDuringBuild() {
+ return true;
+ }
+
public boolean requiresCleaning() {
try {
return !getClass().getMethod("appendCleaningCode", SingularData.class, EclipseNode.class, List.class).getDeclaringClass().equals(EclipseSingularizer.class);
diff --git a/src/core/lombok/eclipse/handlers/HandleBuilder.java b/src/core/lombok/eclipse/handlers/HandleBuilder.java
index 6cc5bd57..3f711a19 100755
--- a/src/core/lombok/eclipse/handlers/HandleBuilder.java
+++ b/src/core/lombok/eclipse/handlers/HandleBuilder.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2019 The Project Lombok Authors.
+ * Copyright (C) 2013-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -40,7 +40,6 @@ import org.eclipse.jdt.internal.compiler.ast.Argument;
import org.eclipse.jdt.internal.compiler.ast.ArrayInitializer;
import org.eclipse.jdt.internal.compiler.ast.Assignment;
import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
-import org.eclipse.jdt.internal.compiler.ast.ConditionalExpression;
import org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration;
import org.eclipse.jdt.internal.compiler.ast.EqualExpression;
import org.eclipse.jdt.internal.compiler.ast.Expression;
@@ -713,6 +712,13 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
List<Expression> args = new ArrayList<Expression>();
for (BuilderFieldData bfd : builderFields) {
if (bfd.nameOfSetFlag != null) {
+ LocalDeclaration ld = new LocalDeclaration(bfd.builderFieldName, 0, 0);
+ ld.type = copyType(bfd.type);
+ FieldReference builderAssign = new FieldReference(bfd.builderFieldName, 0);
+ builderAssign.receiver = new ThisReference(0, 0);
+ ld.initialization = builderAssign;
+ statements.add(ld);
+
MessageSend inv = new MessageSend();
inv.sourceStart = source.sourceStart;
inv.sourceEnd = source.sourceEnd;
@@ -720,12 +726,19 @@ public class HandleBuilder extends EclipseAnnotationHandler<Builder> {
inv.selector = bfd.nameOfDefaultProvider;
inv.typeArguments = typeParameterNames(((TypeDeclaration) type.get()).typeParameters);
- args.add(new ConditionalExpression(
- new SingleNameReference(bfd.nameOfSetFlag, 0L),
- new SingleNameReference(bfd.builderFieldName, 0L),
- inv));
- } else {
+ Assignment defaultAssign = new Assignment(new SingleNameReference(bfd.builderFieldName, 0L), inv, 0);
+ FieldReference thisSet = new FieldReference(bfd.nameOfSetFlag, 0L);
+ thisSet.receiver = new ThisReference(0, 0);
+ Expression thisNotSet = new UnaryExpression(thisSet, OperatorIds.NOT);
+ statements.add(new IfStatement(thisNotSet, defaultAssign, 0, 0));
+ }
+
+ if (bfd.nameOfSetFlag != null || (bfd.singularData != null && bfd.singularData.getSingularizer().shadowedDuringBuild())) {
args.add(new SingleNameReference(bfd.builderFieldName, 0L));
+ } else {
+ FieldReference fr = new FieldReference(bfd.builderFieldName, 0L);
+ fr.receiver = new ThisReference(0, 0);
+ args.add(fr);
}
}
diff --git a/src/core/lombok/eclipse/handlers/HandleConstructor.java b/src/core/lombok/eclipse/handlers/HandleConstructor.java
index 7cb2036b..a5716d9c 100755
--- a/src/core/lombok/eclipse/handlers/HandleConstructor.java
+++ b/src/core/lombok/eclipse/handlers/HandleConstructor.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010-2019 The Project Lombok Authors.
+ * Copyright (C) 2010-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java
index fbd4ce24..3a2e59f7 100755
--- a/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java
+++ b/src/core/lombok/eclipse/handlers/HandleSuperBuilder.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2019 The Project Lombok Authors.
+ * Copyright (C) 2013-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/core/lombok/javac/handlers/HandleBuilder.java b/src/core/lombok/javac/handlers/HandleBuilder.java
index 00741249..11666048 100644
--- a/src/core/lombok/javac/handlers/HandleBuilder.java
+++ b/src/core/lombok/javac/handlers/HandleBuilder.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2019 The Project Lombok Authors.
+ * Copyright (C) 2013-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -661,12 +661,17 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
}
ListBuffer<JCExpression> args = new ListBuffer<JCExpression>();
+ Name thisName = type.toName("this");
for (BuilderFieldData bfd : builderFields) {
if (bfd.nameOfSetFlag != null) {
- statements.append(maker.VarDef(maker.Modifiers(0L), bfd.builderFieldName, cloneType(maker, bfd.type, source, tdParent.getContext()), maker.Select(maker.Ident(type.toName("this")), bfd.builderFieldName)));
- statements.append(maker.If(maker.Unary(CTC_NOT, maker.Ident(bfd.nameOfSetFlag)), maker.Exec(maker.Assign(maker.Ident(bfd.builderFieldName), maker.Apply(typeParameterNames(maker, ((JCClassDecl) tdParent.get()).typarams), maker.Select(maker.Ident(((JCClassDecl) tdParent.get()).name), bfd.nameOfDefaultProvider), List.<JCExpression>nil()))), null));
+ statements.append(maker.VarDef(maker.Modifiers(0L), bfd.builderFieldName, cloneType(maker, bfd.type, source, tdParent.getContext()), maker.Select(maker.Ident(thisName), bfd.builderFieldName)));
+ statements.append(maker.If(maker.Unary(CTC_NOT, maker.Select(maker.Ident(thisName), bfd.nameOfSetFlag)), maker.Exec(maker.Assign(maker.Ident(bfd.builderFieldName), maker.Apply(typeParameterNames(maker, ((JCClassDecl) tdParent.get()).typarams), maker.Select(maker.Ident(((JCClassDecl) tdParent.get()).name), bfd.nameOfDefaultProvider), List.<JCExpression>nil()))), null));
+ }
+ if (bfd.nameOfSetFlag != null || (bfd.singularData != null && bfd.singularData.getSingularizer().shadowedDuringBuild())) {
+ args.append(maker.Ident(bfd.builderFieldName));
+ } else {
+ args.append(maker.Select(maker.Ident(thisName), bfd.builderFieldName));
}
- args.append(maker.Ident(bfd.builderFieldName));
}
if (addCleaning) {
diff --git a/src/core/lombok/javac/handlers/HandleSuperBuilder.java b/src/core/lombok/javac/handlers/HandleSuperBuilder.java
index d37b3049..b3002946 100644
--- a/src/core/lombok/javac/handlers/HandleSuperBuilder.java
+++ b/src/core/lombok/javac/handlers/HandleSuperBuilder.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2019 The Project Lombok Authors.
+ * Copyright (C) 2013-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java
index 885d8ffb..c8fe5278 100644
--- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java
+++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2019 The Project Lombok Authors.
+ * Copyright (C) 2009-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/src/core/lombok/javac/handlers/JavacSingularsRecipes.java b/src/core/lombok/javac/handlers/JavacSingularsRecipes.java
index 86f148ca..c1e6edd8 100644
--- a/src/core/lombok/javac/handlers/JavacSingularsRecipes.java
+++ b/src/core/lombok/javac/handlers/JavacSingularsRecipes.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015-2019 The Project Lombok Authors.
+ * Copyright (C) 2015-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -344,6 +344,10 @@ public class JavacSingularsRecipes {
public abstract void appendBuildCode(SingularData data, JavacNode builderType, JCTree source, ListBuffer<JCStatement> statements, Name targetVariableName, String builderVariable);
+ public boolean shadowedDuringBuild() {
+ return true;
+ }
+
public boolean requiresCleaning() {
try {
return !getClass().getMethod("appendCleaningCode", SingularData.class, JavacNode.class, JCTree.class, ListBuffer.class).getDeclaringClass().equals(JavacSingularizer.class);
diff --git a/test/core/src/lombok/DirectoryRunner.java b/test/core/src/lombok/DirectoryRunner.java
index ffadba8f..116b9d94 100644
--- a/test/core/src/lombok/DirectoryRunner.java
+++ b/test/core/src/lombok/DirectoryRunner.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009-2019 The Project Lombok Authors.
+ * Copyright (C) 2009-2020 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,20 +24,23 @@ package lombok;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
import java.util.Map;
import java.util.TreeMap;
-import lombok.eclipse.Eclipse;
-import lombok.javac.Javac;
-
import org.junit.runner.Description;
import org.junit.runner.Runner;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunNotifier;
+import lombok.eclipse.Eclipse;
+import lombok.javac.Javac;
+
public class DirectoryRunner extends Runner {
- /** Fill in a file name (or multiple, space separated) to reduce the testset to just the named file(s). */
- private static final String DEBUG_FOCUS_ON_FILE = "";
+ /** Add 1 or more file names to reduce the testset to just the named file(s). No files = test it all. */
+ private static final List<String> DEBUG_FOCUS_ON_FILE = Arrays.asList(
+ );
public enum Compiler {
DELOMBOK {
@@ -80,7 +83,7 @@ public class DirectoryRunner extends Runner {
private static final FileFilter JAVA_FILE_FILTER = new FileFilter() {
@Override public boolean accept(File file) {
return file.isFile() && file.getName().endsWith(".java") &&
- (DEBUG_FOCUS_ON_FILE.isEmpty() || (" " + DEBUG_FOCUS_ON_FILE + " ").contains(" " + file.getName() + " "));
+ (DEBUG_FOCUS_ON_FILE.isEmpty() || DEBUG_FOCUS_ON_FILE.contains(file.getName()));
}
};
diff --git a/test/transform/resource/after-delombok/BuilderComplex.java b/test/transform/resource/after-delombok/BuilderComplex.java
index a82a0497..009ebe6c 100644
--- a/test/transform/resource/after-delombok/BuilderComplex.java
+++ b/test/transform/resource/after-delombok/BuilderComplex.java
@@ -37,7 +37,7 @@ class BuilderComplex {
}
@java.lang.SuppressWarnings("all")
public void execute() {
- BuilderComplex.<T>testVoidWithGenerics(number, arg2, arg3, selfRef);
+ BuilderComplex.<T>testVoidWithGenerics(this.number, this.arg2, this.arg3, this.selfRef);
}
@java.lang.Override
@java.lang.SuppressWarnings("all")
diff --git a/test/transform/resource/after-delombok/BuilderDefaults.java b/test/transform/resource/after-delombok/BuilderDefaults.java
index eb692267..5a563024 100644
--- a/test/transform/resource/after-delombok/BuilderDefaults.java
+++ b/test/transform/resource/after-delombok/BuilderDefaults.java
@@ -51,10 +51,10 @@ public final class BuilderDefaults {
@java.lang.SuppressWarnings("all")
public BuilderDefaults build() {
int x$value = this.x$value;
- if (!x$set) x$value = BuilderDefaults.$default$x();
+ if (!this.x$set) x$value = BuilderDefaults.$default$x();
long z$value = this.z$value;
- if (!z$set) z$value = BuilderDefaults.$default$z();
- return new BuilderDefaults(x$value, name, z$value);
+ if (!this.z$set) z$value = BuilderDefaults.$default$z();
+ return new BuilderDefaults(x$value, this.name, z$value);
}</