From 626c33255bbac12ddab72dda7de2447132f29ae4 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Sat, 19 Dec 2020 11:44:31 +0100 Subject: [tests] Support javadoc in ecj tests --- src/core/lombok/eclipse/EcjAugments.java | 3 +- .../eclipse/handlers/EclipseHandlerUtil.java | 45 +++-------- .../lombok/eclipse/agent/EclipsePatcher.java | 2 +- .../lombok/eclipse/agent/PatchJavadoc.java | 49 ++++++------ .../lombok/launch/PatchFixesHider.java | 2 +- src/utils/lombok/core/FieldAugment.java | 53 +++++++++++++ .../resource/after-ecj/GetterSetterJavadocEcj.java | 86 ---------------------- .../resource/after-ecj/SetterDeprecatedEcj.java | 14 ---- test/transform/resource/before/BuilderJavadoc.java | 1 - .../resource/before/BuilderWithDeprecated.java | 1 - .../resource/before/GetterDeprecated.java | 1 - .../resource/before/GetterSetterJavadoc.java | 1 - .../resource/before/GetterSetterJavadocEcj.java | 65 ---------------- .../before/SetterAndWithMethodJavadoc.java | 1 - .../resource/before/SetterDeprecated.java | 1 - .../resource/before/SetterDeprecatedEcj.java | 12 --- .../before/WithMethodMarkedDeprecated.java | 1 - 17 files changed, 91 insertions(+), 247 deletions(-) delete mode 100644 test/transform/resource/after-ecj/GetterSetterJavadocEcj.java delete mode 100644 test/transform/resource/after-ecj/SetterDeprecatedEcj.java delete mode 100644 test/transform/resource/before/GetterSetterJavadocEcj.java delete mode 100644 test/transform/resource/before/SetterDeprecatedEcj.java diff --git a/src/core/lombok/eclipse/EcjAugments.java b/src/core/lombok/eclipse/EcjAugments.java index 965c4fb6..cd7173a8 100644 --- a/src/core/lombok/eclipse/EcjAugments.java +++ b/src/core/lombok/eclipse/EcjAugments.java @@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentMap; import org.eclipse.jdt.internal.compiler.ast.ASTNode; import org.eclipse.jdt.internal.compiler.ast.Annotation; import org.eclipse.jdt.internal.compiler.ast.FieldDeclaration; +import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; import org.eclipse.jdt.internal.core.CompilationUnit; import org.eclipse.jdt.internal.core.SourceMethod; @@ -42,13 +43,13 @@ public final class EcjAugments { public static final FieldAugment ASTNode_handled = FieldAugment.augment(ASTNode.class, boolean.class, "lombok$handled"); public static final FieldAugment ASTNode_generatedBy = FieldAugment.augment(ASTNode.class, ASTNode.class, "$generatedBy"); public static final FieldAugment Annotation_applied = FieldAugment.augment(Annotation.class, boolean.class, "lombok$applied"); + public static final FieldAugment> CompilationUnit_javadoc = FieldAugment.augment(ICompilationUnit.class, Map.class, "$javadoc"); public static final class EclipseAugments { private EclipseAugments() { // Prevent instantiation } - public static final FieldAugment> CompilationUnit_javadoc = FieldAugment.augment(CompilationUnit.class, Map.class, "$javadoc"); public static final FieldAugment>> CompilationUnit_delegateMethods = FieldAugment.augment(CompilationUnit.class, ConcurrentMap.class, "$delegateMethods"); } } diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java index 5da7abfd..a7afd996 100644 --- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java +++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java @@ -39,7 +39,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.eclipse.jdt.core.Signature; import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.internal.compiler.ast.ASTNode; import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration; @@ -106,7 +105,6 @@ import org.eclipse.jdt.internal.compiler.lookup.TypeBinding; import org.eclipse.jdt.internal.compiler.lookup.TypeConstants; import org.eclipse.jdt.internal.compiler.lookup.TypeIds; import org.eclipse.jdt.internal.compiler.lookup.WildcardBinding; -import org.eclipse.jdt.internal.core.CompilationUnit; import lombok.AccessLevel; import lombok.ConfigurationKeys; @@ -125,6 +123,7 @@ import lombok.core.configuration.TypeName; import lombok.core.debug.ProblemReporter; import lombok.core.handlers.HandlerUtil; import lombok.core.handlers.HandlerUtil.FieldAccess; +import lombok.eclipse.EcjAugments; import lombok.eclipse.Eclipse; import lombok.eclipse.EclipseAST; import lombok.eclipse.EclipseNode; @@ -2641,42 +2640,19 @@ public class EclipseHandlerUtil { return null; } - private static class EclipseOnlyUtil { - public static void setDocComment(CompilationUnitDeclaration cud, TypeDeclaration type, ASTNode node, String doc) { - if (cud.compilationResult.compilationUnit instanceof CompilationUnit) { - CompilationUnit compilationUnit = (CompilationUnit) cud.compilationResult.compilationUnit; - Map docs = EclipseAugments.CompilationUnit_javadoc.setIfAbsent(compilationUnit, new HashMap()); - - if (node instanceof AbstractMethodDeclaration) { - AbstractMethodDeclaration methodDeclaration = (AbstractMethodDeclaration) node; - String signature = getSignature(type, methodDeclaration); - /* Add javadoc start marker, add leading asterisks to each line, add javadoc end marker */ - docs.put(signature, String.format("/**%n%s%n */", doc.replaceAll("(?m)^", " * "))); - } - } - } - } - - private static Boolean eclipseMode; - private static boolean eclipseMode() { - if (eclipseMode != null) return eclipseMode.booleanValue(); - try { - Class.forName("org.eclipse.jdt.internal.core.CompilationUnit"); - eclipseMode = true; - } catch (Throwable t) { - eclipseMode = false; - } - return eclipseMode; - } - public static void setDocComment(CompilationUnitDeclaration cud, EclipseNode eclipseNode, String doc) { - if (!eclipseMode()) return; setDocComment(cud, (TypeDeclaration) upToTypeNode(eclipseNode).get(), eclipseNode.get(), doc); } public static void setDocComment(CompilationUnitDeclaration cud, TypeDeclaration type, ASTNode node, String doc) { - if (!eclipseMode()) return; - EclipseOnlyUtil.setDocComment(cud, type, node, doc); + Map docs = EcjAugments.CompilationUnit_javadoc.setIfAbsent(cud.compilationResult.compilationUnit, new HashMap()); + + if (node instanceof AbstractMethodDeclaration) { + AbstractMethodDeclaration methodDeclaration = (AbstractMethodDeclaration) node; + String signature = getSignature(type, methodDeclaration); + /* Add javadoc start marker, remove trailing line break, add leading asterisks to each line, add javadoc end marker */ + docs.put(signature, String.format("/**%n%s%n */", doc.replaceAll("$\\r?\\n", "").replaceAll("(?m)^", " * "))); + } } public static String getSignature(TypeDeclaration type, AbstractMethodDeclaration methodDeclaration) { @@ -2688,8 +2664,7 @@ public class EclipseHandlerUtil { Argument[] arguments = methodDeclaration.arguments; if (arguments != null) { for (Argument argument : arguments) { - String signature = Signature.createTypeSignature(argument.type.getLastToken(), false); - sb.append(signature); + sb.append(String.valueOf(argument.type)); } } sb.append(")"); diff --git a/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java b/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java index d5077b86..171fa8a9 100644 --- a/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java +++ b/src/eclipseAgent/lombok/eclipse/agent/EclipsePatcher.java @@ -916,7 +916,7 @@ public class EclipsePatcher implements AgentLauncher.AgentLaunchable { .requestExtra(StackRequest.PARAM1) .build()); - sm.addScriptIfWitness(OSGI_TYPES, ScriptBuilder.replaceMethodCall() + sm.addScript(ScriptBuilder.replaceMethodCall() .target(new MethodTarget("org.eclipse.jdt.internal.compiler.ast.TypeDeclaration", "printBody", "java.lang.StringBuffer", "int", "java.lang.StringBuffer")) .methodToReplace(new Hook("org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration", "print", "java.lang.StringBuffer", "int", "java.lang.StringBuffer")) .replacementMethod(new Hook("lombok.launch.PatchFixesHider$Javadoc", "printMethod", "java.lang.StringBuffer", "org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration", "int", "java.lang.StringBuffer", "org.eclipse.jdt.internal.compiler.ast.TypeDeclaration")) diff --git a/src/eclipseAgent/lombok/eclipse/agent/PatchJavadoc.java b/src/eclipseAgent/lombok/eclipse/agent/PatchJavadoc.java index f5678154..5b34917e 100644 --- a/src/eclipseAgent/lombok/eclipse/agent/PatchJavadoc.java +++ b/src/eclipseAgent/lombok/eclipse/agent/PatchJavadoc.java @@ -21,7 +21,7 @@ */ package lombok.eclipse.agent; -import static lombok.eclipse.EcjAugments.EclipseAugments.CompilationUnit_javadoc; +import static lombok.eclipse.EcjAugments.CompilationUnit_javadoc; import java.lang.reflect.Method; import java.util.Map; @@ -41,7 +41,7 @@ import lombok.permit.Permit; public class PatchJavadoc { - public static String getHTMLContentFromSource(String original, IJavaElement member) { + public static String getHTMLContentFromSource(String original, Object member) { if (original != null) { return original; } @@ -51,15 +51,14 @@ public class PatchJavadoc { ICompilationUnit iCompilationUnit = sourceMethod.getCompilationUnit(); if (iCompilationUnit instanceof CompilationUnit) { CompilationUnit compilationUnit = (CompilationUnit) iCompilationUnit; - Map docs = CompilationUnit_javadoc.get(compilationUnit); if (docs == null) return null; - String signature = getSignature(sourceMethod); + String signature = Signature.getSignature(sourceMethod); String rawJavadoc = docs.get(signature); if (rawJavadoc == null) return null; - return Reflection.javadoc2HTML((IMember) member, member, rawJavadoc); + return Reflection.javadoc2HTML((IMember) member, (IJavaElement) member, rawJavadoc); } } @@ -67,33 +66,33 @@ public class PatchJavadoc { } public static StringBuffer printMethod(AbstractMethodDeclaration methodDeclaration, Integer tab, StringBuffer output, TypeDeclaration type) { - if (methodDeclaration.compilationResult.compilationUnit instanceof CompilationUnit) { - Map docs = CompilationUnit_javadoc.get((CompilationUnit) methodDeclaration.compilationResult.compilationUnit); - if (docs != null) { - String signature = EclipseHandlerUtil.getSignature(type, methodDeclaration); - String rawJavadoc = docs.get(signature); - if (rawJavadoc != null) { - for (String line : rawJavadoc.split("\r?\n")) { - ASTNode.printIndent(tab, output).append(line).append("\n"); - } + Map docs = CompilationUnit_javadoc.get(methodDeclaration.compilationResult.compilationUnit); + if (docs != null) { + String signature = EclipseHandlerUtil.getSignature(type, methodDeclaration); + String rawJavadoc = docs.get(signature); + if (rawJavadoc != null) { + for (String line : rawJavadoc.split("\r?\n")) { + ASTNode.printIndent(tab, output).append(line).append("\n"); } } } return methodDeclaration.print(tab, output); } - private static String getSignature(SourceMethod sourceMethod) { - StringBuilder sb = new StringBuilder(); - sb.append(sourceMethod.getParent().getElementName()); - sb.append("."); - sb.append(sourceMethod.getElementName()); - sb.append("("); - for (String type : sourceMethod.getParameterTypes()) { - sb.append(type); + private static class Signature { + static final String getSignature(SourceMethod sourceMethod) { + StringBuilder sb = new StringBuilder(); + sb.append(sourceMethod.getParent().getElementName()); + sb.append("."); + sb.append(sourceMethod.getElementName()); + sb.append("("); + for (String type : sourceMethod.getParameterTypes()) { + sb.append(org.eclipse.jdt.core.Signature.toString(type)); + } + sb.append(")"); + + return sb.toString(); } - sb.append(")"); - - return sb.toString(); } /** diff --git a/src/eclipseAgent/lombok/launch/PatchFixesHider.java b/src/eclipseAgent/lombok/launch/PatchFixesHider.java index 503b2b4a..e2d266c5 100755 --- a/src/eclipseAgent/lombok/launch/PatchFixesHider.java +++ b/src/eclipseAgent/lombok/launch/PatchFixesHider.java @@ -332,7 +332,7 @@ final class PatchFixesHider { static { Class shadowed = Util.shadowLoadClass("lombok.eclipse.agent.PatchJavadoc"); - GET_HTML = Util.findMethod(shadowed, "getHTMLContentFromSource", String.class, IJavaElement.class); + GET_HTML = Util.findMethod(shadowed, "getHTMLContentFromSource", String.class, Object.class); PRINT_METHOD = Util.findMethod(shadowed, "printMethod", AbstractMethodDeclaration.class, Integer.class, StringBuffer.class, TypeDeclaration.class); } diff --git a/src/utils/lombok/core/FieldAugment.java b/src/utils/lombok/core/FieldAugment.java index 4a32ad04..0982bcb5 100644 --- a/src/utils/lombok/core/FieldAugment.java +++ b/src/utils/lombok/core/FieldAugment.java @@ -24,6 +24,7 @@ package lombok.core; import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.lang.reflect.Modifier; +import java.util.HashMap; import java.util.Map; import java.util.WeakHashMap; @@ -69,6 +70,10 @@ public abstract class FieldAugment { checkNotNull(fieldType, "fieldType"); checkNotNull(name, "name"); + if (type.isInterface()) { + return new InterfaceFieldAugment(name, fieldType); + } + @SuppressWarnings("unchecked") F defaultValue = (F) getDefaultValue(fieldType); FieldAugment ret = tryCreateReflectionAugment(type, fieldType, name, defaultValue); @@ -175,6 +180,54 @@ public abstract class FieldAugment { */ public abstract F compareAndSet(T object, F expected, F value); + private static final class InterfaceFieldAugment extends FieldAugment { + private final String name; + private final Class fieldType; + + private Map, FieldAugment> map = new HashMap, FieldAugment>(); + + private InterfaceFieldAugment(String name, Class fieldType) { + this.name = name; + this.fieldType = fieldType; + } + + private synchronized FieldAugment getDelegate(T object) { + @SuppressWarnings("unchecked") + Class c = (Class) object.getClass(); + + FieldAugment fieldAugment = map.get(c); + if (fieldAugment == null) { + fieldAugment = augment(c, fieldType, name); + map.put(c, fieldAugment); + } + return fieldAugment; + } + + @Override public F get(T object) { + return getDelegate(object).get(object); + } + + @Override public F getAndSet(T object, F value) { + return getDelegate(object).getAndSet(object, value); + } + + @Override public F clear(T object) { + return getDelegate(object).clear(object); + } + + @Override public F compareAndClear(T object, F expected) { + return getDelegate(object).compareAndClear(object, expected); + } + + @Override public F setIfAbsent(T object, F value) { + return getDelegate(object).setIfAbsent(object, value); + } + + @Override public F compareAndSet(T object, F expected, F value) { + return getDelegate(object).compareAndSet(object, expected, value); + } + } + private static class ReflectionFieldAugment extends FieldAugment { private final Object lock = new Object(); private final Field field; diff --git a/test/transform/resource/after-ecj/GetterSetterJavadocEcj.java b/test/transform/resource/after-ecj/GetterSetterJavadocEcj.java deleted file mode 100644 index 83c9c3a5..00000000 --- a/test/transform/resource/after-ecj/GetterSetterJavadocEcj.java +++ /dev/null @@ -1,86 +0,0 @@ -@lombok.Data class GetterSetterJavadoc1 { - private int fieldName; - public @java.lang.SuppressWarnings("all") int getFieldName() { - return this.fieldName; - } - public @java.lang.SuppressWarnings("all") void setFieldName(final int fieldName) { - this.fieldName = fieldName; - } - public @java.lang.Override @java.lang.SuppressWarnings("all") boolean equals(final java.lang.Object o) { - if ((o == this)) - return true; - if ((! (o instanceof GetterSetterJavadoc1))) - return false; - final GetterSetterJavadoc1 other = (GetterSetterJavadoc1) o; - if ((! other.canEqual((java.lang.Object) this))) - return false; - if ((this.getFieldName() != other.getFieldName())) - return false; - return true; - } - protected @java.lang.SuppressWarnings("all") boolean canEqual(final java.lang.Object other) { - return (other instanceof GetterSetterJavadoc1); - } - public @java.lang.Override @java.lang.SuppressWarnings("all") int hashCode() { - final int PRIME = 59; - int result = 1; - result = ((result * PRIME) + this.getFieldName()); - return result; - } - public @java.lang.Override @java.lang.SuppressWarnings("all") java.lang.String toString() { - return (("GetterSetterJavadoc1(fieldName=" + this.getFieldName()) + ")"); - } - public @java.lang.SuppressWarnings("all") GetterSetterJavadoc1() { - super(); - } -} -class GetterSetterJavadoc2 { - private @lombok.Getter @lombok.Setter int fieldName; - GetterSetterJavadoc2() { - super(); - } - public @java.lang.SuppressWarnings("all") int getFieldName() { - return this.fieldName; - } - public @java.lang.SuppressWarnings("all") void setFieldName(final int fieldName) { - this.fieldName = fieldName; - } -} -class GetterSetterJavadoc3 { - private @lombok.Getter @lombok.Setter int fieldName; - GetterSetterJavadoc3() { - super(); - } - public @java.lang.SuppressWarnings("all") int getFieldName() { - return this.fieldName; - } - public @java.lang.SuppressWarnings("all") void setFieldName(final int fieldName) { - this.fieldName = fieldName; - } -} -@lombok.experimental.Accessors(chain = true,fluent = true) class GetterSetterJavadoc4 { - private @lombok.Getter @lombok.Setter int fieldName; - GetterSetterJavadoc4() { - super(); - } - public @java.lang.SuppressWarnings("all") int fieldName() { - return this.fieldName; - } - public @java.lang.SuppressWarnings("all") GetterSetterJavadoc4 fieldName(final int fieldName) { - this.fieldName = fieldName; - return this; - } -} -@lombok.experimental.Accessors(chain = true,fluent = true) class GetterSetterJavadoc5 { - private @lombok.Getter @lombok.Setter int fieldName; - GetterSetterJavadoc5() { - super(); - } - public @java.lang.SuppressWarnings("all") int fieldName() { - return this.fieldName; - } - public @java.lang.SuppressWarnings("all") GetterSetterJavadoc5 fieldName(final int fieldName) { - this.fieldName = fieldName; - return this; - } -} diff --git a/test/transform/resource/after-ecj/SetterDeprecatedEcj.java b/test/transform/resource/after-ecj/SetterDeprecatedEcj.java deleted file mode 100644 index d76612b7..00000000 --- a/test/transform/resource/after-ecj/SetterDeprecatedEcj.java +++ /dev/null @@ -1,14 +0,0 @@ -import lombok.Setter; -class SetterDeprecated { - @Deprecated @Setter int annotation; - @Setter int javadoc; - SetterDeprecated() { - super(); - } - public @java.lang.Deprecated @java.lang.SuppressWarnings("all") void setAnnotation(final int annotation) { - this.annotation = annotation; - } - public @java.lang.Deprecated @java.lang.SuppressWarnings("all") void setJavadoc(final int javadoc) { - this.javadoc = javadoc; - } -} diff --git a/test/transform/resource/before/BuilderJavadoc.java b/test/transform/resource/before/BuilderJavadoc.java index d966af28..390e2096 100644 --- a/test/transform/resource/before/BuilderJavadoc.java +++ b/test/transform/resource/before/BuilderJavadoc.java @@ -1,4 +1,3 @@ -//platform !ecj: Javadoc copying not supported on ecj import java.util.List; @lombok.Builder diff --git a/test/transform/resource/before/BuilderWithDeprecated.java b/test/transform/resource/before/BuilderWithDeprecated.java index 1b41444c..1641ccb4 100644 --- a/test/transform/resource/before/BuilderWithDeprecated.java +++ b/test/transform/resource/before/BuilderWithDeprecated.java @@ -1,4 +1,3 @@ -//platform !ecj: Javadoc copying not supported on ecj import com.google.common.collect.ImmutableList; import lombok.Builder; import lombok.Singular; diff --git a/test/transform/resource/before/GetterDeprecated.java b/test/transform/resource/before/GetterDeprecated.java index 9d67297b..16d66a85 100644 --- a/test/transform/resource/before/GetterDeprecated.java +++ b/test/transform/resource/before/GetterDeprecated.java @@ -1,4 +1,3 @@ -//platform !ecj: Javadoc copying not supported on ecj import lombok.Getter; class GetterDeprecated { diff --git a/test/transform/resource/before/GetterSetterJavadoc.java b/test/transform/resource/before/GetterSetterJavadoc.java index 44b970e8..2ad46f8d 100644 --- a/test/transform/resource/before/GetterSetterJavadoc.java +++ b/test/transform/resource/before/GetterSetterJavadoc.java @@ -1,4 +1,3 @@ -//platform !ecj: Javadoc copying not supported on ecj @lombok.Data class GetterSetterJavadoc1 { /** diff --git a/test/transform/resource/before/GetterSetterJavadocEcj.java b/test/transform/resource/before/GetterSetterJavadocEcj.java deleted file mode 100644 index 1c24851c..00000000 --- a/test/transform/resource/before/GetterSetterJavadocEcj.java +++ /dev/null @@ -1,65 +0,0 @@ -//platform ecj: Javadoc copying not supported on ecj - testing that the javadoc doesnt cause any crashes -@lombok.Data -class GetterSetterJavadoc1 { - /** - * Some text - * - * @param fieldName Hello, World1 - * --- GETTER --- - * Getter section - * - * @return Sky is blue1 - */ - private int fieldName; -} - -class GetterSetterJavadoc2 { - /** - * Some text - * - * @param fieldName Hello, World2 - * @return Sky is blue2 - */ - @lombok.Getter @lombok.Setter private int fieldName; -} - -class GetterSetterJavadoc3 { - /** - * Some text - * - * **SETTER** - * Setter section - * @param fieldName Hello, World3 - * **GETTER** - * Getter section - * @return Sky is blue3 - */ - @lombok.Getter @lombok.Setter private int fieldName; -} - -@lombok.experimental.Accessors(chain = true, fluent = true) -class GetterSetterJavadoc4 { - /** - * Some text - * - * @param fieldName Hello, World4 - * @return Sky is blue4 - */ - @lombok.Getter @lombok.Setter private int fieldName; -} - -@lombok.experimental.Accessors(chain = true, fluent = true) -class GetterSetterJavadoc5 { - /** - * Some text - * - * **SETTER** - * Setter section - * @param fieldName Hello, World5 - * @return Sky is blue5 - * **GETTER** - * Getter section - * @return Sky is blue5 - */ - @lombok.Getter @lombok.Setter private int fieldName; -} diff --git a/test/transform/resource/before/SetterAndWithMethodJavadoc.java b/test/transform/resource/before/SetterAndWithMethodJavadoc.java index 0317cf27..ba10b7f2 100644 --- a/test/transform/resource/before/SetterAndWithMethodJavadoc.java +++ b/test/transform/resource/before/SetterAndWithMethodJavadoc.java @@ -1,4 +1,3 @@ -//platform !ecj: Javadoc copying not supported on ecj import lombok.With; class SetterAndWithMethodJavadoc { /** diff --git a/test/transform/resource/before/SetterDeprecated.java b/test/transform/resource/before/SetterDeprecated.java index a4c2ea94..585cade1 100644 --- a/test/transform/resource/before/SetterDeprecated.java +++ b/test/transform/resource/before/SetterDeprecated.java @@ -1,4 +1,3 @@ -//platform !ecj: Javadoc copying not supported on ecj import lombok.Setter; class SetterDeprecated { diff --git a/test/transform/resource/before/SetterDeprecatedEcj.java b/test/transform/resource/before/SetterDeprecatedEcj.java deleted file mode 100644 index 361a4fb7..00000000 --- a/test/transform/resource/before/SetterDeprecatedEcj.java +++ /dev/null @@ -1,12 +0,0 @@ -//platform ecj: Javadoc copying not supported on ecj -import lombok.Setter; -class SetterDeprecated { - - @Deprecated - @Setter int annotation; - - /** - * @deprecated - */ - @Setter int javadoc; -} diff --git a/test/transform/resource/before/WithMethodMarkedDeprecated.java b/test/transform/resource/before/WithMethodMarkedDeprecated.java index 659ea1de..7a6549e5 100644 --- a/test/transform/resource/before/WithMethodMarkedDeprecated.java +++ b/test/transform/resource/before/WithMethodMarkedDeprecated.java @@ -1,4 +1,3 @@ -//platform !ecj: Javadoc copying not supported on ecj import lombok.With; class WithMethodMarkedDeprecated { -- cgit From 624c8a5a52d14ba1a6b690809f9ada15f71e15f5 Mon Sep 17 00:00:00 2001 From: Rawi01 Date: Mon, 21 Dec 2020 17:07:22 +0100 Subject: [fixes #2682] Fix NPE, always add Javadoc return statement --- src/core/lombok/core/handlers/HandlerUtil.java | 18 ++++++++++++++++-- .../eclipse/handlers/EclipseHandlerUtil.java | 9 +++++---- .../lombok/eclipse/handlers/HandleBuilder.java | 12 ++---------- src/core/lombok/javac/handlers/HandleBuilder.java | 14 +++----------- .../lombok/javac/handlers/JavacHandlerUtil.java | 6 +++--- src/utils/lombok/javac/Javac.java | 1 + .../resource/after-delombok/Accessors.java | 12 ++++++++++++ .../after-delombok/AccessorsConfiguration.java | 3 +++ .../resource/after-delombok/BuilderComplex.java | 12 ++++++++++++ .../resource/after-delombok/BuilderCustomName.java | 3 +++ .../resource/after-delombok/BuilderDefaults.java | 9 +++++++++ .../after-delombok/BuilderDefaultsGenerics.java | 9 +++++++++ .../after-delombok/BuilderDefaultsWarnings.java | 6 ++++++ .../after-delombok/BuilderGenericMethod.java | 6 ++++++ .../after-delombok/BuilderInstanceMethod.java | 12 ++++++++++++ .../resource/after-delombok/BuilderSimple.java | 6 ++++++ .../BuilderSimpleWithSetterPrefix.java | 3 +++ .../resource/after-delombok/BuilderTypeAnnos.java | 3 +++ .../BuilderTypeAnnosWithSetterPrefix.java | 3 +++ .../after-delombok/BuilderWithAccessors.java | 12 ++++++++++++ .../after-delombok/BuilderWithBadNames.java | 6 ++++++ .../after-delombok/BuilderWithDeprecated.java | 3 +++ .../BuilderWithDeprecatedAnnOnly.java | 3 +++ .../BuilderWithExistingBuilderClass.java | 6 ++++++ ...erWithExistingBuilderClassWithSetterPrefix.java | 6 ++++++ .../after-delombok/BuilderWithNoBuilderMethod.java | 3 +++ .../after-delombok/BuilderWithNonNull.java | 3 +++ .../BuilderWithNonNullWithSetterPrefix.java | 3 +++ .../BuilderWithRecursiveGenerics.java | 6 ++++++ .../after-delombok/BuilderWithToBuilder.java | 22 +++++++++++++++++++++- .../after-delombok/BuilderWithTolerate.java | 3 +++ .../after-delombok/CheckerFrameworkBasic.java | 6 ++++++ .../after-delombok/CheckerFrameworkBuilder.java | 9 +++++++++ .../CheckerFrameworkSuperBuilder.java | 15 +++++++++++++++ .../ConstructorsWithBuilderDefaults.java | 6 ++++++ .../ConstructorsWithBuilderDefaults2.java | 9 +++++++++ .../I2335_BuilderMultipleObtainVia.java | 6 ++++++ .../after-delombok/JacksonJsonProperty.java | 3 +++ .../after-delombok/JacksonizedBuilderComplex.java | 12 ++++++++++++ .../after-delombok/JacksonizedBuilderSimple.java | 6 ++++++ .../JacksonizedSuperBuilderSimple.java | 3 +++ ...JacksonizedSuperBuilderWithJsonDeserialize.java | 3 +++ .../resource/after-delombok/NullLibrary1.java | 3 +++ .../resource/after-delombok/NullLibrary2.java | 3 +++ .../after-delombok/SuperBuilderAbstract.java | 9 +++++++++ .../SuperBuilderAbstractToBuilder.java | 9 +++++++++ .../resource/after-delombok/SuperBuilderBasic.java | 6 ++++++ .../after-delombok/SuperBuilderBasicToBuilder.java | 15 +++++++++++++++ .../after-delombok/SuperBuilderCustomized.java | 3 +++ .../after-delombok/SuperBuilderNameClashes.java | 3 +++ .../SuperBuilderWithCustomBuilderMethod.java | 6 ++++++ .../after-delombok/SuperBuilderWithDefaults.java | 9 +++++++++ .../after-delombok/SuperBuilderWithGenerics.java | 6 ++++++ .../after-delombok/SuperBuilderWithGenerics2.java | 6 ++++++ .../after-delombok/SuperBuilderWithGenerics3.java | 6 ++++++ .../SuperBuilderWithGenericsAndToBuilder.java | 6 ++++++ .../after-delombok/SuperBuilderWithNonNull.java | 6 ++++++ .../after-delombok/SuperBuilderWithPrefixes.java | 6 ++++++ .../SuperBuilderWithSetterPrefix.java | 15 +++++++++++++++ .../resource/after-delombok/Tolerate.java | 21 +++------------------ .../resource/after-delombok/WithAlreadyExists.java | 6 ++++++ .../after-delombok/WithAndAllArgsConstructor.java | 6 ++++++ .../after-delombok/WithMethodAbstract.java | 3 +++ .../after-delombok/WithMethodMarkedDeprecated.java | 3 +++ .../WithMethodMarkedDeprecatedAnnOnly.java | 3 +++ .../resource/after-delombok/WithNested.java | 3 +++ .../resource/after-delombok/WithOnClass.java | 18 ++++++++++++++++++ .../resource/after-delombok/WithPlain.java | 6 ++++++ .../resource/after-delombok/WithWithGenerics.java | 9 +++++++++ .../resource/after-delombok/WithWithTypeAnnos.java | 3 +++ .../resource/after-delombok/WitherAccessLevel.java | 15 +++++++++++++++ .../resource/after-delombok/WitherLegacyStar.java | 3 +++ test/transform/resource/after-ecj/Accessors.java | 12 ++++++++++++ .../resource/after-ecj/AccessorsConfiguration.java | 3 +++ .../resource/after-ecj/BuilderComplex.java | 12 ++++++++++++ .../after-ecj/BuilderConstructorJavadoc.java | 6 ++++++ .../resource/after-ecj/BuilderCustomName.java | 3 +++ .../resource/after-ecj/BuilderDefaults.java | 9 +++++++++ .../after-ecj/BuilderDefaultsGenerics.java | 9 +++++++++ .../after-ecj/BuilderDefaultsWarnings.java | 6 ++++++ .../resource/after-ecj/BuilderGenericMethod.java | 6 ++++++ .../resource/after-ecj/BuilderInstanceMethod.java | 12 ++++++++++++ .../resource/after-ecj/BuilderSimple.java | 6 ++++++ .../after-ecj/BuilderSimpleWithSetterPrefix.java | 3 +++ .../resource/after-ecj/BuilderTypeAnnos.java | 3 +++ .../BuilderTypeAnnosWithSetterPrefix.java | 3 +++ .../resource/after-ecj/BuilderWithAccessors.java | 12 ++++++++++++ .../resource/after-ecj/BuilderWithBadNames.java | 6 ++++++ .../resource/after-ecj/BuilderWithDeprecated.java | 3 +++ .../after-ecj/BuilderWithDeprecatedAnnOnly.java | 3 +++ .../after-ecj/BuilderWithExistingBuilderClass.java | 6 ++++++ ...erWithExistingBuilderClassWithSetterPrefix.java | 6 ++++++ .../after-ecj/BuilderWithNoBuilderMethod.java | 3 +++ .../resource/after-ecj/BuilderWithNonNull.java | 3 +++ .../BuilderWithNonNullWithSetterPrefix.java | 3 +++ .../after-ecj/BuilderWithRecursiveGenerics.java | 6 ++++++ .../resource/after-ecj/BuilderWithToBuilder.java | 21 +++++++++++++++++++++ .../resource/after-ecj/BuilderWithTolerate.java | 3 +++ .../resource/after-ecj/CheckerFrameworkBasic.java | 6 ++++++ .../after-ecj/CheckerFrameworkBuilder.java | 9 +++++++++ .../after-ecj/CheckerFrameworkSuperBuilder.java | 15 +++++++++++++++ .../after-ecj/ConstructorsWithBuilderDefaults.java | 6 ++++++ .../ConstructorsWithBuilderDefaults2.java | 9 +++++++++ .../after-ecj/I2335_BuilderMultipleObtainVia.java | 6 ++++++ .../resource/after-ecj/JacksonJsonProperty.java | 3 +++ .../after-ecj/JacksonizedBuilderComplex.java | 12 ++++++++++++ .../after-ecj/JacksonizedBuilderSimple.java | 6 ++++++ .../after-ecj/JacksonizedSuperBuilderSimple.java | 3 +++ ...JacksonizedSuperBuilderWithJsonDeserialize.java | 3 +++ .../transform/resource/after-ecj/NullLibrary1.java | 3 +++ .../transform/resource/after-ecj/NullLibrary2.java | 3 +++ .../resource/after-ecj/SuperBuilderAbstract.java | 9 +++++++++ .../after-ecj/SuperBuilderAbstractToBuilder.java | 9 +++++++++ .../resource/after-ecj/SuperBuilderBasic.java | 6 ++++++ .../after-ecj/SuperBuilderBasicToBuilder.java | 15 +++++++++++++++ .../resource/after-ecj/SuperBuilderCustomized.java | 3 +++ .../after-ecj/SuperBuilderNameClashes.java | 3 +++ .../SuperBuilderWithCustomBuilderMethod.java | 6 ++++++ .../after-ecj/SuperBuilderWithDefaults.java | 9 +++++++++ .../after-ecj/SuperBuilderWithGenerics.java | 6 ++++++ .../after-ecj/SuperBuilderWithGenerics2.java | 6 ++++++ .../after-ecj/SuperBuilderWithGenerics3.java | 6 ++++++ .../SuperBuilderWithGenericsAndToBuilder.java | 6 ++++++ .../after-ecj/SuperBuilderWithNonNull.java | 6 ++++++ .../after-ecj/SuperBuilderWithPrefixes.java | 6 ++++++ .../after-ecj/SuperBuilderWithSetterPrefix.java | 15 +++++++++++++++ test/transform/resource/after-ecj/Tolerate.java | 3 +++ .../resource/after-ecj/WithAlreadyExists.java | 6 ++++++ .../after-ecj/WithAndAllArgsConstructor.java | 6 ++++++ .../resource/after-ecj/WithMethodAbstract.java | 3 +++ .../after-ecj/WithMethodMarkedDeprecated.java | 3 +++ .../WithMethodMarkedDeprecatedAnnOnly.java | 3 +++ test/transform/resource/after-ecj/WithNested.java | 3 +++ test/transform/resource/after-ecj/WithOnClass.java | 18 ++++++++++++++++++ test/transform/resource/after-ecj/WithPlain.java | 6 ++++++ .../resource/after-ecj/WithWithGenerics.java | 9 +++++++++ .../resource/after-ecj/WithWithTypeAnnos.java | 3 +++ .../resource/after-ecj/WitherAccessLevel.java | 15 +++++++++++++++ .../resource/after-ecj/WitherLegacyStar.java | 3 +++ 139 files changed, 912 insertions(+), 49 deletions(-) diff --git a/src/core/lombok/core/handlers/HandlerUtil.java b/src/core/lombok/core/handlers/HandlerUtil.java index 92a9a142..9fd38720 100644 --- a/src/core/lombok/core/handlers/HandlerUtil.java +++ b/src/core/lombok/core/handlers/HandlerUtil.java @@ -762,12 +762,14 @@ public class HandlerUtil { private static final Pattern LINE_BREAK_FINDER = Pattern.compile("(\\r?\\n)?"); public static String stripLinesWithTagFromJavadoc(String javadoc, String regexpFragment) { + if (javadoc == null || javadoc.isEmpty()) return javadoc; Pattern p = Pattern.compile("^\\s*\\**\\s*" + regexpFragment + "\\s*\\**\\s*$", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(javadoc); return m.replaceAll(""); } public static String stripSectionsFromJavadoc(String javadoc) { + if (javadoc == null || javadoc.isEmpty()) return javadoc; Matcher sectionMatcher = SECTION_FINDER.matcher(javadoc); if (!sectionMatcher.find()) return javadoc; @@ -775,6 +777,7 @@ public class HandlerUtil { } public static String getJavadocSection(String javadoc, String sectionNameSpec) { + if (javadoc == null || javadoc.isEmpty()) return null; String[] sectionNames = sectionNameSpec.split("\\|"); Matcher sectionMatcher = SECTION_FINDER.matcher(javadoc); Matcher lineBreakMatcher = LINE_BREAK_FINDER.matcher(javadoc); @@ -805,19 +808,30 @@ public class HandlerUtil { private static final Pattern FIND_RETURN = Pattern.compile("^\\s*\\**\\s*@returns?\\s+.*$", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); public static String addReturnsThisIfNeeded(String in) { - if (FIND_RETURN.matcher(in).find()) return in; + if (in != null && FIND_RETURN.matcher(in).find()) return in; return addJavadocLine(in, "@return {@code this}."); } public static String addReturnsUpdatedSelfIfNeeded(String in) { - if (FIND_RETURN.matcher(in).find()) return in; + if (in != null && FIND_RETURN.matcher(in).find()) return in; return addJavadocLine(in, "@return a clone of this object, except with this updated property (returns {@code this} if an identical value is passed)."); } public static String addJavadocLine(String in, String line) { + if (in == null) return line; if (in.endsWith("\n")) return in + line + "\n"; return in + "\n" + line; } + + public static String getParamJavadoc(String methodComment, String param) { + if (methodComment == null || methodComment.isEmpty()) return methodComment; + Pattern pattern = Pattern.compile("@param " + param + " (\\S|\\s)+?(?=^ ?@)", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(methodComment); + if (matcher.find()) { + return matcher.group(); + } + return null; + } } diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java index a7afd996..053b102e 100644 --- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java +++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java @@ -2645,8 +2645,9 @@ public class EclipseHandlerUtil { } public static void setDocComment(CompilationUnitDeclaration cud, TypeDeclaration type, ASTNode node, String doc) { - Map docs = EcjAugments.CompilationUnit_javadoc.setIfAbsent(cud.compilationResult.compilationUnit, new HashMap()); + if (doc == null) return; + Map docs = EcjAugments.CompilationUnit_javadoc.setIfAbsent(cud.compilationResult.compilationUnit, new HashMap()); if (node instanceof AbstractMethodDeclaration) { AbstractMethodDeclaration methodDeclaration = (AbstractMethodDeclaration) node; String signature = getSignature(type, methodDeclaration); @@ -2759,10 +2760,10 @@ public class EclipseHandlerUtil { try { CompilationUnitDeclaration cud = ((CompilationUnitDeclaration) from.top().get()); String newJavadoc = copyMode.apply(cud, from); - if (newJavadoc != null) { - if (forceAddReturn) newJavadoc = addReturnsThisIfNeeded(newJavadoc); - setDocComment(cud, type, to, newJavadoc); + if (forceAddReturn) { + newJavadoc = addReturnsThisIfNeeded(newJavadoc); } + setDocComment(cud, type, to, newJavadoc); } catch (Exception ignore) {} } } diff --git a/src/core/lombok/eclipse/handlers/HandleBuilder.java b/src/core/lombok/eclipse/handlers/HandleBuilder.java index f8eb9ed0..189c5a69 100755 --- a/src/core/lombok/eclipse/handlers/HandleBuilder.java +++ b/src/core/lombok/eclipse/handlers/HandleBuilder.java @@ -29,8 +29,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.eclipse.jdt.internal.compiler.ast.ASTNode; import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration; @@ -1045,14 +1043,8 @@ public class HandleBuilder extends EclipseAnnotationHandler { try { CompilationUnitDeclaration cud = (CompilationUnitDeclaration) from.top().get(); String methodComment = getDocComment(cud, from.get()); - if (methodComment == null) return; - - Pattern pattern = Pattern.compile("@param " + param + " (\\S|\\s)+?(?=^ ?@)", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(methodComment); - if (matcher.find()) { - String newJavadoc = addReturnsThisIfNeeded(matcher.group()); - setDocComment(cud, type, to, newJavadoc); - } + String newJavadoc = addReturnsThisIfNeeded(getParamJavadoc(methodComment, param)); + setDocComment(cud, type, to, newJavadoc); } catch (Exception ignore) {} } diff --git a/src/core/lombok/javac/handlers/HandleBuilder.java b/src/core/lombok/javac/handlers/HandleBuilder.java index 40b59183..867d6889 100644 --- a/src/core/lombok/javac/handlers/HandleBuilder.java +++ b/src/core/lombok/javac/handlers/HandleBuilder.java @@ -27,8 +27,6 @@ import static lombok.javac.JavacTreeMaker.TypeTag.typeTag; import static lombok.javac.handlers.JavacHandlerUtil.*; import java.util.ArrayList; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.lang.model.element.Modifier; @@ -927,16 +925,10 @@ public class HandleBuilder extends JavacAnnotationHandler { try { JCCompilationUnit cu = ((JCCompilationUnit) from.top().get()); String methodComment = Javac.getDocComment(cu, from.get()); - if (methodComment == null) return; - - Pattern pattern = Pattern.compile("@param " + param + " (\\S|\\s)+?(?=^ ?@)", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(methodComment); - if (matcher.find()) { - String newJavadoc = addReturnsThisIfNeeded(matcher.group()); - Javac.setDocComment(cu, to, newJavadoc); - } + String newJavadoc = addReturnsThisIfNeeded(getParamJavadoc(methodComment, param)); + Javac.setDocComment(cu, to, newJavadoc); } catch (Exception ignore) {} - } + } public JavacNode makeBuilderClass(BuilderJob job) { //boolean isStatic, JavacNode source, JavacNode tdParent, String builderClassName, List typeParams, JCAnnotation ast, AccessLevel access) { diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java index df1eb438..fbde9568 100644 --- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java +++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java @@ -2120,10 +2120,10 @@ public class JavacHandlerUtil { try { JCCompilationUnit cu = ((JCCompilationUnit) from.top().get()); String newJavadoc = copyMode.apply(cu, from); - if (newJavadoc != null) { - if (forceAddReturn) newJavadoc = addReturnsThisIfNeeded(newJavadoc); - Javac.setDocComment(cu, to, newJavadoc); + if (forceAddReturn) { + newJavadoc = addReturnsThisIfNeeded(newJavadoc); } + Javac.setDocComment(cu, to, newJavadoc); } catch (Exception ignore) {} } diff --git a/src/utils/lombok/javac/Javac.java b/src/utils/lombok/javac/Javac.java index cec43705..33bd7265 100644 --- a/src/utils/lombok/javac/Javac.java +++ b/src/utils/lombok/javac/Javac.java @@ -281,6 +281,7 @@ public class Javac { @SuppressWarnings("unchecked") public static void setDocComment(JCCompilationUnit cu, JCTree node, String javadoc) { + if (javadoc == null) return; Object dc = getDocComments(cu); if (dc instanceof Map) { ((Map) dc).put(node, javadoc); diff --git a/test/transform/resource/after-delombok/Accessors.java b/test/transform/resource/after-delombok/Accessors.java index 2773a17b..0e148b88 100644 --- a/test/transform/resource/after-delombok/Accessors.java +++ b/test/transform/resource/after-delombok/Accessors.java @@ -4,6 +4,9 @@ class AccessorsFluent { public String fieldName() { return this.fieldName; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public AccessorsFluent fieldName(final String fieldName) { this.fieldName = fieldName; @@ -21,6 +24,9 @@ class AccessorsFluentOnClass { public String getOtherFieldWithOverride() { return this.otherFieldWithOverride; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public AccessorsFluentOnClass fieldName(final String fieldName) { this.fieldName = fieldName; @@ -29,6 +35,9 @@ class AccessorsFluentOnClass { } class AccessorsChain { private boolean isRunning; + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public AccessorsChain setRunning(final boolean isRunning) { this.isRunning = isRunning; @@ -93,6 +102,9 @@ class AccessorsPrefix3 { } class AccessorsFluentGenerics { private String name; + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public AccessorsFluentGenerics name(final String name) { this.name = name; diff --git a/test/transform/resource/after-delombok/AccessorsConfiguration.java b/test/transform/resource/after-delombok/AccessorsConfiguration.java index f6604970..f52ff307 100644 --- a/test/transform/resource/after-delombok/AccessorsConfiguration.java +++ b/test/transform/resource/after-delombok/AccessorsConfiguration.java @@ -18,6 +18,9 @@ class AccessorsConfiguration2 { } class AccessorsConfiguration3 { private String fFieldName = ""; + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public AccessorsConfiguration3 setFieldName(final String fFieldName) { this.fFieldName = fFieldName; diff --git a/test/transform/resource/after-delombok/BuilderComplex.java b/test/transform/resource/after-delombok/BuilderComplex.java index 009ebe6c..591c2b4d 100644 --- a/test/transform/resource/after-delombok/BuilderComplex.java +++ b/test/transform/resource/after-delombok/BuilderComplex.java @@ -15,21 +15,33 @@ class BuilderComplex { @java.lang.SuppressWarnings("all") TestVoidName() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderComplex.TestVoidName number(final T number) { this.number = number; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderComplex.TestVoidName arg2(final int arg2) { this.arg2 = arg2; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderComplex.TestVoidName arg3(final String arg3) { this.arg3 = arg3; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderComplex.TestVoidName selfRef(final BuilderComplex selfRef) { this.selfRef = selfRef; diff --git a/test/transform/resource/after-delombok/BuilderCustomName.java b/test/transform/resource/after-delombok/BuilderCustomName.java index 4b423ee0..2e5924d3 100644 --- a/test/transform/resource/after-delombok/BuilderCustomName.java +++ b/test/transform/resource/after-delombok/BuilderCustomName.java @@ -9,6 +9,9 @@ class BuilderCustomName { protected abstract B self(); @java.lang.SuppressWarnings("all") public abstract C build(); + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public B field(final int field) { this.field = field; diff --git a/test/transform/resource/after-delombok/BuilderDefaults.java b/test/transform/resource/after-delombok/BuilderDefaults.java index 42b751ce..2170eed5 100644 --- a/test/transform/resource/after-delombok/BuilderDefaults.java +++ b/test/transform/resource/after-delombok/BuilderDefaults.java @@ -31,17 +31,26 @@ public final class BuilderDefaults { @java.lang.SuppressWarnings("all") BuilderDefaultsBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderDefaults.BuilderDefaultsBuilder x(final int x) { this.x$value = x; x$set = true; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderDefaults.BuilderDefaultsBuilder name(final String name) { this.name = name; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderDefaults.BuilderDefaultsBuilder z(final long z) { this.z$value = z; diff --git a/test/transform/resource/after-delombok/BuilderDefaultsGenerics.java b/test/transform/resource/after-delombok/BuilderDefaultsGenerics.java index 71dc7c5f..44d9491f 100644 --- a/test/transform/resource/after-delombok/BuilderDefaultsGenerics.java +++ b/test/transform/resource/after-delombok/BuilderDefaultsGenerics.java @@ -38,18 +38,27 @@ public class BuilderDefaultsGenerics> { @java.lang.SuppressWarnings("all") BuilderDefaultsGenericsBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderDefaultsGenerics.BuilderDefaultsGenericsBuilder callable(final java.util.concurrent.Callable callable) { this.callable$value = callable; callable$set = true; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderDefaultsGenerics.BuilderDefaultsGenericsBuilder tee(final T tee) { this.tee$value = tee; tee$set = true; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderDefaultsGenerics.BuilderDefaultsGenericsBuilder arrr(final R arrr) { this.arrr$value = arrr; diff --git a/test/transform/resource/after-delombok/BuilderDefaultsWarnings.java b/test/transform/resource/after-delombok/BuilderDefaultsWarnings.java index 356e072e..2b0a6d3b 100644 --- a/test/transform/resource/after-delombok/BuilderDefaultsWarnings.java +++ b/test/transform/resource/after-delombok/BuilderDefaultsWarnings.java @@ -23,11 +23,17 @@ public class BuilderDefaultsWarnings { @java.lang.SuppressWarnings("all") BuilderDefaultsWarningsBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderDefaultsWarnings.BuilderDefaultsWarningsBuilder x(final long x) { this.x = x; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderDefaultsWarnings.BuilderDefaultsWarningsBuilder z(final int z) { this.z = z; diff --git a/test/transform/resource/after-delombok/BuilderGenericMethod.java b/test/transform/resource/after-delombok/BuilderGenericMethod.java index d57f6415..36375952 100644 --- a/test/transform/resource/after-delombok/BuilderGenericMethod.java +++ b/test/transform/resource/after-delombok/BuilderGenericMethod.java @@ -13,11 +13,17 @@ class BuilderGenericMethod { @java.lang.SuppressWarnings("all") MapBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderGenericMethod.MapBuilder a(final int a) { this.a = a; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderGenericMethod.MapBuilder b(final long b) { this.b = b; diff --git a/test/transform/resource/after-delombok/BuilderInstanceMethod.java b/test/transform/resource/after-delombok/BuilderInstanceMethod.java index d0d5833f..2ee81dcb 100644 --- a/test/transform/resource/after-delombok/BuilderInstanceMethod.java +++ b/test/transform/resource/after-delombok/BuilderInstanceMethod.java @@ -16,21 +16,33 @@ class BuilderInstanceMethod { @java.lang.SuppressWarnings("all") StringBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderInstanceMethod.StringBuilder show(final int show) { this.show = show; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderInstanceMethod.StringBuilder yes(final int yes) { this.yes = yes; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderInstanceMethod.StringBuilder also(final List also) { this.also = also; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderInstanceMethod.StringBuilder $andMe(final int $andMe) { this.$andMe = $andMe; diff --git a/test/transform/resource/after-delombok/BuilderSimple.java b/test/transform/resource/after-delombok/BuilderSimple.java index 925d0dd3..a43567b3 100644 --- a/test/transform/resource/after-delombok/BuilderSimple.java +++ b/test/transform/resource/after-delombok/BuilderSimple.java @@ -18,11 +18,17 @@ class BuilderSimple { @java.lang.SuppressWarnings("all") BuilderSimpleBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderSimple.BuilderSimpleBuilder yes(final int yes) { this.yes = yes; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderSimple.BuilderSimpleBuilder also(final List also) { this.also = also; diff --git a/test/transform/resource/after-delombok/BuilderSimpleWithSetterPrefix.java b/test/transform/resource/after-delombok/BuilderSimpleWithSetterPrefix.java index ef0d8fc6..3038fe39 100644 --- a/test/transform/resource/after-delombok/BuilderSimpleWithSetterPrefix.java +++ b/test/transform/resource/after-delombok/BuilderSimpleWithSetterPrefix.java @@ -12,6 +12,9 @@ class BuilderSimpleWithSetterPrefix { @java.lang.SuppressWarnings("all") BuilderSimpleWithSetterPrefixBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderSimpleWithSetterPrefix.BuilderSimpleWithSetterPrefixBuilder withUnprefixed(final int unprefixed) { this.unprefixed = unprefixed; diff --git a/test/transform/resource/after-delombok/BuilderTypeAnnos.java b/test/transform/resource/after-delombok/BuilderTypeAnnos.java index bd450d5b..f5ef42f7 100644 --- a/test/transform/resource/after-delombok/BuilderTypeAnnos.java +++ b/test/transform/resource/after-delombok/BuilderTypeAnnos.java @@ -22,6 +22,9 @@ class BuilderTypeAnnos { @java.lang.SuppressWarnings("all") BuilderTypeAnnosBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderTypeAnnos.BuilderTypeAnnosBuilder foo(@TA final List foo) { this.foo = foo; diff --git a/test/transform/resource/after-delombok/BuilderTypeAnnosWithSetterPrefix.java b/test/transform/resource/after-delombok/BuilderTypeAnnosWithSetterPrefix.java index b221e69d..1fb7798a 100644 --- a/test/transform/resource/after-delombok/BuilderTypeAnnosWithSetterPrefix.java +++ b/test/transform/resource/after-delombok/BuilderTypeAnnosWithSetterPrefix.java @@ -22,6 +22,9 @@ class BuilderTypeAnnosWithSetterPrefix { @java.lang.SuppressWarnings("all") BuilderTypeAnnosWithSetterPrefixBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderTypeAnnosWithSetterPrefix.BuilderTypeAnnosWithSetterPrefixBuilder withFoo(@TA final List foo) { this.foo = foo; diff --git a/test/transform/resource/after-delombok/BuilderWithAccessors.java b/test/transform/resource/after-delombok/BuilderWithAccessors.java index 3fa47034..a8a9bc11 100644 --- a/test/transform/resource/after-delombok/BuilderWithAccessors.java +++ b/test/transform/resource/after-delombok/BuilderWithAccessors.java @@ -23,21 +23,33 @@ class BuilderWithAccessors { @java.lang.SuppressWarnings("all") BuilderWithAccessorsBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithAccessors.BuilderWithAccessorsBuilder plower(final int plower) { this.plower = plower; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithAccessors.BuilderWithAccessorsBuilder upper(final int upper) { this.upper = upper; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithAccessors.BuilderWithAccessorsBuilder foo(final int foo) { this.foo = foo; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithAccessors.BuilderWithAccessorsBuilder _bar(final int _bar) { this._bar = _bar; diff --git a/test/transform/resource/after-delombok/BuilderWithBadNames.java b/test/transform/resource/after-delombok/BuilderWithBadNames.java index d77ca71c..c96fbc58 100644 --- a/test/transform/resource/after-delombok/BuilderWithBadNames.java +++ b/test/transform/resource/after-delombok/BuilderWithBadNames.java @@ -15,11 +15,17 @@ public class BuilderWithBadNames { @java.lang.SuppressWarnings("all") BuilderWithBadNamesBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithBadNames.BuilderWithBadNamesBuilder build(final String build) { this.build = build; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithBadNames.BuilderWithBadNamesBuilder toString(final String toString) { this.toString = toString; diff --git a/test/transform/resource/after-delombok/BuilderWithDeprecated.java b/test/transform/resource/after-delombok/BuilderWithDeprecated.java index b6a09376..f0729649 100644 --- a/test/transform/resource/after-delombok/BuilderWithDeprecated.java +++ b/test/transform/resource/after-delombok/BuilderWithDeprecated.java @@ -40,6 +40,9 @@ public class BuilderWithDeprecated { this.dep1 = dep1; return this; } + /** + * @return {@code this}. + */ @java.lang.Deprecated @java.lang.SuppressWarnings("all") public BuilderWithDeprecated.BuilderWithDeprecatedBuilder dep2(final int dep2) { diff --git a/test/transform/resource/after-delombok/BuilderWithDeprecatedAnnOnly.java b/test/transform/resource/after-delombok/BuilderWithDeprecatedAnnOnly.java index f039c047..d5c06465 100644 --- a/test/transform/resource/after-delombok/BuilderWithDeprecatedAnnOnly.java +++ b/test/transform/resource/after-delombok/BuilderWithDeprecatedAnnOnly.java @@ -23,6 +23,9 @@ public class BuilderWithDeprecatedAnnOnly { @java.lang.SuppressWarnings("all") BuilderWithDeprecatedAnnOnlyBuilder() { } + /** + * @return {@code this}. + */ @java.lang.Deprecated @java.lang.SuppressWarnings("all") public BuilderWithDeprecatedAnnOnly.BuilderWithDeprecatedAnnOnlyBuilder dep1(final int dep1) { diff --git a/test/transform/resource/after-delombok/BuilderWithExistingBuilderClass.java b/test/transform/resource/after-delombok/BuilderWithExistingBuilderClass.java index 88eeee64..9c7ac1ad 100644 --- a/test/transform/resource/after-delombok/BuilderWithExistingBuilderClass.java +++ b/test/transform/resource/after-delombok/BuilderWithExistingBuilderClass.java @@ -13,11 +13,17 @@ class BuilderWithExistingBuilderClass { @java.lang.SuppressWarnings("all") BuilderWithExistingBuilderClassBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithExistingBuilderClass.BuilderWithExistingBuilderClassBuilder arg1(final Z arg1) { this.arg1 = arg1; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithExistingBuilderClass.BuilderWithExistingBuilderClassBuilder arg3(final String arg3) { this.arg3 = arg3; diff --git a/test/transform/resource/after-delombok/BuilderWithExistingBuilderClassWithSetterPrefix.java b/test/transform/resource/after-delombok/BuilderWithExistingBuilderClassWithSetterPrefix.java index b1ed5fef..c7da67f8 100644 --- a/test/transform/resource/after-delombok/BuilderWithExistingBuilderClassWithSetterPrefix.java +++ b/test/transform/resource/after-delombok/BuilderWithExistingBuilderClassWithSetterPrefix.java @@ -13,11 +13,17 @@ class BuilderWithExistingBuilderClassWithSetterPrefix { @java.lang.SuppressWarnings("all") BuilderWithExistingBuilderClassWithSetterPrefixBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithExistingBuilderClassWithSetterPrefix.BuilderWithExistingBuilderClassWithSetterPrefixBuilder withArg1(final Z arg1) { this.arg1 = arg1; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithExistingBuilderClassWithSetterPrefix.BuilderWithExistingBuilderClassWithSetterPrefixBuilder withArg3(final String arg3) { this.arg3 = arg3; diff --git a/test/transform/resource/after-delombok/BuilderWithNoBuilderMethod.java b/test/transform/resource/after-delombok/BuilderWithNoBuilderMethod.java index d555ab06..61df4427 100644 --- a/test/transform/resource/after-delombok/BuilderWithNoBuilderMethod.java +++ b/test/transform/resource/after-delombok/BuilderWithNoBuilderMethod.java @@ -11,6 +11,9 @@ class BuilderWithNoBuilderMethod { @java.lang.SuppressWarnings("all") BuilderWithNoBuilderMethodBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithNoBuilderMethod.BuilderWithNoBuilderMethodBuilder a(final String a) { this.a = a; diff --git a/test/transform/resource/after-delombok/BuilderWithNonNull.java b/test/transform/resource/after-delombok/BuilderWithNonNull.java index 9858d5bd..c9c37542 100644 --- a/test/transform/resource/after-delombok/BuilderWithNonNull.java +++ b/test/transform/resource/after-delombok/BuilderWithNonNull.java @@ -15,6 +15,9 @@ class BuilderWithNonNull { @java.lang.SuppressWarnings("all") BuilderWithNonNullBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithNonNull.BuilderWithNonNullBuilder id(@lombok.NonNull final String id) { if (id == null) { diff --git a/test/transform/resource/after-delombok/BuilderWithNonNullWithSetterPrefix.java b/test/transform/resource/after-delombok/BuilderWithNonNullWithSetterPrefix.java index 8a27f443..ec8ed514 100644 --- a/test/transform/resource/after-delombok/BuilderWithNonNullWithSetterPrefix.java +++ b/test/transform/resource/after-delombok/BuilderWithNonNullWithSetterPrefix.java @@ -15,6 +15,9 @@ class BuilderWithNonNullWithSetterPrefix { @java.lang.SuppressWarnings("all") BuilderWithNonNullWithSetterPrefixBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithNonNullWithSetterPrefix.BuilderWithNonNullWithSetterPrefixBuilder withId(@lombok.NonNull final String id) { if (id == null) { diff --git a/test/transform/resource/after-delombok/BuilderWithRecursiveGenerics.java b/test/transform/resource/after-delombok/BuilderWithRecursiveGenerics.java index 33dd7d10..a96fe1cc 100644 --- a/test/transform/resource/after-delombok/BuilderWithRecursiveGenerics.java +++ b/test/transform/resource/after-delombok/BuilderWithRecursiveGenerics.java @@ -19,11 +19,17 @@ public class BuilderWithRecursiveGenerics { @java.lang.SuppressWarnings("all") TestBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithRecursiveGenerics.Test.TestBuilder foo(final Foo foo) { this.foo = foo; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithRecursiveGenerics.Test.TestBuilder bar(final Bar bar) { this.bar = bar; diff --git a/test/transform/resource/after-delombok/BuilderWithToBuilder.java b/test/transform/resource/after-delombok/BuilderWithToBuilder.java index 3eeadcc5..0df43609 100644 --- a/test/transform/resource/after-delombok/BuilderWithToBuilder.java +++ b/test/transform/resource/after-delombok/BuilderWithToBuilder.java @@ -27,16 +27,25 @@ class BuilderWithToBuilder { @java.lang.SuppressWarnings("all") BuilderWithToBuilderBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithToBuilder.BuilderWithToBuilderBuilder one(final String one) { this.one = one; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithToBuilder.BuilderWithToBuilderBuilder two(final String two) { this.two = two; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public BuilderWithToBuilder.BuilderWithToBuilderBuilder foo(final T foo) { this.foo = foo; @@ -114,16 +123,25 @@ class ConstructorWithToBuilder { @java.lang.SuppressWarnings("all") ConstructorWithToBuilderBuilder() { } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public ConstructorWithToBuilder.ConstructorWithToBuilderBuilder mOne(final String mOne) { this.mOne = mOne; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public ConstructorWithToBuilder.ConstructorWithToBuilderBuilder baz(final T baz) { this.baz = baz; return this; } + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public ConstructorWithToBuilder.ConstructorWithToBuilderBuilder bars(final com.google.common.collect.ImmutableList bars) { this.bars = bars; @@ -167,7 +185,9 @@ class StaticMethodWithToBuilder { @java.lang.SuppressWarnings("all") StaticMethodWithToBuilderBuilder() { } - + /** + * @return {@code this}. + */ @java.lang.SuppressWarnings("all") public StaticMethodWithToBuilder.StaticMethodWithToBuilderBuilder foo(final T foo) { this.foo = foo; diff --git a/test/transform/resource/after-delombok/BuilderWithTolerate.java b/test/transform/resource/after-de