This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch api in repository https://gitbox.apache.org/repos/asf/camel.git
commit 4835563d36dab943ad961e537ac94883912ee31c Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Sep 12 11:33:25 2020 +0200 CAMEL-15478: api-component should generate @ApiParam with more fine grained details so we know which parameter is for which api method. --- .../apache/camel/tooling/util/JavadocHelper.java | 6 ++- .../maven/AbstractApiMethodGeneratorMojo.java | 1 - .../maven/JavaSourceApiMethodGeneratorMojo.java | 1 + .../org/apache/camel/maven/JavaSourceParser.java | 43 +++++++++++++++++++--- .../org/apache/camel/maven/SignatureModel.java | 9 +++++ .../apache/camel/maven/JavaSourceParserTest.java | 10 +++++ 6 files changed, 62 insertions(+), 8 deletions(-) diff --git a/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/JavadocHelper.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/JavadocHelper.java index 2d821eb..de0ac0c 100644 --- a/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/JavadocHelper.java +++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/JavadocHelper.java @@ -89,9 +89,13 @@ public final class JavadocHelper { String s = sb.toString(); // remove all XML tags s = s.replaceAll("<.*?>", ""); - // remove @link inlined javadoc links which is special handled + // remove {@link inlined javadoc links which is special handled s = s.replaceAll("\\{@link\\s\\w+\\s(\\w+)}", "$1"); s = s.replaceAll("\\{@link\\s([\\w]+)}", "$1"); + // also remove the commonly mistake to do with @{link + s = s.replaceAll("@\\{link\\s\\w+\\s(\\w+)}", "$1"); + s = s.replaceAll("@\\{link\\s([\\w]+)}", "$1"); + // remove all inlined javadoc links, eg such as {@link org.apache.camel.spi.Registry} // use #? to remove leading # in case its a local reference s = s.replaceAll("\\{@\\w+\\s#?([\\w.#(\\d,)]+)}", "$1"); diff --git a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/AbstractApiMethodGeneratorMojo.java b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/AbstractApiMethodGeneratorMojo.java index 8e2fa7e..e77b99b 100644 --- a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/AbstractApiMethodGeneratorMojo.java +++ b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/AbstractApiMethodGeneratorMojo.java @@ -390,7 +390,6 @@ public abstract class AbstractApiMethodGeneratorMojo extends AbstractApiMethodBa sb.append("{"); for (int i = 0; i < methods.size(); i++) { String method = methods.get(i); - // TODO: Add description and signature sb.append("@ApiMethod(methodName = \"").append(method).append("\")"); if (i < methods.size() - 1) { sb.append(", "); diff --git a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceApiMethodGeneratorMojo.java b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceApiMethodGeneratorMojo.java index 742c460..f5d3319 100644 --- a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceApiMethodGeneratorMojo.java +++ b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceApiMethodGeneratorMojo.java @@ -114,6 +114,7 @@ public class JavaSourceApiMethodGeneratorMojo extends AbstractApiMethodGenerator SignatureModel model = new SignatureModel(); model.setApiDescription(parser.getApiDescription()); model.setSignature(method); + model.setMethodDescription(parser.getMethodDescriptions().get(name)); Map<String, String> params = parser.getParameters().get(name); model.setParameters(params); result.put(method, model); diff --git a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceParser.java b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceParser.java index 935e41f..ac1e466 100644 --- a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceParser.java +++ b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/JavaSourceParser.java @@ -46,6 +46,7 @@ public class JavaSourceParser { private Map<String, Map<String, String>> parameters = new LinkedHashMap<>(); private String errorMessage; private String apiDescription; + private final Map<String, String> methodDescriptions = new HashMap<>(); public synchronized void parse(InputStream in, String innerClass) throws Exception { JavaClassSource rootClazz = (JavaClassSource) Roaster.parse(in); @@ -60,10 +61,12 @@ public class JavaSourceParser { } } - String doc = getClassJavadocRaw(clazz); + String rawClass = clazz.toUnformattedString(); + String doc = getClassJavadocRaw(clazz, rawClass); apiDescription = sanitizeJavaDocValue(doc, true); if (apiDescription == null || apiDescription.isEmpty()) { - doc = getClassJavadocRaw(rootClazz); + rawClass = rootClazz.toUnformattedString(); + doc = getClassJavadocRaw(rootClazz, rawClass); apiDescription = sanitizeJavaDocValue(doc, true); } if (apiDescription != null && apiDescription.indexOf('.') > 0) { @@ -75,6 +78,16 @@ public class JavaSourceParser { if (!ms.isPublic() || ms.isConstructor()) { continue; } + + doc = getMethodJavadocRaw(ms, rawClass); + doc = sanitizeJavaDocValue(doc, true); + if (doc != null && doc.indexOf('.') > 0) { + doc = StringHelper.before(doc, "."); + } + if (doc != null && !doc.isEmpty()) { + methodDescriptions.put(ms.getName(), doc); + } + String signature = ms.toSignature(); // roaster signatures has return values at end // public create(String, AddressRequest) : Result @@ -240,15 +253,29 @@ public class JavaSourceParser { * Gets the class javadoc raw (incl line breaks and tags etc). The roaster API returns the javadoc with line breaks * and others removed */ - private static String getClassJavadocRaw(JavaClassSource clazz) { + private static String getClassJavadocRaw(JavaClassSource clazz, String rawClass) { Object obj = clazz.getJavaDoc().getInternal(); ASTNode node = (ASTNode) obj; int pos = node.getStartPosition(); int len = node.getLength(); if (pos > 0 && len > 0) { - String txt = clazz.toUnformattedString(); - String doc = txt.substring(pos, pos + len); - return doc; + return rawClass.substring(pos, pos + len); + } else { + return null; + } + } + + /** + * Gets the method javadoc raw (incl line breaks and tags etc). The roaster API returns the javadoc with line breaks + * and others removed + */ + private static String getMethodJavadocRaw(MethodSource ms, String rawClass) { + Object obj = ms.getJavaDoc().getInternal(); + ASTNode node = (ASTNode) obj; + int pos = node.getStartPosition(); + int len = node.getLength(); + if (pos > 0 && len > 0) { + return rawClass.substring(pos, pos + len); } else { return null; } @@ -298,6 +325,7 @@ public class JavaSourceParser { methods.clear(); methodText.clear(); parameters.clear(); + methodDescriptions.clear(); errorMessage = null; apiDescription = null; } @@ -322,4 +350,7 @@ public class JavaSourceParser { return apiDescription; } + public Map<String, String> getMethodDescriptions() { + return methodDescriptions; + } } diff --git a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/SignatureModel.java b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/SignatureModel.java index 419cc14..cfa1f50 100644 --- a/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/SignatureModel.java +++ b/tooling/maven/camel-api-component-maven-plugin/src/main/java/org/apache/camel/maven/SignatureModel.java @@ -25,6 +25,7 @@ public class SignatureModel { private String apiName; private String apiDescription; + private String methodDescription; private String signature; private Map<String, String> parameters; @@ -44,6 +45,14 @@ public class SignatureModel { this.apiDescription = apiDescription; } + public String getMethodDescription() { + return methodDescription; + } + + public void setMethodDescription(String methodDescription) { + this.methodDescription = methodDescription; + } + public String getSignature() { return signature; } diff --git a/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/maven/JavaSourceParserTest.java b/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/maven/JavaSourceParserTest.java index 63e16fa..b7eb376 100644 --- a/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/maven/JavaSourceParserTest.java +++ b/tooling/maven/camel-api-component-maven-plugin/src/test/java/org/apache/camel/maven/JavaSourceParserTest.java @@ -124,4 +124,14 @@ public class JavaSourceParserTest { assertEquals("Provides methods to create, delete, find, and update Customer objects", desc); } + @Test + public void testMethodJavadoc() throws Exception { + final JavaSourceParser parser = new JavaSourceParser(); + + parser.parse(JavaSourceParserTest.class.getResourceAsStream("/DisputeGateway.java"), null); + + String desc = parser.getMethodDescriptions().get("addFileEvidence"); + assertEquals("Add File Evidence to a Dispute, given an ID and a FileEvidenceRequest File evidence request", desc); + } + }