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/11 07:24:22 UTC

[isis] branch master updated: ISIS-2473: let J2AUnit#toAsciiDoc return model instead of 'rendered' string

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 3960d35  ISIS-2473: let J2AUnit#toAsciiDoc return model instead of 'rendered' string
3960d35 is described below

commit 3960d352b6cde5754ce9a59f27a22584a0b96fdc
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 11 08:24:08 2020 +0100

    ISIS-2473: let J2AUnit#toAsciiDoc return model instead of 'rendered'
    string
---
 .../isis/tooling/cli/projdoc/ProjectDocModel.java  | 10 ++--
 .../isis/tooling/cli/projdoc/ProjectDocWriter.java | 36 +++++--------
 .../j2adoc/{J2aContext.java => J2AContext.java}    | 24 ++++-----
 .../tooling/j2adoc/{J2aUnit.java => J2AUnit.java}  | 49 +++++++++--------
 .../j2adoc/{J2aUnits.java => J2AUnits.java}        |  2 +-
 .../apache/isis/tooling/j2adoc/JavaToAsciiDoc.java |  4 +-
 .../apache/isis/tooling/j2adoc/test/J2aTest.java   |  6 +--
 .../isis/tooling/model4adoc/AsciiDocWriter.java    | 62 ++++++++++++++++++----
 8 files changed, 116 insertions(+), 77 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 58a6702..4d7d967 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.j2adoc.J2aContext;
+import org.apache.isis.tooling.j2adoc.J2AContext;
 import org.apache.isis.tooling.javamodel.AnalyzerConfigFactory;
 import org.apache.isis.tooling.javamodel.ast.CodeClasses;
 import org.apache.isis.tooling.model4adoc.AsciiDocFactory;
@@ -87,7 +87,7 @@ public class ProjectDocModel {
         modules = new TreeSet<ProjectNode>();
         projTree.depthFirst(modules::add);
 
-        val j2aContext = J2aContext.compactFormat()
+        val j2aContext = J2AContext.compactFormat()
                 .xrefPageIdFormat(cliConfig.getDocumentGlobalIndexXrefPageIdFormat())
                 .build();
         
@@ -179,7 +179,7 @@ public class ProjectDocModel {
             final @NonNull Document doc, 
             final @NonNull String sectionName, 
             final @Nullable String groupIdPattern, 
-            final @NonNull J2aContext j2aContext) {
+            final @NonNull J2AContext j2aContext) {
 
         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, J2aContext j2aContext) {
+    private String details(ProjectNode module, J2AContext j2aContext) {
         val description = module.getDescription().trim();
         val dependencyList = module.getDependencies()
                 .stream()
@@ -325,7 +325,7 @@ public class ProjectDocModel {
         return String.format("* %s\n", element);
     }
 
-    private SortedSet<String> gatherGlobalDocIndexXrefs(File projDir, J2aContext j2aContext) {
+    private SortedSet<String> gatherGlobalDocIndexXrefs(File projDir, J2AContext j2aContext) {
         
         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 a277c17..2819314 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
@@ -19,16 +19,11 @@
 package org.apache.isis.tooling.cli.projdoc;
 
 import java.io.File;
-import java.io.FileOutputStream;
-import java.nio.charset.StandardCharsets;
-
-import javax.annotation.Nullable;
 
 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.j2adoc.J2aContext;
+import org.apache.isis.tooling.j2adoc.J2AContext;
 import org.apache.isis.tooling.model4adoc.AsciiDocWriter;
 
 import lombok.NonNull;
@@ -40,23 +35,25 @@ final class ProjectDocWriter {
     @SneakyThrows
     static void write(
             final @NonNull CliConfig cliConfig, 
-            final @NonNull Document doc, 
-            final @NonNull J2aContext j2aContext) {
-        
+            final @NonNull Document adoc, 
+            final @NonNull J2AContext j2aContext) {
         
         try {
-            val adoc = AsciiDocWriter.toString(doc);
             
             if(cliConfig.isDryRun()) {
-                System.out.println(adoc);
+                AsciiDocWriter.print(adoc);
                 for(val unit : j2aContext.getUnitIndex().values()) {
-                    System.out.println(unit.toAsciiDoc(j2aContext));
+                    AsciiDocWriter.print(unit.toAsciiDoc(j2aContext));
                 }
             } else {
-                writeTo(cliConfig.getOutputFile(), adoc);
+                AsciiDocWriter.writeToFile(adoc, cliConfig.getOutputFile());
                 for(val unit : j2aContext.getUnitIndex().values()) {
-                    val adocFile = new File(cliConfig.getDocumentGlobalIndexOutputFolder(), unit.getName() + ".adoc");
-                    writeTo(adocFile, unit.toAsciiDoc(j2aContext));
+
+                    AsciiDocWriter.writeToFile(
+                            unit.toAsciiDoc(j2aContext), 
+                            new File(
+                                    cliConfig.getDocumentGlobalIndexOutputFolder(), 
+                                    unit.getName() + ".adoc"));
                 }
             }    
             
@@ -67,13 +64,4 @@ final class ProjectDocWriter {
         
     }
     
-    // -- HELPER
-    
-    @SneakyThrows
-    private static void writeTo(@Nullable File file, String adoc) {
-        try(val fos = new FileOutputStream(file)){
-            fos.write(_Strings.toBytes(adoc, StandardCharsets.UTF_8));
-        }
-    }
-
 }
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2aContext.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AContext.java
similarity index 86%
rename from tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2aContext.java
rename to tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AContext.java
index 49a82dc..fd04d1d 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2aContext.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AContext.java
@@ -34,7 +34,7 @@ import lombok.Value;
 import lombok.val;
 
 @Value @Builder
-public class J2aContext {
+public class J2AContext {
 
     private final @NonNull String xrefPageIdFormat;
     
@@ -83,20 +83,20 @@ public class J2aContext {
     @Builder.Default
     private final boolean includeJavaSource = true;
     
-    private final Map<String, J2aUnit> unitIndex = _Maps.newTreeMap();
+    private final Map<String, J2AUnit> unitIndex = _Maps.newTreeMap();
 
-    public J2aContext add(final @NonNull J2aUnit unit) {
+    public J2AContext add(final @NonNull J2AUnit unit) {
         val previousKey = unitIndex.put(unit.getName(), unit);
         if(previousKey!=null) {
             throw _Exceptions.unrecoverableFormatted(
-                    "J2aUnit index entries must be unique (index key collision on %s)", 
+                    "J2AUnit index entries must be unique (index key collision on %s)", 
                     previousKey);
         }
         return this;
     }
     
-    public Stream<J2aUnit> add(final @NonNull File sourceFile) {
-        return J2aUnit.parse(sourceFile)
+    public Stream<J2AUnit> add(final @NonNull File sourceFile) {
+        return J2AUnit.parse(sourceFile)
         .peek(this::add)
         // ensure the stream is consumed here, 
         // current implementation does not expect more than 1 result per source file
@@ -104,22 +104,22 @@ public class J2aContext {
         .stream();
     }
     
-    public Stream<J2aUnit> streamUnits() {
+    public Stream<J2AUnit> streamUnits() {
         return unitIndex.values().stream();
     }
 
-    public Optional<J2aUnit> getUnit(String key) {
+    public Optional<J2AUnit> getUnit(String key) {
         return Optional.ofNullable(unitIndex.get(key));
     }
     
     // -- PREDEFINED FORMATS
     
-    public static J2aContextBuilder javaSourceWithFootNotesFormat() {
-        return J2aContext.builder();
+    public static J2AContextBuilder javaSourceWithFootNotesFormat() {
+        return J2AContext.builder();
     }
     
-    public static J2aContextBuilder compactFormat() {
-        return J2aContext.builder()
+    public static J2AContextBuilder compactFormat() {
+        return J2AContext.builder()
                 .constructorFormat("`%1$s(%2$s)`") // name | param-list)
                 .genericConstructorFormat("`%2$s%1$s(%3$s)`") //  method-generic-type | name | param-list)
                 .methodFormat("`%2$s(%3$s)` : `%1$s`") //  return-type | name | param-list)
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2aUnit.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AUnit.java
similarity index 85%
rename from tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2aUnit.java
rename to tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AUnit.java
index c1fe876..c616024 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2aUnit.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AUnit.java
@@ -24,13 +24,14 @@ import java.util.stream.Stream;
 import com.github.javaparser.StaticJavaParser;
 import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
 
+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.ClassOrInterfaceDeclarations;
 import org.apache.isis.tooling.javamodel.ast.CompilationUnits;
 import org.apache.isis.tooling.javamodel.ast.Javadocs;
 import org.apache.isis.tooling.model4adoc.AsciiDocFactory;
-import org.apache.isis.tooling.model4adoc.AsciiDocWriter;
 
 import lombok.NonNull;
 import lombok.Value;
@@ -39,11 +40,11 @@ import lombok.extern.log4j.Log4j2;
 
 @Value
 @Log4j2
-public class J2aUnit {
+public class J2AUnit {
 
     private final ClassOrInterfaceDeclaration td;
 
-    public static Stream<J2aUnit> parse(final @NonNull File sourceFile) {
+    public static Stream<J2AUnit> parse(final @NonNull File sourceFile) {
 
         if("package-info.java".equals(sourceFile.getName())) {
             // ignore package files
@@ -60,8 +61,8 @@ public class J2aUnit {
             
             return Stream.of(cu)
             .flatMap(CompilationUnits::streamPublicTypeDeclarations)
-            .filter(J2aUnits::hasIndexDirective)
-            .map(J2aUnit::new);
+            .filter(J2AUnits::hasIndexDirective)
+            .map(J2AUnit::new);
 
         } catch (Exception e) {
             log.error("failed to parse java source file {}", sourceFile, e);
@@ -75,13 +76,13 @@ public class J2aUnit {
     }
 
     public String getAsciiDocXref(
-            final @NonNull J2aContext j2aContext) {
+            final @NonNull J2AContext j2aContext) {
         val toAdocConverter = JavaToAsciiDoc.of(j2aContext);
         return toAdocConverter.xref(this);
     }
     
-    public String toAsciiDoc(
-            final @NonNull J2aContext j2aContext) {
+    public Document toAsciiDoc(
+            final @NonNull J2AContext j2aContext) {
         
         val doc = AsciiDocFactory.doc();
         
@@ -99,6 +100,14 @@ public class J2aUnit {
         
         
         val toAdocConverter = JavaToAsciiDoc.of(j2aContext);
+        
+        // -- title
+        
+        val title = String.format("%s : _%s_\n\n", 
+                getName(),
+                getDeclarationKeyword());
+        
+        doc.setTitle(title);
 
         // -- intro
         
@@ -120,14 +129,14 @@ public class J2aUnit {
             cds.forEach(cd->{
                 
                 java.append(String.format("\n  %s // <.>\n", 
-                        J2aUnits.toNormalizedConstructorDeclaration(cd)));
+                        J2AUnits.toNormalizedConstructorDeclaration(cd)));
                 
             });
             
             mds.forEach(md->{
     
                 java.append(String.format("\n  %s // <.>\n", 
-                        J2aUnits.toNormalizedMethodDeclaration(md)));
+                        J2AUnits.toNormalizedMethodDeclaration(md)));
                 
             });
     
@@ -165,17 +174,15 @@ public class J2aUnit {
         
         methodDescriptionBlock.setSource(methodDescriptions.toString());
         
-        try {
-            val title = String.format("%s : _%s_\n\n", 
-                    getName(),
-                    getDeclarationKeyword());
-            
-            doc.setTitle(title);
-            return AsciiDocWriter.toString(doc);
-        } catch (Exception e) {
-            e.printStackTrace();
-            return "ERROR: " + e.getMessage();
-        }
+        return doc;
+        
+//        try {
+//
+//            return AsciiDocWriter.toString(doc);
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return "ERROR: " + e.getMessage();
+//        }
         
     }
 
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2aUnits.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AUnits.java
similarity index 99%
rename from tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2aUnits.java
rename to tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AUnits.java
index 09f1b45..cdcfaa0 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2aUnits.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/J2AUnits.java
@@ -27,7 +27,7 @@ import org.apache.isis.tooling.javamodel.ast.Javadocs;
 import lombok.NonNull;
 import lombok.val;
 
-final class J2aUnits {
+final class J2AUnits {
 
     /**
      * Whether to include given {@link TypeDeclaration} with the index.
diff --git a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/JavaToAsciiDoc.java b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/JavaToAsciiDoc.java
index e9b8513..0893eba 100644
--- a/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/JavaToAsciiDoc.java
+++ b/tooling/java2adoc/src/main/java/org/apache/isis/tooling/j2adoc/JavaToAsciiDoc.java
@@ -51,7 +51,7 @@ import lombok.val;
 @Value(staticConstructor = "of")
 final class JavaToAsciiDoc {
 
-    private final J2aContext j2aContext;
+    private final J2AContext j2aContext;
     
     public String constructorDeclaration(final @NonNull ConstructorDeclaration cd) {
         val isDeprecated = cd.getAnnotations().stream()
@@ -204,7 +204,7 @@ final class JavaToAsciiDoc {
         }
     }
     
-    public String xref(final @NonNull J2aUnit unit) {
+    public String xref(final @NonNull J2AUnit unit) {
         return String.format("xref:%s[%s]", 
                 String.format(j2aContext.getXrefPageIdFormat(), unit.getName()), 
                 unit.getName()); 
diff --git a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2aTest.java b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2aTest.java
index e2c5d29..c448797 100644
--- a/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2aTest.java
+++ b/tooling/java2adoc/src/test/java/org/apache/isis/tooling/j2adoc/test/J2aTest.java
@@ -31,7 +31,7 @@ import org.apache.isis.commons.internal.base._Files;
 import org.apache.isis.commons.internal.base._Text;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.commons.internal.functions._Predicates;
-import org.apache.isis.tooling.j2adoc.J2aContext;
+import org.apache.isis.tooling.j2adoc.J2AContext;
 import org.apache.isis.tooling.j2adoc.util.AsciiDocIncludeTagFilter;
 import org.apache.isis.tooling.javamodel.AnalyzerConfigFactory;
 
@@ -42,7 +42,7 @@ import guru.nidi.codeassert.config.Language;
 
 import static guru.nidi.codeassert.config.Language.JAVA;
 
-class J2aTest {
+class J2ATest {
 
     @Test //@Disabled
     void testJavaDocMining() {
@@ -51,7 +51,7 @@ class J2aTest {
                 .maven(ProjectSampler.apacheIsisApplib(), Language.JAVA)
                 .main();
 
-        val j2aContext = J2aContext
+        val j2aContext = J2AContext
                 //.javaSourceWithFootNotesFormat()
                 .compactFormat()
                 .xrefPageIdFormat("system:generated:index/%s.adoc")
diff --git a/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java
index 8ae4cbe..c0d83ad 100644
--- a/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java
+++ b/tooling/model4adoc/src/main/java/org/apache/isis/tooling/model4adoc/AsciiDocWriter.java
@@ -18,13 +18,20 @@
  */
 package org.apache.isis.tooling.model4adoc;
 
+import java.io.File;
+import java.io.FileWriter;
 import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.nio.charset.StandardCharsets;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import javax.annotation.Nullable;
+
 import org.asciidoctor.Asciidoctor;
 import org.asciidoctor.ast.Block;
 import org.asciidoctor.ast.Document;
@@ -58,7 +65,7 @@ public class AsciiDocWriter {
      * the inverse of {@link Asciidoctor#load(String, java.util.Map)}}
      */
     @SneakyThrows
-    public static String toString(Document doc) {
+    public static String toString(final @Nullable Document doc) {
         if(doc==null) {
             return "";
         }
@@ -67,23 +74,60 @@ public class AsciiDocWriter {
         adocWriter.write(doc, stringWriter);
         return stringWriter.toString();
     }
+    
+    /**
+     * Print to given {@link File}
+     * @param doc
+     * @param file
+     */
+    @SneakyThrows
+    public static void writeToFile(final @Nullable Document doc, final @Nullable File file) {
+        if(doc==null
+                || file==null) {
+            return;
+        }
+        val adocWriter = new AsciiDocWriter();
+        try(val writer = new FileWriter(file, StandardCharsets.UTF_8)) {
+            adocWriter.write(doc, writer);
+        }
+    }
+
+    /**
+     * Print to given {@link PrintStream}
+     * @param doc
+     * @param out
+     */
+    @SneakyThrows
+    public static void print(final @Nullable Document doc, final @Nullable PrintStream out) {
+        if(doc==null
+                || out==null) {
+            return;
+        }
+        val adocWriter = new AsciiDocWriter();
+        adocWriter.write(doc, new PrintWriter(out));
+    }
+    
+    /**
+     * Print to {@link System#out}
+     * @param doc
+     */
+    @SneakyThrows
+    public static void print(final @Nullable Document doc) {
+        print(doc, System.out);
+    }
   
     /**
      * the inverse of {@link Asciidoctor#load(String, java.util.Map)}}
-     * @throws IOException 
      */
-    public void write(Document doc, Writer writer) throws IOException {
-        
-        if(doc==null) {
+    @SneakyThrows
+    public void write(final @Nullable Document doc, final @Nullable Writer writer) throws IOException {
+        if(doc==null
+                || writer==null) {
             return;
         }
-        
         val formatWriter = new FormatWriter(writer);
-        
         formatWriter.ifNonEmpty("= %s\n\n", doc.getTitle());
-        
         writeChildNodes(doc.getBlocks(), formatWriter);
-        
     }
 
     // -- CHILDREN