diff --git a/src/core/lombok/core/handlers/HandlerUtil.java b/src/core/lombok/core/handlers/HandlerUtil.java index 16274df9..b6124670 100644 --- a/src/core/lombok/core/handlers/HandlerUtil.java +++ b/src/core/lombok/core/handlers/HandlerUtil.java @@ -974,7 +974,7 @@ public class HandlerUtil { 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); + Pattern pattern = Pattern.compile("@param " + param + " (\\S|\\s)+?(?=^ ?@|\\z)", Pattern.MULTILINE | Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(methodComment); if (matcher.find()) { return matcher.group(); diff --git a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java index 39e29e94..31554a86 100644 --- a/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java +++ b/src/core/lombok/eclipse/handlers/EclipseHandlerUtil.java @@ -2800,10 +2800,21 @@ public class EclipseHandlerUtil { public static String getDocComment(EclipseNode eclipseNode) { if (eclipseNode.getAst().getSource() == null) return null; + int start = -1; + int end = -1; + final ASTNode node = eclipseNode.get(); if (node instanceof FieldDeclaration) { FieldDeclaration fieldDeclaration = (FieldDeclaration) node; - char[] rawContent = CharOperation.subarray(eclipseNode.getAst().getSource(), fieldDeclaration.declarationSourceStart, fieldDeclaration.declarationSourceEnd); + start = fieldDeclaration.declarationSourceStart; + end = fieldDeclaration.declarationSourceEnd; + } else if (node instanceof AbstractMethodDeclaration) { + AbstractMethodDeclaration abstractMethodDeclaration = (AbstractMethodDeclaration) node; + start = abstractMethodDeclaration.declarationSourceStart; + end = abstractMethodDeclaration.declarationSourceEnd; + } + if (start != -1 && end != -1) { + char[] rawContent = CharOperation.subarray(eclipseNode.getAst().getSource(), start, end); String rawContentString = new String(rawContent); int startIndex = rawContentString.indexOf("/**"); int endIndex = rawContentString.indexOf("*/"); diff --git a/src/core/lombok/eclipse/handlers/HandleBuilder.java b/src/core/lombok/eclipse/handlers/HandleBuilder.java index 0a6b3447..a63d3b36 100755 --- a/src/core/lombok/eclipse/handlers/HandleBuilder.java +++ b/src/core/lombok/eclipse/handlers/HandleBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013-2021 The Project Lombok Authors. + * Copyright (C) 2013-2024 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 @@ -1053,7 +1053,7 @@ public class HandleBuilder extends EclipseAnnotationHandler { MethodDeclaration setter = HandleSetter.createSetter(td, deprecate, fieldNode, setterName, bfd.name, bfd.nameOfSetFlag, job.oldChain, toEclipseModifier(job.accessInners), job.sourceNode, methodAnnsList, bfd.annotations != null ? Arrays.asList(copyAnnotations(source, bfd.annotations)) : Collections.emptyList()); if (job.sourceNode.up().getKind() == Kind.METHOD) { - copyJavadocFromParam(bfd.originalFieldNode.up(), setter, td, bfd.name.toString()); + copyJavadocFromParam(bfd.originalFieldNode.up(), setter, td, new String(bfd.name)); } else { copyJavadoc(bfd.originalFieldNode, setter, td, CopyJavadoc.SETTER, true); } diff --git a/test/transform/resource/after-delombok/BuilderConstructorJavadoc.java b/test/transform/resource/after-delombok/BuilderConstructorJavadoc.java index 4746de45..71bf1a7c 100644 --- a/test/transform/resource/after-delombok/BuilderConstructorJavadoc.java +++ b/test/transform/resource/after-delombok/BuilderConstructorJavadoc.java @@ -9,8 +9,9 @@ class BuilderConstructorJavadoc { * {@code @code} or tags * @param predef don't copy this one * @param predefWithJavadoc don't copy this one + * @param last also copy last param */ - BuilderConstructorJavadoc(int basic, int multiline, int predef, int predefWithJavadoc) { + BuilderConstructorJavadoc(int basic, int multiline, int predef, int predefWithJavadoc, int last) { } public static class BuilderConstructorJavadocBuilder { @java.lang.SuppressWarnings("all") @@ -25,6 +26,9 @@ class BuilderConstructorJavadoc { @java.lang.SuppressWarnings("all") @lombok.Generated private int predefWithJavadoc; + @java.lang.SuppressWarnings("all") + @lombok.Generated + private int last; public BuilderConstructorJavadocBuilder predef(final int x) { this.predef = x; return this; @@ -64,16 +68,26 @@ class BuilderConstructorJavadoc { this.multiline = multiline; return this; } + /** + * @param last also copy last param + * @return {@code this}. + */ + @java.lang.SuppressWarnings("all") + @lombok.Generated + public BuilderConstructorJavadoc.BuilderConstructorJavadocBuilder last(final int last) { + this.last = last; + return this; + } @java.lang.SuppressWarnings("all") @lombok.Generated public BuilderConstructorJavadoc build() { - return new BuilderConstructorJavadoc(this.basic, this.multiline, this.predef, this.predefWithJavadoc); + return new BuilderConstructorJavadoc(this.basic, this.multiline, this.predef, this.predefWithJavadoc, this.last); } @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated public java.lang.String toString() { - return "BuilderConstructorJavadoc.BuilderConstructorJavadocBuilder(basic=" + this.basic + ", multiline=" + this.multiline + ", predef=" + this.predef + ", predefWithJavadoc=" + this.predefWithJavadoc + ")"; + return "BuilderConstructorJavadoc.BuilderConstructorJavadocBuilder(basic=" + this.basic + ", multiline=" + this.multiline + ", predef=" + this.predef + ", predefWithJavadoc=" + this.predefWithJavadoc + ", last=" + this.last + ")"; } } @java.lang.SuppressWarnings("all") diff --git a/test/transform/resource/after-ecj/BuilderConstructorJavadoc.java b/test/transform/resource/after-ecj/BuilderConstructorJavadoc.java index 273a803f..62c8eb8b 100644 --- a/test/transform/resource/after-ecj/BuilderConstructorJavadoc.java +++ b/test/transform/resource/after-ecj/BuilderConstructorJavadoc.java @@ -5,6 +5,7 @@ class BuilderConstructorJavadoc { private @java.lang.SuppressWarnings("all") @lombok.Generated int multiline; private @java.lang.SuppressWarnings("all") @lombok.Generated int predef; private @java.lang.SuppressWarnings("all") @lombok.Generated int predefWithJavadoc; + private @java.lang.SuppressWarnings("all") @lombok.Generated int last; public BuilderConstructorJavadocBuilder predef(final int x) { this.predef = x; return this; @@ -17,6 +18,7 @@ class BuilderConstructorJavadoc { super(); } /** + * @param basic tag is moved to the setter * @return {@code this}. */ public @java.lang.SuppressWarnings("all") @lombok.Generated BuilderConstructorJavadoc.BuilderConstructorJavadocBuilder basic(final int basic) { @@ -24,20 +26,31 @@ class BuilderConstructorJavadoc { return this; } /** + * @param multiline a param comment + * can be on multiple lines and can use + * {@code @code} or tags * @return {@code this}. */ public @java.lang.SuppressWarnings("all") @lombok.Generated BuilderConstructorJavadoc.BuilderConstructorJavadocBuilder multiline(final int multiline) { this.multiline = multiline; return this; } + /** + * @param last also copy last param + * @return {@code this}. + */ + public @java.lang.SuppressWarnings("all") @lombok.Generated BuilderConstructorJavadoc.BuilderConstructorJavadocBuilder last(final int last) { + this.last = last; + return this; + } public @java.lang.SuppressWarnings("all") @lombok.Generated BuilderConstructorJavadoc build() { - return new BuilderConstructorJavadoc(this.basic, this.multiline, this.predef, this.predefWithJavadoc); + return new BuilderConstructorJavadoc(this.basic, this.multiline, this.predef, this.predefWithJavadoc, this.last); } public @java.lang.Override @java.lang.SuppressWarnings("all") @lombok.Generated java.lang.String toString() { - return (((((((("BuilderConstructorJavadoc.BuilderConstructorJavadocBuilder(basic=" + this.basic) + ", multiline=") + this.multiline) + ", predef=") + this.predef) + ", predefWithJavadoc=") + this.predefWithJavadoc) + ")"); + return (((((((((("BuilderConstructorJavadoc.BuilderConstructorJavadocBuilder(basic=" + this.basic) + ", multiline=") + this.multiline) + ", predef=") + this.predef) + ", predefWithJavadoc=") + this.predefWithJavadoc) + ", last=") + this.last) + ")"); } } - @lombok.Builder BuilderConstructorJavadoc(int basic, int multiline, int predef, int predefWithJavadoc) { + @lombok.Builder BuilderConstructorJavadoc(int basic, int multiline, int predef, int predefWithJavadoc, int last) { super(); } public static @java.lang.SuppressWarnings("all") @lombok.Generated BuilderConstructorJavadoc.BuilderConstructorJavadocBuilder builder() { diff --git a/test/transform/resource/before/BuilderConstructorJavadoc.java b/test/transform/resource/before/BuilderConstructorJavadoc.java index ebbd473f..adf6db76 100644 --- a/test/transform/resource/before/BuilderConstructorJavadoc.java +++ b/test/transform/resource/before/BuilderConstructorJavadoc.java @@ -10,9 +10,10 @@ class BuilderConstructorJavadoc { * {@code @code} or tags * @param predef don't copy this one * @param predefWithJavadoc don't copy this one + * @param last also copy last param */ @lombok.Builder - BuilderConstructorJavadoc(int basic, int multiline, int predef, int predefWithJavadoc) { + BuilderConstructorJavadoc(int basic, int multiline, int predef, int predefWithJavadoc, int last) { }