diff options
4 files changed, 126 insertions, 1 deletions
diff --git a/src/core/lombok/javac/handlers/JavacHandlerUtil.java b/src/core/lombok/javac/handlers/JavacHandlerUtil.java index 0db59da1..c3607d37 100644 --- a/src/core/lombok/javac/handlers/JavacHandlerUtil.java +++ b/src/core/lombok/javac/handlers/JavacHandlerUtil.java @@ -1485,6 +1485,18 @@ public class JavacHandlerUtil { } catch (Exception ignore) {} } + private static final Pattern FIND_RETURN = Pattern.compile("^\\s*\\**\\s*@returns?\\s+.*$", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); + static String addReturnsThisIfNeeded(String in) { + if (FIND_RETURN.matcher(in).find()) return in; + + return addJavadocLine(in, "@return this"); + } + + static String addJavadocLine(String in, String line) { + if (in.endsWith("\n")) return in + line + "\n"; + return in + "\n" + line; + } + private static class CopyJavadoc_8 { static void copyJavadoc(JavacNode from, JCTree to, CopyJavadoc copyMode, Object dc) { DocCommentTable dct = (DocCommentTable) dc; @@ -1492,6 +1504,9 @@ public class JavacHandlerUtil { if (javadoc != null) { String[] filtered = copyMode.split(javadoc.getText()); + if (copyMode == CopyJavadoc.SETTER && shouldReturnThis(from)) { + filtered[0] = addReturnsThisIfNeeded(filtered[0]); + } dct.putComment(to, createJavadocComment(filtered[0], from)); dct.putComment(from.get(), createJavadocComment(filtered[1], from)); } @@ -1525,6 +1540,9 @@ public class JavacHandlerUtil { if (javadoc != null) { String[] filtered = copyMode.split(javadoc); + if (copyMode == CopyJavadoc.SETTER && shouldReturnThis(from)) { + filtered[0] = addReturnsThisIfNeeded(filtered[0]); + } docComments.put(to, filtered[0]); docComments.put(from.get(), filtered[1]); } diff --git a/test/transform/resource/after-delombok/GetterSetterJavadoc.java b/test/transform/resource/after-delombok/GetterSetterJavadoc.java index f4f04fa1..45a99c9d 100644 --- a/test/transform/resource/after-delombok/GetterSetterJavadoc.java +++ b/test/transform/resource/after-delombok/GetterSetterJavadoc.java @@ -108,4 +108,58 @@ class GetterSetterJavadoc3 { public void setFieldName(final int fieldName) { this.fieldName = fieldName; } -}
\ No newline at end of file +} +class GetterSetterJavadoc4 { + /** + * Some text + */ + private int fieldName; + /** + * Some text + * + * @return Sky is blue4 + */ + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public int fieldName() { + return this.fieldName; + } + /** + * Some text + * + * @param fieldName Hello, World5 + * @return this + */ + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public GetterSetterJavadoc4 fieldName(final int fieldName) { + this.fieldName = fieldName; + return this; + } +} +class GetterSetterJavadoc5 { + /** + * Some text + */ + private int fieldName; + /** + * Getter section + * @return Sky is blue5 + */ + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public int fieldName() { + return this.fieldName; + } + /** + * Setter section + * @param fieldName Hello, World5 + * @return Sky is blue5 + */ + @java.lang.SuppressWarnings("all") + @javax.annotation.Generated("lombok") + public GetterSetterJavadoc5 fieldName(final int fieldName) { + this.fieldName = fieldName; + return this; + } +} diff --git a/test/transform/resource/after-ecj/GetterSetterJavadoc.java b/test/transform/resource/after-ecj/GetterSetterJavadoc.java index 21841d47..275b408d 100644 --- a/test/transform/resource/after-ecj/GetterSetterJavadoc.java +++ b/test/transform/resource/after-ecj/GetterSetterJavadoc.java @@ -57,4 +57,30 @@ class GetterSetterJavadoc3 { public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") 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") @javax.annotation.Generated("lombok") int fieldName() { + return this.fieldName; + } + public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") 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") @javax.annotation.Generated("lombok") int fieldName() { + return this.fieldName; + } + public @java.lang.SuppressWarnings("all") @javax.annotation.Generated("lombok") GetterSetterJavadoc5 fieldName(final int fieldName) { + this.fieldName = fieldName; + return this; + } }
\ No newline at end of file diff --git a/test/transform/resource/before/GetterSetterJavadoc.java b/test/transform/resource/before/GetterSetterJavadoc.java index 0dc64092..2ad46f8d 100644 --- a/test/transform/resource/before/GetterSetterJavadoc.java +++ b/test/transform/resource/before/GetterSetterJavadoc.java @@ -35,3 +35,30 @@ class GetterSetterJavadoc3 { */ @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; +} |