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/12 16:43:32 UTC

[isis] branch master updated: ISIS-2473: switch to JavaSourceWithFootnotesFormat

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 da8b918  ISIS-2473: switch to JavaSourceWithFootnotesFormat
da8b918 is described below

commit da8b9184266cc29bad8cafe4dd9c28c665b4986d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Dec 12 17:43:20 2020 +0100

    ISIS-2473: switch to JavaSourceWithFootnotesFormat
    
    show all public members in java source include, but only generate
    footnotes if java-doc is available
---
 .../isis/tooling/cli/projdoc/ProjectDocModel.java  |   4 +-
 .../apache/isis/tooling/j2adoc/J2AdocContext.java  |   2 +-
 .../org/apache/isis/tooling/j2adoc/J2AdocUnit.java |  17 ++--
 .../tooling/j2adoc/convert/J2AdocConverter.java    |   4 +-
 .../j2adoc/convert/J2AdocConverterDefault.java     |  17 ++--
 .../j2adoc/format/UnitFormatterAbstract.java       |  62 +++++++++---
 .../j2adoc/format/UnitFormatterCompact.java        |  35 +------
 .../UnitFormatterWithSourceAndFootNotes.java       | 109 +++++++++++++--------
 .../isis/tooling/j2adoc/test/J2AdocTest.java       |   7 +-
 .../tooling/javamodel/ast/AnyTypeDeclaration.java  |   7 --
 .../javamodel/ast/ConstructorDeclarations.java     |   6 +-
 .../isis/tooling/javamodel/ast/Javadocs.java       |  75 ++++++++------
 .../tooling/javamodel/ast/MethodDeclarations.java  |   6 +-
 13 files changed, 205 insertions(+), 146 deletions(-)

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 91a0f97..897af4b 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
@@ -87,7 +87,9 @@ public class ProjectDocModel {
         modules = new TreeSet<ProjectNode>();
         projTree.depthFirst(modules::add);
 
-        val j2aContext = J2AdocContext.compactFormat()
+        val j2aContext = J2AdocContext
+                //.compactFormat()
+                .javaSourceWithFootnotesFormat()
                 .licenseHeader(cliConfig.getProjectDoc().getLicenseHeader())
                 .xrefPageIdFormat(cliConfig.getDocumentGlobalIndexXrefPageIdFormat())
                 .build();
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocContext.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocContext.java
index c49af93..dcd22a6 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocContext.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocContext.java
@@ -106,7 +106,7 @@ public class J2AdocContext {
     
     // -- PREDEFINED FORMATS
     
-    public static J2AdocContextBuilder javaSourceWithFootNotesFormat() {
+    public static J2AdocContextBuilder javaSourceWithFootnotesFormat() {
         return J2AdocContext.builder()
                 .converterFactory(J2AdocConverter::createDefault)
                 .formatterFactory(UnitFormatterWithSourceAndFootNotes::new)
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java
index 46dd429..9b86bc9 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AdocUnit.java
@@ -31,7 +31,6 @@ import com.github.javaparser.javadoc.Javadoc;
 
 import org.asciidoctor.ast.Document;
 
-import org.apache.isis.commons.collections.Can;
 import org.apache.isis.tooling.j2adoc.util.AsciiDocIncludeTagFilter;
 import org.apache.isis.tooling.javamodel.ast.AnyTypeDeclaration;
 import org.apache.isis.tooling.javamodel.ast.CompilationUnits;
@@ -91,20 +90,20 @@ public final class J2AdocUnit {
         return atd.getKind().name().toLowerCase();
     }
 
-    public Can<EnumConstantDeclaration> getEnumConstantDeclarations() {
-        return atd.getEnumConstantDeclarations();
+    public Stream<EnumConstantDeclaration> streamEnumConstantDeclarations() {
+        return atd.getEnumConstantDeclarations().stream();
     }
     
-    public Can<FieldDeclaration> getPublicFieldDeclarations() {
-        return atd.getPublicFieldDeclarations();
+    public Stream<FieldDeclaration> streamPublicFieldDeclarations() {
+        return atd.getPublicFieldDeclarations().stream();
     }
     
-    public Can<ConstructorDeclaration> getPublicConstructorDeclarations() {
-        return atd.getPublicConstructorDeclarations();
+    public Stream<ConstructorDeclaration> streamPublicConstructorDeclarations() {
+        return atd.getPublicConstructorDeclarations().stream();
     }
     
-    public Can<MethodDeclaration> getPublicMethodDeclarations() {
-        return atd.getPublicMethodDeclarations();
+    public Stream<MethodDeclaration> streamPublicMethodDeclarations() {
+        return atd.getPublicMethodDeclarations().stream();
     }
     
     @Getter(lazy = true)
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverter.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverter.java
index bd62661..5ef2857 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverter.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverter.java
@@ -24,6 +24,8 @@ import com.github.javaparser.ast.body.FieldDeclaration;
 import com.github.javaparser.ast.body.MethodDeclaration;
 import com.github.javaparser.javadoc.Javadoc;
 
+import org.asciidoctor.ast.Document;
+
 import org.apache.isis.tooling.j2adoc.J2AdocContext;
 import org.apache.isis.tooling.j2adoc.J2AdocUnit;
 
@@ -31,7 +33,7 @@ import lombok.NonNull;
 
 public interface J2AdocConverter {
 
-    String javadoc(Javadoc javadoc);
+    Document javadoc(Javadoc javadoc);
 
     String enumConstantDeclaration(EnumConstantDeclaration ecd);
     
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverterDefault.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverterDefault.java
index b4ed19c..439667a 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverterDefault.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/convert/J2AdocConverterDefault.java
@@ -49,7 +49,6 @@ import org.apache.isis.tooling.javamodel.ast.FieldDeclarations;
 import org.apache.isis.tooling.javamodel.ast.Javadocs;
 import org.apache.isis.tooling.javamodel.ast.MethodDeclarations;
 import org.apache.isis.tooling.model4adoc.AsciiDocFactory;
-import org.apache.isis.tooling.model4adoc.AsciiDocWriter;
 
 import lombok.NonNull;
 import lombok.Value;
@@ -222,25 +221,25 @@ final class J2AdocConverterDefault implements J2AdocConverter {
     }
     
     @Override
-    public String javadoc(final @NonNull Javadoc javadoc) {
+    public Document javadoc(final @NonNull Javadoc javadoc) {
 
-        val adoc = AsciiDocFactory.doc();
+        val doc = AsciiDocFactory.doc();
         
         Javadocs.streamTagContent(javadoc, "deprecated")
         .findFirst()
         .map(javadocDescription->javadocDescription(javadocDescription))
         .ifPresent(deprecatedAdoc->{
             
-            val deprecatedBlock = AsciiDocFactory.block(adoc);
-            deprecatedBlock.setSource("+\n[red]#_deprecated:_#");
+            val deprecatedBlock = AsciiDocFactory.block(doc);
+            deprecatedBlock.setSource("[red]#_deprecated:_#");
             deprecatedBlock.getBlocks().addAll(deprecatedAdoc.getBlocks());
         });
         
         val descriptionAdoc = javadocDescription(javadoc.getDescription());
         
-        adoc.getBlocks().addAll(descriptionAdoc.getBlocks());
-
-        return AsciiDocWriter.toString(adoc);
+        doc.getBlocks().addAll(descriptionAdoc.getBlocks());
+        
+        return doc;
     }
     
     public String inlineTag(final @NonNull JavadocInlineTag inlineTag) {
@@ -298,4 +297,6 @@ final class J2AdocConverterDefault implements J2AdocConverter {
         return adoc;
     }
 
+
+
 }
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java
index 72a420f..5506f00 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterAbstract.java
@@ -27,6 +27,7 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.tooling.j2adoc.J2AdocContext;
 import org.apache.isis.tooling.j2adoc.J2AdocUnit;
 import org.apache.isis.tooling.j2adoc.convert.J2AdocConverter;
+import org.apache.isis.tooling.javamodel.ast.Javadocs;
 import org.apache.isis.tooling.model4adoc.AsciiDocFactory;
 
 import static org.apache.isis.tooling.model4adoc.AsciiDocFactory.block;
@@ -42,6 +43,36 @@ implements UnitFormatter {
     
     private final @NonNull J2AdocContext j2aContext;
     
+    @Override
+    public String getEnumConstantFormat() {
+        return "`%s`";
+    }
+    
+    @Override
+    public String getFieldFormat() {
+        return "`%1$s %2$s`";
+    }
+    
+    @Override
+    public String getConstructorFormat() {
+        return "`%1$s(%2$s)`";
+    }
+    
+    @Override
+    public String getGenericConstructorFormat() {
+        return "`%2$s%1$s(%3$s)`";
+    }
+
+    @Override
+    public String getMethodFormat() {
+        return "`%2$s(%3$s)` : `%1$s`";
+    }
+
+    @Override
+    public String getGenericMethodFormat() {
+        return "`%3$s%1$s(%4$s)` : `%2$s`";
+    }
+    
     protected Optional<String> title(final J2AdocUnit unit) {
         return Optional.of(
                 String.format("%s : _%s_", 
@@ -49,10 +80,11 @@ implements UnitFormatter {
                         unit.getDeclarationKeyword()));
     }
     
-    protected Optional<String> intro(final J2AdocUnit unit) {
-        return unit.getJavadoc()
-                .map(javadoc->getConverter().javadoc(javadoc));    
-        
+    protected void intro(final J2AdocUnit unit, final StructuralNode parent) {
+        unit.getJavadoc()
+        .filter(javadoc->!Javadocs.hasHidden(javadoc))
+        .map(javadoc->getConverter().javadoc(javadoc))
+        .ifPresent(doc->parent.getBlocks().addAll(doc.getBlocks()));
     }
     
     protected Optional<String> javaSource(final J2AdocUnit unit) {
@@ -60,13 +92,15 @@ implements UnitFormatter {
     }
     
     protected abstract StructuralNode getMemberDescriptionContainer(StructuralNode parent);
-    protected abstract void appendMemberDescription(StructuralNode parent, String member, String javadoc);
+    protected abstract void appendMemberDescription(StructuralNode parent, String member, Document javadoc);
     
     protected void memberDescriptions(final J2AdocUnit unit, final StructuralNode parent) {
         
         val ul = getMemberDescriptionContainer(parent);
         
-        unit.getEnumConstantDeclarations().forEach(ecd->{
+        unit.streamEnumConstantDeclarations()
+        .filter(Javadocs::presentAndNotHidden)
+        .forEach(ecd->{
             ecd.getJavadoc()
             .ifPresent(javadoc->{
                 
@@ -76,7 +110,9 @@ implements UnitFormatter {
             });
         });
         
-        unit.getPublicFieldDeclarations().forEach(fd->{
+        unit.streamPublicFieldDeclarations()
+        .filter(Javadocs::presentAndNotHidden)
+        .forEach(fd->{
             
             fd.getJavadoc()
             .ifPresent(javadoc->{
@@ -88,7 +124,9 @@ implements UnitFormatter {
             
         });
         
-        unit.getPublicConstructorDeclarations().forEach(cd->{
+        unit.streamPublicConstructorDeclarations()
+        .filter(Javadocs::presentAndNotHidden)
+        .forEach(cd->{
             
             cd.getJavadoc()
             .ifPresent(javadoc->{
@@ -100,7 +138,9 @@ implements UnitFormatter {
             
         });
         
-        unit.getPublicMethodDeclarations().forEach(md->{
+        unit.streamPublicMethodDeclarations()
+        .filter(Javadocs::presentAndNotHidden)
+        .forEach(md->{
             
             md.getJavadoc()
             .ifPresent(javadoc->{
@@ -113,7 +153,6 @@ implements UnitFormatter {
         });
     }
     
-    
 
     protected Optional<String> outro(final J2AdocUnit unit) {
         return Optional.empty();
@@ -137,8 +176,7 @@ implements UnitFormatter {
 
         // -- intro
         
-        intro(unit)
-        .ifPresent(block(doc)::setSource);
+        intro(unit, doc);
         
         // -- java source
         
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterCompact.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterCompact.java
index af2291f..e754583 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterCompact.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterCompact.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.tooling.j2adoc.format;
 
+import org.asciidoctor.ast.Document;
 import org.asciidoctor.ast.List;
 import org.asciidoctor.ast.StructuralNode;
 
@@ -34,47 +35,17 @@ extends UnitFormatterAbstract {
     }
 
     @Override
-    public String getEnumConstantFormat() {
-        return "`%s`";
-    }
-    
-    @Override
-    public String getFieldFormat() {
-        return "`%1$s %2$s`";
-    }
-    
-    @Override
-    public String getConstructorFormat() {
-        return "`%1$s(%2$s)`";
-    }
-    
-    @Override
-    public String getGenericConstructorFormat() {
-        return "`%2$s%1$s(%3$s)`";
-    }
-
-    @Override
-    public String getMethodFormat() {
-        return "`%2$s(%3$s)` : `%1$s`";
-    }
-
-    @Override
-    public String getGenericMethodFormat() {
-        return "`%3$s%1$s(%4$s)` : `%2$s`";
-    }
-
-    @Override
     protected StructuralNode getMemberDescriptionContainer(StructuralNode parent) {
         val ul = AsciiDocFactory.list(parent);
         return ul;
     }
 
     @Override
-    protected void appendMemberDescription(StructuralNode ul, String member, String javadoc) {
+    protected void appendMemberDescription(StructuralNode ul, String member, Document javadoc) {
         val li = AsciiDocFactory.listItem((List) ul, member);
         val openBlock = AsciiDocFactory.openBlock(li);
         val javaDocBlock = AsciiDocFactory.block(openBlock);
-        javaDocBlock.setSource(javadoc);
+        javaDocBlock.getBlocks().addAll(javadoc.getBlocks());
     }
 
 }
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterWithSourceAndFootNotes.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterWithSourceAndFootNotes.java
index 050a5b1..d9a799e 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterWithSourceAndFootNotes.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/format/UnitFormatterWithSourceAndFootNotes.java
@@ -20,6 +20,7 @@ package org.apache.isis.tooling.j2adoc.format;
 
 import java.util.Optional;
 
+import org.asciidoctor.ast.Document;
 import org.asciidoctor.ast.List;
 import org.asciidoctor.ast.StructuralNode;
 
@@ -28,6 +29,7 @@ import org.apache.isis.tooling.j2adoc.J2AdocUnit;
 import org.apache.isis.tooling.javamodel.ast.ConstructorDeclarations;
 import org.apache.isis.tooling.javamodel.ast.EnumConstantDeclarations;
 import org.apache.isis.tooling.javamodel.ast.FieldDeclarations;
+import org.apache.isis.tooling.javamodel.ast.Javadocs;
 import org.apache.isis.tooling.javamodel.ast.MethodDeclarations;
 import org.apache.isis.tooling.model4adoc.AsciiDocFactory;
 
@@ -48,28 +50,46 @@ extends UnitFormatterAbstract {
                 unit.getDeclarationKeyword(), 
                 unit.getSimpleName()));
         
-        unit.getEnumConstantDeclarations().forEach(ecd->{
-            java.append(String.format("\n  %s // <.>\n", 
+        unit.streamEnumConstantDeclarations()
+        .filter(Javadocs::notExplicitlyHidden)
+        .forEach(ecd->{
+            
+            val memberFormat = memberSourceFormat(ecd.getJavadoc().isPresent());
+            
+            java.append(String.format(memberFormat, 
                     EnumConstantDeclarations.toNormalizedEnumConstantDeclaration(ecd)));
+            
         });
         
-        unit.getPublicFieldDeclarations().forEach(fd->{
+        unit.streamPublicFieldDeclarations()
+        .filter(Javadocs::notExplicitlyHidden)
+        .forEach(fd->{
+            
+            val memberFormat = memberSourceFormat(fd.getJavadoc().isPresent());
             
-            java.append(String.format("\n  %s // <.>\n", 
+            java.append(String.format(memberFormat, 
                     FieldDeclarations.toNormalizedFieldDeclaration(fd)));
             
         });
         
-        unit.getPublicConstructorDeclarations().forEach(cd->{
+        unit.streamPublicConstructorDeclarations()
+        .filter(Javadocs::notExplicitlyHidden)
+        .forEach(cd->{
             
-            java.append(String.format("\n  %s // <.>\n", 
+            val memberFormat = memberSourceFormat(cd.getJavadoc().isPresent());
+            
+            java.append(String.format(memberFormat, 
                     ConstructorDeclarations.toNormalizedConstructorDeclaration(cd)));
             
         });
         
-        unit.getPublicMethodDeclarations().forEach(md->{
+        unit.streamPublicMethodDeclarations()
+        .filter(Javadocs::notExplicitlyHidden)
+        .forEach(md->{
+            
+            val memberFormat = memberSourceFormat(md.getJavadoc().isPresent());
 
-            java.append(String.format("\n  %s // <.>\n", 
+            java.append(String.format(memberFormat, 
                     MethodDeclarations.toNormalizedMethodDeclaration(md)));
             
         });
@@ -78,39 +98,39 @@ extends UnitFormatterAbstract {
         
         
         return Optional.of(
-                AsciiDocFactory.SourceFactory.java(java.toString(), unit.getName()));
+                AsciiDocFactory.SourceFactory.java(java.toString(), "Java Sources"));
             
     }
     
-    @Override
-    public String getEnumConstantFormat() {
-        return "`%s`";
-    }
-
-    @Override
-    public String getFieldFormat() {
-        return "`%s %s`";
-    }
-    
-    @Override
-    public String getConstructorFormat() {
-        return "`%s(%s)`";
-    }
-
-    @Override
-    public String getGenericConstructorFormat() {
-        return "`%s %s(%s)`";
-    }
-
-    @Override
-    public String getMethodFormat() {
-        return "`%s %s(%s)`";
-    }
-
-    @Override
-    public String getGenericMethodFormat() {
-        return "`%s %s %s(%s)`";
-    }
+//    @Override
+//    public String getEnumConstantFormat() {
+//        return "`%s`";
+//    }
+//
+//    @Override
+//    public String getFieldFormat() {
+//        return "`%s %s`";
+//    }
+//    
+//    @Override
+//    public String getConstructorFormat() {
+//        return "`%s(%s)`";
+//    }
+//
+//    @Override
+//    public String getGenericConstructorFormat() {
+//        return "`%s %s(%s)`";
+//    }
+//
+//    @Override
+//    public String getMethodFormat() {
+//        return "`%s %s(%s)`";
+//    }
+//
+//    @Override
+//    public String getGenericMethodFormat() {
+//        return "`%s %s %s(%s)`";
+//    }
 
     @Override
     protected StructuralNode getMemberDescriptionContainer(StructuralNode parent) {
@@ -119,12 +139,21 @@ extends UnitFormatterAbstract {
     }
 
     @Override
-    protected void appendMemberDescription(StructuralNode ul, String member, String javadoc) {
+    protected void appendMemberDescription(StructuralNode ul, String member, Document javadoc) {
         val li = AsciiDocFactory.listItem((List) ul, member);
         li.getRoles().add("footnote");
         val openBlock = AsciiDocFactory.openBlock(li);
         val javaDocBlock = AsciiDocFactory.block(openBlock);
-        javaDocBlock.setSource(javadoc);
+        javaDocBlock.getBlocks().addAll(javadoc.getBlocks());
+    }
+    
+    // -- HELPER
+    
+    private String memberSourceFormat(boolean addFootnote) {
+        return addFootnote
+                ? "\n  %s // <.>\n"
+                : "\n  %s\n";
     }
+    
 
 }
diff --git a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
index b673a6f..e206ab2 100644
--- a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
+++ b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2AdocTest.java
@@ -51,14 +51,15 @@ class J2AdocTest {
                 .main();
 
         val j2aContext = J2AdocContext
-                //.javaSourceWithFootNotesFormat()
-                .compactFormat()
+                .javaSourceWithFootnotesFormat()
+                //.compactFormat()
                 .xrefPageIdFormat("system:generated:index/%s.adoc")
                 .build();
         
         analyzerConfig.getSources(JAVA)
         .stream()
-        .filter(source->source.toString().contains("ExecutionMode"))
+        //.filter(source->source.toString().contains("ExecutionMode"))
+        .filter(source->source.toString().contains("FactoryService"))
         //.peek(source->System.out.println("parsing source: " + source))
         .forEach(j2aContext::add);
         
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/AnyTypeDeclaration.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/AnyTypeDeclaration.java
index bae1f87..417ee15 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/AnyTypeDeclaration.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/AnyTypeDeclaration.java
@@ -96,13 +96,10 @@ public final class AnyTypeDeclaration {
                 null,
                 Can.empty(),
                 ClassOrInterfaceDeclarations.streamPublicFieldDeclarations(classOrInterfaceDeclaration)
-                    .filter(Javadocs::presentAndNotHidden)
                     .collect(Can.toCan()),
                 ClassOrInterfaceDeclarations.streamPublicConstructorDeclarations(classOrInterfaceDeclaration)
-                    .filter(Javadocs::presentAndNotHidden)
                     .collect(Can.toCan()),
                 ClassOrInterfaceDeclarations.streamPublicMethodDeclarations(classOrInterfaceDeclaration)
-                    .filter(Javadocs::presentAndNotHidden)
                     .collect(Can.toCan())
                 );
     }
@@ -116,16 +113,12 @@ public final class AnyTypeDeclaration {
                 null,
                 enumDeclaration,
                 EnumDeclarations.streamEnumConstantDeclarations(enumDeclaration)
-                    .filter(Javadocs::presentAndNotHidden)
                     .collect(Can.toCan()),
                 EnumDeclarations.streamPublicFieldDeclarations(enumDeclaration)
-                    .filter(Javadocs::presentAndNotHidden)
                     .collect(Can.toCan()),
                 EnumDeclarations.streamPublicConstructorDeclarations(enumDeclaration)
-                    .filter(Javadocs::presentAndNotHidden)
                     .collect(Can.toCan()),
                 EnumDeclarations.streamPublicMethodDeclarations(enumDeclaration)
-                    .filter(Javadocs::presentAndNotHidden)
                     .collect(Can.toCan())
                 );
     }
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ConstructorDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ConstructorDeclarations.java
index eb26860..703175e 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ConstructorDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/ConstructorDeclarations.java
@@ -26,6 +26,7 @@ import com.github.javaparser.ast.type.TypeParameter;
 import org.apache.isis.commons.collections.Can;
 
 import lombok.NonNull;
+import lombok.val;
 
 //TODO effective public might require more context
 public final class ConstructorDeclarations {
@@ -34,7 +35,10 @@ public final class ConstructorDeclarations {
      * Returns given {@link ConstructorDeclaration} as normal text, without formatting.
      */
     public static String toNormalizedConstructorDeclaration(final @NonNull ConstructorDeclaration cd) {
-        return cd.getDeclarationAsString(false, false, true).trim();
+        val clone = cd.clone();
+        clone.getParameters()
+        .forEach(p->p.getAnnotations().clear());
+        return clone.getDeclarationAsString(false, false, true);
     }
     
     public static Can<TypeParameter> getTypeParameters(final @NonNull ConstructorDeclaration cd) {
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/Javadocs.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/Javadocs.java
index d9015ee..9057f99 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/Javadocs.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/Javadocs.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.tooling.javamodel.ast;
 
+import java.util.Optional;
 import java.util.stream.Stream;
 
 import com.github.javaparser.ast.body.ConstructorDeclaration;
@@ -48,53 +49,67 @@ public final class Javadocs {
         .map(tag->tag.getContent());
     }
     
-    public static boolean presentAndNotHidden(
-            final @NonNull FieldDeclaration fd) {
-        
-        return fd.getJavadoc()
-        .map(jd->!hasHidden(jd))
-        .orElse(false);
+    // -- PREDICATES FOR STREAMS (PRESENT AND NOT HIDDEN)
+    
+    public static boolean presentAndNotHidden(final @NonNull FieldDeclaration fd) {
+        return presentAndNotHidden(fd.getJavadoc());
     }
     
-    public static boolean presentAndNotHidden(
-            final @NonNull EnumConstantDeclaration ecd) {
-        
-        return ecd.getJavadoc()
-        .map(jd->!hasHidden(jd))
-        .orElse(false);
+    public static boolean presentAndNotHidden(final @NonNull EnumConstantDeclaration ecd) {
+        return presentAndNotHidden(ecd.getJavadoc());
     }
     
+    public static boolean presentAndNotHidden(final @NonNull ConstructorDeclaration cd) {
+        return presentAndNotHidden(cd.getJavadoc());
+    }
     
-    public static boolean presentAndNotHidden(
-            final @NonNull ConstructorDeclaration cd) {
-        
-        return cd.getJavadoc()
-        .map(jd->!hasHidden(jd))
-        .orElse(false);
+    public static boolean presentAndNotHidden(final @NonNull MethodDeclaration md) {
+        return presentAndNotHidden(md.getJavadoc());
     }
     
-    public static boolean presentAndNotHidden(
-            final @NonNull MethodDeclaration md) {
-        
-        return md.getJavadoc()
-        .map(jd->!hasHidden(jd))
-        .orElse(false);
+    // -- PREDICATES FOR STREAMS (NOT EXPLICITLY HIDDEN)
+    
+    public static boolean notExplicitlyHidden(final @NonNull FieldDeclaration fd) {
+        return !hasHidden(fd.getJavadoc());
     }
     
-    public static boolean hasDeprecated(
-            final @NonNull Javadoc javadoc) {
-        
+    public static boolean notExplicitlyHidden(final @NonNull EnumConstantDeclaration ecd) {
+        return !hasHidden(ecd.getJavadoc());
+    }
+    
+    public static boolean notExplicitlyHidden(final @NonNull ConstructorDeclaration cd) {
+        return !hasHidden(cd.getJavadoc());
+    }
+    
+    public static boolean notExplicitlyHidden(final @NonNull MethodDeclaration md) {
+        return !hasHidden(md.getJavadoc());
+    }
+    
+    // -- 
+    
+    public static boolean hasDeprecated(final @NonNull Javadoc javadoc) {
         return streamTagsByName(javadoc, "deprecated") 
         .findAny()
         .isPresent();
     }
     
-    public static boolean hasHidden(
-            final @NonNull Javadoc javadoc) {
-        
+    public static boolean hasHidden(final @NonNull Javadoc javadoc) {
         return streamTagsByName(javadoc, "hidden") 
         .findAny()
         .isPresent();
     }
     
+    public static boolean hasHidden(final @NonNull Optional<Javadoc> javadocOptional) {
+        return javadocOptional
+        .map(Javadocs::hasHidden)
+        .orElse(false);
+    }
+    
+    public static boolean presentAndNotHidden(final @NonNull Optional<Javadoc> javadocOptional) {
+        return javadocOptional
+        .map(jd->!hasHidden(jd))
+        .orElse(false);
+    }
+    
+    
 }
diff --git a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/MethodDeclarations.java b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/MethodDeclarations.java
index aad65f1..8cbab22 100644
--- a/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/MethodDeclarations.java
+++ b/tooling/javamodel/src/main/java/org/apache/isis/tooling/javamodel/ast/MethodDeclarations.java
@@ -26,6 +26,7 @@ import com.github.javaparser.ast.type.TypeParameter;
 import org.apache.isis.commons.collections.Can;
 
 import lombok.NonNull;
+import lombok.val;
 
 //TODO effective public might require more context
 public final class MethodDeclarations {
@@ -35,7 +36,10 @@ public final class MethodDeclarations {
      * Returns given {@link MethodDeclaration} as normal text, without formatting.
      */
     public static String toNormalizedMethodDeclaration(final @NonNull MethodDeclaration md) {
-        return md.getDeclarationAsString(false, false, true).trim();
+        val clone = md.clone();
+        clone.getParameters()
+        .forEach(p->p.getAnnotations().clear());
+        return clone.getDeclarationAsString(false, false, true);
     }
     
     public static Can<TypeParameter> getTypeParameters(final @NonNull MethodDeclaration md) {