diff --git a/src/main/java/org/apache/maven/plugins/dependency/tree/AbstractSerializingVisitor.java b/src/main/java/org/apache/maven/plugins/dependency/tree/AbstractSerializingVisitor.java index 8f8f40ed8..32ec08837 100644 --- a/src/main/java/org/apache/maven/plugins/dependency/tree/AbstractSerializingVisitor.java +++ b/src/main/java/org/apache/maven/plugins/dependency/tree/AbstractSerializingVisitor.java @@ -18,7 +18,6 @@ */ package org.apache.maven.plugins.dependency.tree; -import java.io.PrintWriter; import java.io.Writer; /** @@ -31,7 +30,7 @@ public abstract class AbstractSerializingVisitor { /** * The writer to serialize to. */ - protected final PrintWriter writer; + protected final Writer writer; /** * Constructor. @@ -42,10 +41,6 @@ public abstract class AbstractSerializingVisitor { * @param writer the writer to serialize to. */ public AbstractSerializingVisitor(Writer writer) { - if (writer instanceof PrintWriter) { - this.writer = (PrintWriter) writer; - } else { - this.writer = new PrintWriter(writer, true); - } + this.writer = writer; } } diff --git a/src/main/java/org/apache/maven/plugins/dependency/tree/DOTDependencyNodeVisitor.java b/src/main/java/org/apache/maven/plugins/dependency/tree/DOTDependencyNodeVisitor.java index 238a62ae6..9f7602ebe 100644 --- a/src/main/java/org/apache/maven/plugins/dependency/tree/DOTDependencyNodeVisitor.java +++ b/src/main/java/org/apache/maven/plugins/dependency/tree/DOTDependencyNodeVisitor.java @@ -18,6 +18,9 @@ */ package org.apache.maven.plugins.dependency.tree; +import java.io.IOException; +import java.io.StringWriter; +import java.io.UncheckedIOException; import java.io.Writer; import java.util.List; @@ -47,19 +50,26 @@ public DOTDependencyNodeVisitor(Writer writer) { */ @Override public boolean visit(DependencyNode node) { - if (node.getParent() == null || node.getParent() == node) { - writer.write("digraph \"" + node.toNodeString() + "\" { " + System.lineSeparator()); - } + try { + StringWriter stringWriter = new StringWriter(); + if (node.getParent() == null || node.getParent() == node) { + writer.write("digraph \"" + node.toNodeString() + "\" { " + System.lineSeparator()); + } - // Generate "currentNode -> Child" lines + // Generate "currentNode -> Child" lines - List children = node.getChildren(); + List children = node.getChildren(); + for (DependencyNode child : children) { + stringWriter.write("\t\"" + node.toNodeString() + "\" -> \"" + child.toNodeString() + "\" ;\n"); + } - for (DependencyNode child : children) { - writer.println("\t\"" + node.toNodeString() + "\" -> \"" + child.toNodeString() + "\" ; "); + // Write the accumulated output to the provided writer + writer.write(stringWriter.toString()); + writer.flush(); + return true; + } catch (IOException e) { + throw new UncheckedIOException("Failed to write to DOT output", e); } - - return true; } /** @@ -67,9 +77,18 @@ public boolean visit(DependencyNode node) { */ @Override public boolean endVisit(DependencyNode node) { - if (node.getParent() == null || node.getParent() == node) { - writer.write(" } "); + try { + StringWriter stringWriter = new StringWriter(); + if (node.getParent() == null || node.getParent() == node) { + stringWriter.write("}\n"); + } + + // Write the accumulated output to the provided writer + writer.write(stringWriter.toString()); + writer.flush(); + return true; + } catch (IOException e) { + throw new UncheckedIOException("Failed to write to DOT output", e); } - return true; } } diff --git a/src/main/java/org/apache/maven/plugins/dependency/tree/GraphmlDependencyNodeVisitor.java b/src/main/java/org/apache/maven/plugins/dependency/tree/GraphmlDependencyNodeVisitor.java index 77c55c413..a8efd6ffc 100644 --- a/src/main/java/org/apache/maven/plugins/dependency/tree/GraphmlDependencyNodeVisitor.java +++ b/src/main/java/org/apache/maven/plugins/dependency/tree/GraphmlDependencyNodeVisitor.java @@ -18,6 +18,9 @@ */ package org.apache.maven.plugins.dependency.tree; +import java.io.IOException; +import java.io.StringWriter; +import java.io.UncheckedIOException; import java.io.Writer; import org.apache.maven.shared.dependency.graph.DependencyNode; @@ -63,37 +66,55 @@ public GraphmlDependencyNodeVisitor(Writer writer) { * {@inheritDoc} */ @Override - public boolean endVisit(DependencyNode node) { - if (node.getParent() == null || node.getParent() == node) { - writer.write(GRAPHML_FOOTER); - } else { - DependencyNode p = node.getParent(); - writer.print(""); - if (node.getArtifact().getScope() != null) { - // add Edge label - writer.print("" - + node.getArtifact().getScope() + ""); + public boolean visit(DependencyNode node) { + try { + StringWriter stringWriter = new StringWriter(); + if (node.getParent() == null || node.getParent() == node) { + stringWriter.write(GRAPHML_HEADER); } - writer.println(""); + // write node + stringWriter.write(""); + // add node label + stringWriter.write("" + node.toNodeString() + + ""); + stringWriter.write("\n"); + + // Write the accumulated output to the provided writer + writer.write(stringWriter.toString()); + writer.flush(); + return true; + } catch (IOException e) { + throw new UncheckedIOException("Failed to write GraphML node", e); } - return true; } /** * {@inheritDoc} */ @Override - public boolean visit(DependencyNode node) { - if (node.getParent() == null || node.getParent() == node) { - writer.write(GRAPHML_HEADER); + public boolean endVisit(DependencyNode node) { + try { + StringWriter stringWriter = new StringWriter(); + if (node.getParent() == null || node.getParent() == node) { + stringWriter.write(GRAPHML_FOOTER); + } else { + DependencyNode p = node.getParent(); + stringWriter.write(""); + if (node.getArtifact().getScope() != null) { + // add Edge label + stringWriter.write("" + + node.getArtifact().getScope() + ""); + } + stringWriter.write("\n"); + } + + // Write the accumulated output to the provided writer + writer.write(stringWriter.toString()); + writer.flush(); + return true; + } catch (IOException e) { + throw new UncheckedIOException("Failed to write GraphML edge or footer", e); } - // write node - writer.print(""); - // add node label - writer.print("" + node.toNodeString() - + ""); - writer.println(""); - return true; } /** diff --git a/src/main/java/org/apache/maven/plugins/dependency/tree/JsonDependencyNodeVisitor.java b/src/main/java/org/apache/maven/plugins/dependency/tree/JsonDependencyNodeVisitor.java index 015ce1b2d..8b72adb55 100644 --- a/src/main/java/org/apache/maven/plugins/dependency/tree/JsonDependencyNodeVisitor.java +++ b/src/main/java/org/apache/maven/plugins/dependency/tree/JsonDependencyNodeVisitor.java @@ -18,6 +18,8 @@ */ package org.apache.maven.plugins.dependency.tree; +import java.io.IOException; +import java.io.UncheckedIOException; import java.io.Writer; import java.util.HashSet; import java.util.Set; @@ -56,14 +58,20 @@ public boolean visit(DependencyNode node) { * @param node the node to write */ private void writeRootNode(DependencyNode node) { - Set visited = new HashSet<>(); - int indent = 2; - StringBuilder sb = new StringBuilder(); - sb.append("{").append("\n"); - writeNode(indent, node, sb, visited); - sb.append("}").append("\n"); - writer.write(sb.toString()); + try { + StringBuilder sb = new StringBuilder(); + Set visited = new HashSet<>(); + int indent = 2; + sb.append("{").append("\n"); + writeNode(indent, node, sb, visited); + sb.append("}").append("\n"); + writer.write(sb.toString()); + writer.flush(); + } catch (IOException e) { + throw new UncheckedIOException("Failed to write JSON output", e); + } } + /** * Appends the node and its children to the string builder. * @@ -83,6 +91,7 @@ private void writeNode(int indent, DependencyNode node, StringBuilder sb, SetJerome Creignou */ @@ -101,31 +104,50 @@ public TGFDependencyNodeVisitor(Writer writer) { * {@inheritDoc} */ @Override - public boolean endVisit(DependencyNode node) { - if (node.getParent() == null || node.getParent() == node) { - // dump edges on last node endVisit - writer.println("#"); - for (EdgeAppender edge : edges) { - writer.println(edge.toString()); - } - } else { - DependencyNode p = node.getParent(); - // using scope as edge label. - edges.add(new EdgeAppender(p, node, node.getArtifact().getScope())); + public boolean visit(DependencyNode node) { + try { + StringWriter stringWriter = new StringWriter(); + // write node + stringWriter.write(generateId(node)); + stringWriter.write(" "); + stringWriter.write(node.toNodeString()); + stringWriter.write("\n"); + + // Write the accumulated output to the provided writer + writer.write(stringWriter.toString()); + writer.flush(); + return true; + } catch (IOException e) { + throw new UncheckedIOException("Failed to write TGF node", e); } - return true; } /** * {@inheritDoc} */ @Override - public boolean visit(DependencyNode node) { - // write node - writer.write(generateId(node)); - writer.write(" "); - writer.println(node.toNodeString()); - return true; + public boolean endVisit(DependencyNode node) { + try { + StringWriter stringWriter = new StringWriter(); + if (node.getParent() == null || node.getParent() == node) { + // dump edges on last node endVisit + stringWriter.write("#\n"); + for (EdgeAppender edge : edges) { + stringWriter.write(edge.toString()); + } + + // Write the accumulated output to the provided writer + writer.write(stringWriter.toString()); + writer.flush(); + } else { + DependencyNode parent = node.getParent(); + // using scope as edge label. + edges.add(new EdgeAppender(parent, node, node.getArtifact().getScope())); + } + return true; + } catch (IOException e) { + throw new UncheckedIOException("Failed to write TGF edges or footer", e); + } } /**