You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/12/10 10:46:27 UTC

[isis] 01/02: ISIS-2473: support rendering of generic methods

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit baae4ddaecdce81c9f08702f4aafbaa5b366e4ee
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Dec 10 10:09:01 2020 +0100

    ISIS-2473: support rendering of generic methods
---
 .../isis/tooling/cli/doclet/AdocletContext.java    | 23 +++++++++++++++++-----
 .../apache/isis/tooling/cli/doclet/ToAsciiDoc.java | 22 +++++++++++++++++++--
 2 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/AdocletContext.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/AdocletContext.java
index 394f1ab..684ca93 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/AdocletContext.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/AdocletContext.java
@@ -38,14 +38,23 @@ public class AdocletContext {
 
     private final @NonNull String xrefPageIdFormat;
     
+    /**
+     * method-generic-type | return-type | name | param-list
+     */
     @Builder.Default
-    private final @NonNull String methodFormat = "`%s %s(%s)`"; // return-type | name | param-list
+    private final @NonNull String methodFormat = "`%s %s %s(%s)`";
     
+    /**
+     * method-generic-type | return-type | name | param-list
+     */
     @Builder.Default
-    private final @NonNull String staticMethodFormat = "`%s _%s_(%s)`"; // return-type | name | param-list
+    private final @NonNull String staticMethodFormat = "`%s %s _%s_(%s)`"; 
     
+    /**
+     * method | description
+     */
     @Builder.Default
-    private final @NonNull String methodDescriptionFormat = "\n<.> %s %s\n"; // method | description
+    private final @NonNull String methodDescriptionFormat = "\n<.> %s %s\n";
     
     @Builder.Default
     private final boolean includeJavaSource = true;
@@ -79,10 +88,14 @@ public class AdocletContext {
         return Optional.ofNullable(adocletIndex.get(key));
     }
     
+    public static AdocletContextBuilder javaSourceWithFootNotesFormat() {
+        return AdocletContext.builder();
+    }
+    
     public static AdocletContextBuilder compactFormat() {
         return AdocletContext.builder()
-                .methodFormat("`*%2$s*(%3$s)` : `%1$s`") // return-type | name | param-list)
-                .staticMethodFormat("`*_%2$s_*(%3$s)` : `%1$s`") // return-type | name | param-list)
+                .methodFormat("`*%3$s*%1$s(%4$s)` : `%2$s`") //  method-generic-type | return-type | name | param-list)
+                .staticMethodFormat("`*_%3$s_*%1$s(%4$s)` : `%2$s`") //  method-generic-type | return-type | name | param-list)
                 .methodDescriptionFormat("\n* %s\n%s\n") // method | description
                 .includeJavaSource(false)
                 ;        
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/ToAsciiDoc.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/ToAsciiDoc.java
index 672f71c..237e909 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/ToAsciiDoc.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/ToAsciiDoc.java
@@ -20,10 +20,15 @@ package org.apache.isis.tooling.cli.doclet;
 
 import java.util.stream.Collectors;
 
+import javax.annotation.Nullable;
+
+import com.github.javaparser.ast.NodeList;
 import com.github.javaparser.ast.body.MethodDeclaration;
 import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.expr.SimpleName;
 import com.github.javaparser.ast.type.ClassOrInterfaceType;
 import com.github.javaparser.ast.type.Type;
+import com.github.javaparser.ast.type.TypeParameter;
 import com.github.javaparser.javadoc.Javadoc;
 import com.github.javaparser.javadoc.description.JavadocInlineTag;
 import com.github.javaparser.javadoc.description.JavadocSnippet;
@@ -45,12 +50,25 @@ class ToAsciiDoc {
                 ? docletContext.getStaticMethodFormat()
                 : docletContext.getMethodFormat();
         
-        return String.format(methodFormat, 
+        return String.format(methodFormat,
+                typeParamters(md.getTypeParameters()),
                 type(md.getType()),
                 md.getNameAsString(), 
                 md.getParameters()
+                    .stream()
+                    .map(this::parameterDeclaration)
+                    .collect(Collectors.joining(", ")));
+    }
+    
+    public String typeParamters(final @Nullable NodeList<TypeParameter> typeParamters) {
+        if(typeParamters == null
+                || typeParamters.isEmpty()) {
+            return "";
+        }
+        return String.format("<%s>", typeParamters
                 .stream()
-                .map(this::parameterDeclaration)
+                .map(TypeParameter::getName)
+                .map(SimpleName::asString)
                 .collect(Collectors.joining(", ")));
     }