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/09 13:37:53 UTC

[isis] branch master updated: ISIS-2473: check method return types and parameter types for whether need to cross-reference

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


The following commit(s) were added to refs/heads/master by this push:
     new b5a6013  ISIS-2473: check method return types and parameter types for whether need to cross-reference
b5a6013 is described below

commit b5a60137e755f4f196f72b2e6b95a66e8139a613
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Dec 9 13:12:57 2020 +0100

    ISIS-2473: check method return types and parameter types for whether
    need to cross-reference
    
    also renaming doclet->adoclet
---
 .../modules/generated/pages/index/RoleMemento.adoc |  2 +-
 .../modules/generated/pages/index/UserMemento.adoc | 12 ++--
 .../modules/generated/pages/index/UserService.adoc |  8 +--
 .../modules/generated/pages/system-overview.adoc   | 12 ++--
 .../cli/doclet/{Doclet.java => Adoclet.java}       | 20 +++----
 .../{DocletContext.java => AdocletContext.java}    | 28 +++++----
 .../cli/doclet/{Doclets.java => Adoclets.java}     |  2 +-
 .../apache/isis/tooling/cli/doclet/ToAsciiDoc.java | 70 +++++++++++++++++++---
 .../isis/tooling/cli/projdoc/ProjectDocModel.java  | 16 ++---
 .../isis/tooling/cli/projdoc/ProjectDocWriter.java |  8 +--
 .../doclet/{DocletTest.java => AdocletTest.java}   | 12 ++--
 .../cli/test/doclet/samples/UserMemento.java       |  4 ++
 .../cli/test/doclet/samples/UserService.java       |  2 +-
 13 files changed, 127 insertions(+), 69 deletions(-)

diff --git a/antora/components/system/modules/generated/pages/index/RoleMemento.adoc b/antora/components/system/modules/generated/pages/index/RoleMemento.adoc
index e3162ed..5aae575 100644
--- a/antora/components/system/modules/generated/pages/index/RoleMemento.adoc
+++ b/antora/components/system/modules/generated/pages/index/RoleMemento.adoc
@@ -1,6 +1,6 @@
 = RoleMemento
 
-Immutable serializable value held by   xref:system:generated:index/UserMemento.adoc[UserMemento]  .
+Immutable serializable value held by  xref:system:generated:index/UserMemento.adoc[UserMemento] .
 
 .RoleMemento
 [source,java]
diff --git a/antora/components/system/modules/generated/pages/index/UserMemento.adoc b/antora/components/system/modules/generated/pages/index/UserMemento.adoc
index b1644a8..41fcf6a 100644
--- a/antora/components/system/modules/generated/pages/index/UserMemento.adoc
+++ b/antora/components/system/modules/generated/pages/index/UserMemento.adoc
@@ -22,15 +22,15 @@ class UserMemento {
 ----
 
 
-<.> `UserMemento system()` The framework's internal user with unrestricted privileges.
+<.> `xref:system:generated:index/UserMemento.adoc[UserMemento] system()` The framework's internal user with unrestricted privileges.
 
-<.> `UserMemento ofName(@NonNull final String name)` Creates a new user with the specified name and no roles.
+<.> `xref:system:generated:index/UserMemento.adoc[UserMemento] ofName(String name)` Creates a new user with the specified name and no roles.
 
-<.> `UserMemento ofNameAndRoles(@NonNull final String name, final RoleMemento... roles)` Creates a new user with the specified name and assigned roles.
+<.> `xref:system:generated:index/UserMemento.adoc[UserMemento] ofNameAndRoles(String name, xref:system:generated:index/RoleMemento.adoc[RoleMemento] roles)` Creates a new user with the specified name and assigned roles.
 
-<.> `UserMemento ofNameAndRoleNames(@NonNull final String name, final String... roleNames)` Creates a new user with the specified name and assigned role names.
+<.> `xref:system:generated:index/UserMemento.adoc[UserMemento] ofNameAndRoleNames(String name, String roleNames)` Creates a new user with the specified name and assigned role names.
 
-<.> `UserMemento ofNameAndRoleNames(@NonNull final String name, @NonNull final Stream<String> roleNames)` Creates a new user with the specified name and assigned role names.
+<.> `xref:system:generated:index/UserMemento.adoc[UserMemento] ofNameAndRoleNames(String name, Stream<String> roleNames)` Creates a new user with the specified name and assigned role names.
 
-<.> `boolean isCurrentUser(@Nullable final String userName)` Determine if the specified name is this user.
+<.> `boolean isCurrentUser(String userName)` Determine if the specified name is this user.
 
diff --git a/antora/components/system/modules/generated/pages/index/UserService.adoc b/antora/components/system/modules/generated/pages/index/UserService.adoc
index fe6a32a..d6b8572 100644
--- a/antora/components/system/modules/generated/pages/index/UserService.adoc
+++ b/antora/components/system/modules/generated/pages/index/UserService.adoc
@@ -1,6 +1,6 @@
 = UserService
 
-The   xref:system:generated:index/UserService.adoc[UserService]   allows the domain object to obtain the identity of the user 
+The  xref:system:generated:index/UserService.adoc[UserService]  allows the domain object to obtain the identity of the user 
 interacting with said object.
 
 
@@ -23,12 +23,12 @@ interface UserService {
 ----
 
 
-<.> `Optional<UserMemento> currentUser()` Optionally gets the details about the current user, 
+<.> `Optional<xref:system:generated:index/UserMemento.adoc[UserMemento]> currentUser()` Optionally gets the details about the current user, 
 based on whether an  _ExecutionContext_  can be found with the current thread's context.
 
-<.> `UserMemento getUser()` Gets the details about the current user.
+<.> `xref:system:generated:index/UserMemento.adoc[UserMemento] getUser()` Gets the details about the current user.
 
-<.> `UserMemento currentUserElseFail()` Gets the details about the current user.
+<.> `xref:system:generated:index/UserMemento.adoc[UserMemento] currentUserElseFail()` Gets the details about the current user.
 
 <.> `Optional<String> currentUserName()` Optionally gets the the current user's name, 
 based on whether an  _ExecutionContext_  can be found with the current thread's context.
diff --git a/antora/components/system/modules/generated/pages/system-overview.adoc b/antora/components/system/modules/generated/pages/system-overview.adoc
index e90bee3..86abb09 100644
--- a/antora/components/system/modules/generated/pages/system-overview.adoc
+++ b/antora/components/system/modules/generated/pages/system-overview.adoc
@@ -337,9 +337,9 @@ _Dependencies_
 * org.assertj:assertj-core:jar:<managed>
 * org.jmock:jmock:jar:<managed>
 
-_Doclets_
+_Document Index Entries_
 
-xref:system:generated:index/RoleMemento.adoc[RoleMemento] ,  xref:system:generated:index/UserMemento.adoc[UserMemento] ,  xref:system:generated:index/UserService.adoc[UserService]
+xref:system:generated:index/RoleMemento.adoc[RoleMemento], xref:system:generated:index/UserMemento.adoc[UserMemento], xref:system:generated:index/UserService.adoc[UserService]
 
 
 
@@ -1379,12 +1379,12 @@ skinparam {
   maxMessageSize 100
 }
 hide stereotype
-skinparam rectangle<<22>> {
+skinparam rectangle<<11>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<11>> {
+skinparam rectangle<<22>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
@@ -1474,12 +1474,12 @@ skinparam rectangle<<20>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<10>> {
+skinparam rectangle<<21>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<21>> {
+skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
   BorderColor #2E6295
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclet.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Adoclet.java
similarity index 88%
rename from tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclet.java
rename to tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Adoclet.java
index fc1b577..d032859 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclet.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Adoclet.java
@@ -39,19 +39,19 @@ import lombok.extern.log4j.Log4j2;
 
 @Value
 @Log4j2
-public class Doclet {
+public class Adoclet {
 
     private final ClassOrInterfaceDeclaration td;
 
-    public static Stream<Doclet> parse(final @NonNull File sourceFile) {
+    public static Stream<Adoclet> parse(final @NonNull File sourceFile) {
 
         try {
             val cu = StaticJavaParser.parse(sourceFile);
 
             return Stream.of(cu)
             .flatMap(CompilationUnits::streamPublicTypeDeclarations)
-            .filter(Doclets::hasIndexDirective)
-            .map(Doclet::new);
+            .filter(Adoclets::hasIndexDirective)
+            .map(Adoclet::new);
 
         } catch (Exception e) {
             log.error("failed to parse java source file {}", sourceFile, e);
@@ -65,13 +65,13 @@ public class Doclet {
     }
 
     public String getAsciiDocXref(
-            final @NonNull DocletContext docletContext) {
+            final @NonNull AdocletContext docletContext) {
         val toAdocConverter = ToAsciiDoc.of(docletContext);
         return toAdocConverter.xref(this);
     }
     
     public String toAsciiDoc(
-            final @NonNull DocletContext docletContext) {
+            final @NonNull AdocletContext docletContext) {
         
         val doc = AsciiDocFactory.doc();
         
@@ -102,7 +102,7 @@ public class Doclet {
         mds.forEach(md->{
 
             java.append(String.format("\n  %s // <.>\n", 
-                    Doclets.toNormalizedMethodDeclaration(md)));
+                    Adoclets.toNormalizedMethodDeclaration(md)));
             
         });
 
@@ -119,11 +119,9 @@ public class Doclet {
             
             md.getJavadoc()
             .ifPresent(javadoc->{
-            
-                footNotes.append(String.format("\n<.> `%s` %s\n",
-                        Doclets.toNormalizedMethodDeclaration(md),
+                footNotes.append(String.format("\n<.> %s %s\n",
+                        toAdocConverter.methodDeclaration(md),
                         toAdocConverter.javadoc(javadoc)));
-                
             });
             
         });
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/DocletContext.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/AdocletContext.java
similarity index 64%
rename from tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/DocletContext.java
rename to tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/AdocletContext.java
index 8986336..18090ea 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/DocletContext.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/AdocletContext.java
@@ -19,8 +19,10 @@
 package org.apache.isis.tooling.cli.doclet;
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Map;
 import java.util.Optional;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.isis.commons.internal.collections._Maps;
@@ -32,14 +34,14 @@ import lombok.Value;
 import lombok.val;
 
 @Value @Builder
-public class DocletContext {
+public class AdocletContext {
 
     private final @NonNull String xrefPageIdFormat;
     
-    private final Map<String, Doclet> docletIndex = _Maps.newTreeMap();
+    private final Map<String, Adoclet> adocletIndex = _Maps.newTreeMap();
 
-    public DocletContext add(final @NonNull Doclet doclet) {
-        val previousKey = docletIndex.put(doclet.getName(), doclet);
+    public AdocletContext add(final @NonNull Adoclet adoclet) {
+        val previousKey = adocletIndex.put(adoclet.getName(), adoclet);
         if(previousKey!=null) {
             throw _Exceptions.unrecoverableFormatted(
                     "doclet index entries must be unique (index key collision on %s)", 
@@ -48,17 +50,21 @@ public class DocletContext {
         return this;
     }
     
-    public Stream<Doclet> add(final @NonNull File sourceFile) {
-        return Doclet.parse(sourceFile)
-                .peek(this::add);
+    public Stream<Adoclet> add(final @NonNull File sourceFile) {
+        return Adoclet.parse(sourceFile)
+        .peek(this::add)
+        // ensure the stream is consumed here, 
+        // current implementation does not expect more than 1 result per source file
+        .collect(Collectors.toCollection(()->new ArrayList<>(1))) 
+        .stream();
     }
     
-    public Stream<Doclet> streamDoclets() {
-        return docletIndex.values().stream();
+    public Stream<Adoclet> streamAdoclets() {
+        return adocletIndex.values().stream();
     }
 
-    public Optional<Doclet> getDoclet(String key) {
-        return Optional.ofNullable(docletIndex.get(key));
+    public Optional<Adoclet> getAdoclet(String key) {
+        return Optional.ofNullable(adocletIndex.get(key));
     }
     
 }
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclets.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Adoclets.java
similarity index 98%
rename from tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclets.java
rename to tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Adoclets.java
index 15c0030..40a4183 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Doclets.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/doclet/Adoclets.java
@@ -26,7 +26,7 @@ import org.apache.isis.tooling.javamodel.Javadocs;
 import lombok.NonNull;
 import lombok.val;
 
-final class Doclets {
+final class Adoclets {
 
     /**
      * Whether to include given {@link TypeDeclaration} with the index.
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 e020386..3b1067c 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
@@ -18,6 +18,12 @@
  */
 package org.apache.isis.tooling.cli.doclet;
 
+import java.util.stream.Collectors;
+
+import com.github.javaparser.ast.body.MethodDeclaration;
+import com.github.javaparser.ast.body.Parameter;
+import com.github.javaparser.ast.type.ClassOrInterfaceType;
+import com.github.javaparser.ast.type.Type;
 import com.github.javaparser.javadoc.Javadoc;
 import com.github.javaparser.javadoc.description.JavadocInlineTag;
 import com.github.javaparser.javadoc.description.JavadocSnippet;
@@ -29,11 +35,52 @@ import lombok.val;
 @Value(staticConstructor = "of")
 class ToAsciiDoc {
 
-    private final DocletContext docletContext;
+    private final AdocletContext docletContext;
 
+    public String methodDeclaration(final @NonNull MethodDeclaration md) {
+        return String.format("`%s %s(%s)`", 
+                type(md.getType()),
+                md.getNameAsString(), 
+                md.getParameters()
+                .stream()
+                .map(this::parameterDeclaration)
+                .collect(Collectors.joining(", ")));
+    }
+    
+    public String type(final @NonNull Type type) {
+        if(type instanceof ClassOrInterfaceType) {
+            return classOrInterfaceType((ClassOrInterfaceType) type);
+        }
+        return type.asString();
+    }
+    
+    public String classOrInterfaceType(final @NonNull ClassOrInterfaceType type) {
+        val sb = new StringBuilder();
+        sb.append(xrefIfRequired(type.getNameAsString())); // type simple name, no generics
+        type.getTypeArguments()
+        .ifPresent(typeArgs->{
+            sb
+            .append("<")
+            .append(
+                    typeArgs.stream()
+                    .map(typeArg->type(typeArg))
+                    .collect(Collectors.joining(", "))
+            )
+            .append(">");
+        });
+        
+        return sb.toString();
+    }
+        
+    
+    public String parameterDeclaration(Parameter p) {
+        return String.format("%s %s",
+                type(p.getType()),
+                p.getNameAsString());
+    }
+    
     //TODO method java-doc needs further post processing when spanning multiple paragraphs
-    public String javadoc( 
-            final @NonNull Javadoc javadoc) {
+    public String javadoc(final @NonNull Javadoc javadoc) {
 
         val adoc = new StringBuilder();
 
@@ -53,14 +100,13 @@ class ToAsciiDoc {
         return adoc.toString();
     }
 
-    public String inlineTag(
-            final @NonNull JavadocInlineTag inlineTag) {
+    public String inlineTag(final @NonNull JavadocInlineTag inlineTag) {
 
         val inlineContent = inlineTag.getContent().trim();
 
         switch(inlineTag.getType()) {
         case LINK:
-            val refDoclet = docletContext.getDoclet(inlineContent).orElse(null);
+            val refDoclet = docletContext.getAdoclet(inlineContent).orElse(null);
             if(refDoclet!=null) {
                 return String.format(" %s ", xref(refDoclet));
             }
@@ -69,13 +115,18 @@ class ToAsciiDoc {
         }
     }
     
-    public String xref(
-            final @NonNull Doclet doclet) {
-        return String.format(" xref:%s[%s] ", 
+    public String xref(final @NonNull Adoclet doclet) {
+        return String.format("xref:%s[%s]", 
                 String.format(docletContext.getXrefPageIdFormat(), doclet.getName()), 
                 doclet.getName()); 
     }
 
+    public String xrefIfRequired(final @NonNull String docIndexKey) {
+        return docletContext.getAdoclet(docIndexKey)
+                .map(this::xref)
+                .orElse(docIndexKey);
+    }
+    
     // -- HELPER 
 
     /*
@@ -84,5 +135,6 @@ class ToAsciiDoc {
     private static String normalizeHtmlTags(final @NonNull String s) {
         return s.replace("<p>", "\n").replace("</p>", "");
     }
+    
 
 }
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
index a1833cf..e55d252 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocModel.java
@@ -42,7 +42,7 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.commons.internal.graph._Graph;
 import org.apache.isis.tooling.c4.C4;
 import org.apache.isis.tooling.cli.CliConfig;
-import org.apache.isis.tooling.cli.doclet.DocletContext;
+import org.apache.isis.tooling.cli.doclet.AdocletContext;
 import org.apache.isis.tooling.javamodel.AnalyzerConfigFactory;
 import org.apache.isis.tooling.javamodel.CodeClasses;
 import org.apache.isis.tooling.model4adoc.AsciiDocFactory;
@@ -87,7 +87,7 @@ public class ProjectDocModel {
         modules = new TreeSet<ProjectNode>();
         projTree.depthFirst(modules::add);
 
-        val docletContext = DocletContext.builder()
+        val docletContext = AdocletContext.builder()
                 .xrefPageIdFormat(cliConfig.getDocletXrefPageIdFormat())
                 .build();
         
@@ -179,7 +179,7 @@ public class ProjectDocModel {
             final @NonNull Document doc, 
             final @NonNull String sectionName, 
             final @Nullable String groupIdPattern, 
-            final @NonNull DocletContext docletContext) {
+            final @NonNull AdocletContext docletContext) {
 
         val titleBlock = block(doc);
 
@@ -275,7 +275,7 @@ public class ProjectDocModel {
         sb.append(String.format("%s: %s\n", key, value));
     }
     
-    private String details(ProjectNode module, DocletContext docletContext) {
+    private String details(ProjectNode module, AdocletContext docletContext) {
         val description = module.getDescription().trim();
         val dependencyList = module.getDependencies()
                 .stream()
@@ -291,7 +291,7 @@ public class ProjectDocModel {
                 .collect(Collectors.joining())
                 .trim();
         
-        val docletCompactList = gatherDoclets(module.getProjectDirectory(), docletContext)
+        val indexEntriesCompactList = gatherAdoclets(module.getProjectDirectory(), docletContext)
                 .stream()
                 .collect(Collectors.joining(", "))
                 .trim();
@@ -310,8 +310,8 @@ public class ProjectDocModel {
             sb.append(toAdocSection("Dependencies", dependencyList));
         }
         
-        if(!docletCompactList.isEmpty()) {
-            sb.append(toAdocSection("Doclets", docletCompactList));
+        if(!indexEntriesCompactList.isEmpty()) {
+            sb.append(toAdocSection("Document Index Entries", indexEntriesCompactList));
         }
 
         return sb.toString();
@@ -325,7 +325,7 @@ public class ProjectDocModel {
         return String.format("* %s\n", element);
     }
 
-    private SortedSet<String> gatherDoclets(File projDir, DocletContext docletContext) {
+    private SortedSet<String> gatherAdoclets(File projDir, AdocletContext docletContext) {
         
         val analyzerConfig = AnalyzerConfigFactory.maven(projDir, Language.JAVA).main();
 
diff --git a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java
index ae53253..612a082 100644
--- a/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java
+++ b/tooling/cli/src/main/java/org/apache/isis/tooling/cli/projdoc/ProjectDocWriter.java
@@ -28,7 +28,7 @@ import org.asciidoctor.ast.Document;
 
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.tooling.cli.CliConfig;
-import org.apache.isis.tooling.cli.doclet.DocletContext;
+import org.apache.isis.tooling.cli.doclet.AdocletContext;
 import org.apache.isis.tooling.model4adoc.AsciiDocWriter;
 
 import lombok.NonNull;
@@ -41,7 +41,7 @@ final class ProjectDocWriter {
     static void write(
             final @NonNull CliConfig cliConfig, 
             final @NonNull Document doc, 
-            final @NonNull DocletContext docletContext) {
+            final @NonNull AdocletContext docletContext) {
         
         
         try {
@@ -49,12 +49,12 @@ final class ProjectDocWriter {
             
             if(cliConfig.isDryRun()) {
                 System.out.println(adoc);
-                for(val doclet : docletContext.getDocletIndex().values()) {
+                for(val doclet : docletContext.getAdocletIndex().values()) {
                     System.out.println(doclet.toAsciiDoc(docletContext));
                 }
             } else {
                 writeTo(cliConfig.getOutputFile(), adoc);
-                for(val doclet : docletContext.getDocletIndex().values()) {
+                for(val doclet : docletContext.getAdocletIndex().values()) {
                     val docletFile = new File(cliConfig.getDocletOutputFolder(), doclet.getName() + ".adoc");
                     writeTo(docletFile, doclet.toAsciiDoc(docletContext));
                 }
diff --git a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/DocletTest.java b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/AdocletTest.java
similarity index 80%
rename from tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/DocletTest.java
rename to tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/AdocletTest.java
index de3331b..9352718 100644
--- a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/DocletTest.java
+++ b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/AdocletTest.java
@@ -22,7 +22,7 @@ import java.io.File;
 
 import org.junit.jupiter.api.Test;
 
-import org.apache.isis.tooling.cli.doclet.DocletContext;
+import org.apache.isis.tooling.cli.doclet.AdocletContext;
 import org.apache.isis.tooling.javamodel.AnalyzerConfigFactory;
 
 import lombok.val;
@@ -31,7 +31,7 @@ import guru.nidi.codeassert.config.Language;
 
 import static guru.nidi.codeassert.config.Language.JAVA;
 
-class DocletTest {
+class AdocletTest {
 
     @Test
     void testJavaDocMining() {
@@ -39,22 +39,20 @@ class DocletTest {
         val projDir = new File("./").getAbsoluteFile();
         val analyzerConfig = AnalyzerConfigFactory.mavenTest(projDir, Language.JAVA).main();
 
-        val docletContext = DocletContext.builder()
+        val docletContext = AdocletContext.builder()
                 .xrefPageIdFormat("system:generated:index/%s.adoc")
                 .build();
         
         analyzerConfig.getSources(JAVA)
         .stream()
 //        .filter(source->source.toString().contains("UserService"))
-        .peek(source->System.out.println("parsing source: " + source))
+        //.peek(source->System.out.println("parsing source: " + source))
         .forEach(docletContext::add);
         
-        docletContext.streamDoclets()
+        docletContext.streamAdoclets()
         .forEach(doclet->{
             
-            System.out.println("--------------------------------------------------");
             System.out.println(doclet.toAsciiDoc(docletContext));
-            System.out.println("--------------------------------------------------");
 
         });
     }
diff --git a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/samples/UserMemento.java b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/samples/UserMemento.java
index b208843..070741d 100644
--- a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/samples/UserMemento.java
+++ b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/samples/UserMemento.java
@@ -20,6 +20,10 @@ package org.apache.isis.tooling.cli.test.doclet.samples;
 
 import lombok.Value;
 
+/**
+ * Immutable serializable value holding details about a user and its roles.
+ * @since 2.0 {@index}
+ */
 @Value
 public class UserMemento {
     
diff --git a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/samples/UserService.java b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/samples/UserService.java
index 89cff30..51f5ad9 100644
--- a/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/samples/UserService.java
+++ b/tooling/cli/src/test/java/org/apache/isis/tooling/cli/test/doclet/samples/UserService.java
@@ -50,7 +50,7 @@ public interface UserService {
      * @param arg1 - first argument (non-null)
      * @param arg2 - second argument (non-null)
      */
-    Optional<UserMemento> currentUser(@NonNull String arg1, @NonNull String arg2);
+    Optional<UserMemento> currentUser(@NonNull String arg1, @NonNull Optional<UserMemento> arg2);
     
     /**
      * Gets the details about the current user.