aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRawi01 <Rawi01@users.noreply.github.com>2020-06-10 10:18:15 +0200
committerRoel Spilker <r.spilker@gmail.com>2020-06-11 21:19:23 +0200
commita2941041d4d4b3db2a12a38212226f36c11219ab (patch)
treed0e313ad808cf21b5072dbfa3eb59f88ea907a6f /src
parent51216bed0e723598fa26677ffc3ea0c8d2c3150d (diff)
downloadlombok-a2941041d4d4b3db2a12a38212226f36c11219ab.tar.gz
lombok-a2941041d4d4b3db2a12a38212226f36c11219ab.tar.bz2
lombok-a2941041d4d4b3db2a12a38212226f36c11219ab.zip
[fixes #2481] Copy constructor javadoc to builder methods
Diffstat (limited to 'src')
-rw-r--r--src/core/lombok/javac/handlers/HandleBuilder.java24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/core/lombok/javac/handlers/HandleBuilder.java b/src/core/lombok/javac/handlers/HandleBuilder.java
index 91a74d62..95be28f3 100644
--- a/src/core/lombok/javac/handlers/HandleBuilder.java
+++ b/src/core/lombok/javac/handlers/HandleBuilder.java
@@ -27,6 +27,8 @@ 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;
@@ -38,6 +40,7 @@ import com.sun.tools.javac.tree.JCTree.JCAnnotation;
import com.sun.tools.javac.tree.JCTree.JCArrayTypeTree;
import com.sun.tools.javac.tree.JCTree.JCBlock;
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
+import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
import com.sun.tools.javac.tree.JCTree.JCExpression;
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
import com.sun.tools.javac.tree.JCTree.JCIdent;
@@ -845,11 +848,30 @@ public class HandleBuilder extends JavacAnnotationHandler<Builder> {
newMethod.params = List.of(recv, newMethod.params.get(0));
}
recursiveSetGeneratedBy(newMethod, source.get(), builderType.getContext());
- copyJavadoc(originalFieldNode, newMethod, CopyJavadoc.SETTER, true);
+ if (source.up().getKind() == Kind.METHOD) {
+ copyJavadocFromParam(originalFieldNode.up(), newMethod, paramName.toString());
+ } else {
+ copyJavadoc(originalFieldNode, newMethod, CopyJavadoc.SETTER, true);
+ }
injectMethod(builderType, newMethod);
}
+ private void copyJavadocFromParam(JavacNode from, JCMethodDecl to, String param) {
+ 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);
+ }
+ } catch (Exception ignore) {}
+ }
+
public JavacNode makeBuilderClass(boolean isStatic, JavacNode source, JavacNode tdParent, String builderClassName, List<JCTypeParameter> typeParams, JCAnnotation ast, AccessLevel access) {
JavacTreeMaker maker = tdParent.getTreeMaker();
int modifiers = toJavacModifier(access);