You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2025/08/10 13:08:27 UTC
(maven-dependency-plugin) branch master updated: Fix [MDEP-931] Replace PrintWriter with Writer in AbstractSerializing Visitor and subclasses (#530)
This is an automated email from the ASF dual-hosted git repository.
sjaranowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new bed92902 Fix [MDEP-931] Replace PrintWriter with Writer in AbstractSerializing Visitor and subclasses (#530)
bed92902 is described below
commit bed92902d2f51f1931ec44d4357e1f56e90da700
Author: Noah Tayebwa <nd...@gmail.com>
AuthorDate: Sun Aug 10 16:08:23 2025 +0300
Fix [MDEP-931] Replace PrintWriter with Writer in AbstractSerializing Visitor and subclasses (#530)
---
.../verify.bsh | 4 +-
.../dependency/analyze/AnalyzeDuplicateMojo.java | 4 +-
.../tree/AbstractSerializingVisitor.java | 9 +---
.../dependency/tree/DOTDependencyNodeVisitor.java | 32 +++++++++----
.../tree/GraphmlDependencyNodeVisitor.java | 53 ++++++++++++++--------
.../dependency/tree/JsonDependencyNodeVisitor.java | 32 ++++++++-----
.../dependency/tree/TGFDependencyNodeVisitor.java | 45 +++++++++++-------
.../plugins/dependency/tree/TestTreeMojo.java | 2 +-
8 files changed, 112 insertions(+), 69 deletions(-)
diff --git a/src/it/projects/mdep-779-analyze-only-verbose-shows-class-names/verify.bsh b/src/it/projects/mdep-779-analyze-only-verbose-shows-class-names/verify.bsh
index 97e83753..7632bd75 100644
--- a/src/it/projects/mdep-779-analyze-only-verbose-shows-class-names/verify.bsh
+++ b/src/it/projects/mdep-779-analyze-only-verbose-shows-class-names/verify.bsh
@@ -6,9 +6,9 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
diff --git a/src/main/java/org/apache/maven/plugins/dependency/analyze/AnalyzeDuplicateMojo.java b/src/main/java/org/apache/maven/plugins/dependency/analyze/AnalyzeDuplicateMojo.java
index 9ad7de2c..1d59ff8d 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/analyze/AnalyzeDuplicateMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/analyze/AnalyzeDuplicateMojo.java
@@ -122,7 +122,7 @@ public class AnalyzeDuplicateMojo extends AbstractMojo {
Set<String> duplicateDependencies, StringBuilder sb, String messageDuplicateDepInDependencies) {
if (!duplicateDependencies.isEmpty()) {
if (sb.length() > 0) {
- sb.append("\n");
+ sb.append(System.lineSeparator());
}
sb.append(messageDuplicateDepInDependencies);
for (Iterator<String> it = duplicateDependencies.iterator(); it.hasNext(); ) {
@@ -130,7 +130,7 @@ public class AnalyzeDuplicateMojo extends AbstractMojo {
sb.append("\to ").append(dup);
if (it.hasNext()) {
- sb.append("\n");
+ sb.append(System.lineSeparator());
}
}
}
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 8f8f40ed..32ec0883 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 238a62ae..5cc8f86c 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,8 @@
*/
package org.apache.maven.plugins.dependency.tree;
+import java.io.IOException;
+import java.io.UncheckedIOException;
import java.io.Writer;
import java.util.List;
@@ -47,16 +49,23 @@ public class DOTDependencyNodeVisitor extends AbstractSerializingVisitor impleme
*/
@Override
public boolean visit(DependencyNode node) {
- if (node.getParent() == null || node.getParent() == node) {
- writer.write("digraph \"" + node.toNodeString() + "\" { " + System.lineSeparator());
- }
+ try {
+ if (node.getParent() == null || node.getParent() == node) {
+ writer.write("digraph \"" + node.toNodeString() + "\" { " + System.lineSeparator());
+ writer.flush();
+ }
- // Generate "currentNode -> Child" lines
+ // Generate "currentNode -> Child" lines
- List<DependencyNode> children = node.getChildren();
+ List<DependencyNode> children = node.getChildren();
- for (DependencyNode child : children) {
- writer.println("\t\"" + node.toNodeString() + "\" -> \"" + child.toNodeString() + "\" ; ");
+ for (DependencyNode child : children) {
+ writer.write("\t\"" + node.toNodeString() + "\" -> \"" + child.toNodeString() + "\" ; "
+ + System.lineSeparator());
+ }
+ writer.flush();
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to write DOT format output", e);
}
return true;
@@ -67,8 +76,13 @@ public class DOTDependencyNodeVisitor extends AbstractSerializingVisitor impleme
*/
@Override
public boolean endVisit(DependencyNode node) {
- if (node.getParent() == null || node.getParent() == node) {
- writer.write(" } ");
+ try {
+ if (node.getParent() == null || node.getParent() == node) {
+ writer.write(" } " + System.lineSeparator());
+ writer.flush();
+ }
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to write DOT format 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 77c55c41..c6c600fa 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,8 @@
*/
package org.apache.maven.plugins.dependency.tree;
+import java.io.IOException;
+import java.io.UncheckedIOException;
import java.io.Writer;
import org.apache.maven.shared.dependency.graph.DependencyNode;
@@ -64,19 +66,24 @@ public class GraphmlDependencyNodeVisitor extends AbstractSerializingVisitor imp
*/
@Override
public boolean endVisit(DependencyNode node) {
- if (node.getParent() == null || node.getParent() == node) {
- writer.write(GRAPHML_FOOTER);
- } else {
- DependencyNode p = node.getParent();
- writer.print("<edge source=\"" + generateId(p) + "\" target=\"" + generateId(node) + "\">");
- if (node.getArtifact().getScope() != null) {
- // add Edge label
- writer.print("<data key=\"d1\"><y:PolyLineEdge><y:EdgeLabel>"
- + node.getArtifact().getScope() + "</y:EdgeLabel></y:PolyLineEdge></data>");
+ try {
+ if (node.getParent() == null || node.getParent() == node) {
+ writer.write(GRAPHML_FOOTER);
+ } else {
+ DependencyNode p = node.getParent();
+ writer.write("<edge source=\"" + generateId(p) + "\" target=\"" + generateId(node) + "\">");
+ if (node.getArtifact().getScope() != null) {
+ // add Edge label
+ writer.write("<data key=\"d1\"><y:PolyLineEdge><y:EdgeLabel>"
+ + node.getArtifact().getScope() + "</y:EdgeLabel></y:PolyLineEdge></data>");
+ }
+ writer.write("</edge>" + System.lineSeparator());
}
- writer.println("</edge>");
+ writer.flush();
+ return true;
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to write GraphML format output", e);
}
- return true;
}
/**
@@ -84,16 +91,22 @@ public class GraphmlDependencyNodeVisitor extends AbstractSerializingVisitor imp
*/
@Override
public boolean visit(DependencyNode node) {
- if (node.getParent() == null || node.getParent() == node) {
- writer.write(GRAPHML_HEADER);
+ try {
+ if (node.getParent() == null || node.getParent() == node) {
+ writer.write(GRAPHML_HEADER);
+ writer.flush();
+ }
+ // write node
+ writer.write("<node id=\"" + generateId(node) + "\">");
+ // add node label
+ writer.write("<data key=\"d0\"><y:ShapeNode><y:NodeLabel>" + node.toNodeString()
+ + "</y:NodeLabel></y:ShapeNode></data>");
+ writer.write("</node>" + System.lineSeparator());
+ writer.flush();
+ return true;
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to write GraphML format output", e);
}
- // write node
- writer.print("<node id=\"" + generateId(node) + "\">");
- // add node label
- writer.print("<data key=\"d0\"><y:ShapeNode><y:NodeLabel>" + node.toNodeString()
- + "</y:NodeLabel></y:ShapeNode></data>");
- writer.println("</node>");
- 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 33392821..5faefbf1 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;
@@ -44,25 +46,31 @@ public class JsonDependencyNodeVisitor extends AbstractSerializingVisitor implem
@Override
public boolean visit(DependencyNode node) {
- if (node.getParent() == null || node.getParent() == node) {
- writeRootNode(node);
+ try {
+ if (node.getParent() == null || node.getParent() == node) {
+ writeRootNode(node);
+ }
+ return true;
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to write JSON format output", e);
}
- return true;
}
/**
* Writes the node to the writer. This method is recursive and will write all children nodes.
*
* @param node the node to write
+ * @throws IOException if an I/O error occurs while writing
*/
- private void writeRootNode(DependencyNode node) {
+ private void writeRootNode(DependencyNode node) throws IOException {
Set<DependencyNode> visited = new HashSet<>();
int indent = 2;
StringBuilder sb = new StringBuilder();
- sb.append("{").append("\n");
+ sb.append("{").append(System.lineSeparator());
writeNode(indent, node, sb, visited);
- sb.append("}").append("\n");
+ sb.append("}").append(System.lineSeparator());
writer.write(sb.toString());
+ writer.flush();
}
/**
* Appends the node and its children to the string builder.
@@ -91,21 +99,21 @@ public class JsonDependencyNodeVisitor extends AbstractSerializingVisitor implem
* @param sb the string builder to append to
*/
private void writeChildren(int indent, DependencyNode node, StringBuilder sb, Set<DependencyNode> visited) {
- sb.append(indent(indent)).append("\"children\": [").append("\n");
+ sb.append(indent(indent)).append("\"children\": [").append(System.lineSeparator());
indent += 2;
for (int i = 0; i < node.getChildren().size(); i++) {
DependencyNode child = node.getChildren().get(i);
sb.append(indent(indent));
- sb.append("{").append("\n");
+ sb.append("{").append(System.lineSeparator());
writeNode(indent + 2, child, sb, visited);
sb.append(indent(indent)).append("}");
// we skip the comma for the last child
if (i != node.getChildren().size() - 1) {
sb.append(",");
}
- sb.append("\n");
+ sb.append(System.lineSeparator());
}
- sb.append(indent(indent)).append("]").append("\n");
+ sb.append(indent(indent)).append("]").append(System.lineSeparator());
}
@Override
@@ -156,7 +164,7 @@ public class JsonDependencyNodeVisitor extends AbstractSerializingVisitor implem
.append(value)
.append("\"")
.append(",")
- .append("\n");
+ .append(System.lineSeparator());
}
/**
* Appends a key value pair to the string builder without a comma at the end. This is used for the last children of a node.
@@ -180,7 +188,7 @@ public class JsonDependencyNodeVisitor extends AbstractSerializingVisitor implem
.append("\"")
.append(value)
.append("\"")
- .append("\n");
+ .append(System.lineSeparator());
}
/**
diff --git a/src/main/java/org/apache/maven/plugins/dependency/tree/TGFDependencyNodeVisitor.java b/src/main/java/org/apache/maven/plugins/dependency/tree/TGFDependencyNodeVisitor.java
index 48ebfb0e..c2fb62fd 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/tree/TGFDependencyNodeVisitor.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/tree/TGFDependencyNodeVisitor.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.ArrayList;
import java.util.List;
@@ -35,7 +37,7 @@ import org.apache.maven.shared.dependency.graph.traversal.DependencyNodeVisitor;
public class TGFDependencyNodeVisitor extends AbstractSerializingVisitor implements DependencyNodeVisitor {
/**
- * Utiity class to write an Edge.
+ * Utility class to write an Edge.
*
* @author <a href="mailto:jerome.creignou@gmail.com">Jerome Creignou</a>
*/
@@ -102,18 +104,23 @@ public class TGFDependencyNodeVisitor extends AbstractSerializingVisitor impleme
*/
@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());
+ try {
+ if (node.getParent() == null || node.getParent() == node) {
+ // dump edges on last node endVisit
+ writer.write("#" + System.lineSeparator());
+ for (EdgeAppender edge : edges) {
+ writer.write(edge.toString() + System.lineSeparator());
+ }
+ writer.flush();
+ } else {
+ DependencyNode parent = node.getParent();
+ // using scope as edge label.
+ edges.add(new EdgeAppender(parent, node, node.getArtifact().getScope()));
}
- } else {
- DependencyNode p = node.getParent();
- // using scope as edge label.
- edges.add(new EdgeAppender(p, node, node.getArtifact().getScope()));
+ return true;
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to write TGF format output", e);
}
- return true;
}
/**
@@ -121,11 +128,17 @@ public class TGFDependencyNodeVisitor extends AbstractSerializingVisitor impleme
*/
@Override
public boolean visit(DependencyNode node) {
- // write node
- writer.write(generateId(node));
- writer.write(" ");
- writer.println(node.toNodeString());
- return true;
+ try {
+ // Write node
+ writer.write(generateId(node));
+ writer.write(" ");
+ writer.write(node.toNodeString());
+ writer.write(System.lineSeparator());
+ writer.flush();
+ return true;
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to write TGF format output", e);
+ }
}
/**
diff --git a/src/test/java/org/apache/maven/plugins/dependency/tree/TestTreeMojo.java b/src/test/java/org/apache/maven/plugins/dependency/tree/TestTreeMojo.java
index b336afd2..6cfa0ef9 100644
--- a/src/test/java/org/apache/maven/plugins/dependency/tree/TestTreeMojo.java
+++ b/src/test/java/org/apache/maven/plugins/dependency/tree/TestTreeMojo.java
@@ -190,7 +190,7 @@ public class TestTreeMojo extends AbstractDependencyMojoTestCase {
List<String> contents = runTreeMojo("tree2.json", "json");
System.setProperty("jakarta.json.provider", "org.glassfish.json.JsonProviderImpl");
- try (JsonReader reader = Json.createReader(new StringReader(String.join("\n", contents)))) {
+ try (JsonReader reader = Json.createReader(new StringReader(String.join(System.lineSeparator(), contents)))) {
JsonObject root = reader.readObject();
assertEquals(root.getString("groupId"), "testGroupId");