Skip to content

Commit bed9290

Browse files
Fix [MDEP-931] Replace PrintWriter with Writer in AbstractSerializing Visitor and subclasses (#530)
1 parent 8b94652 commit bed9290

File tree

8 files changed

+112
-69
lines changed

8 files changed

+112
-69
lines changed

src/it/projects/mdep-779-analyze-only-verbose-shows-class-names/verify.bsh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
* to you under the Apache License, Version 2.0 (the
77
* "License"); you may not use this file except in compliance
88
* with the License. You may obtain a copy of the License at
9-
*
9+
*
1010
* http://www.apache.org/licenses/LICENSE-2.0
11-
*
11+
*
1212
* Unless required by applicable law or agreed to in writing,
1313
* software distributed under the License is distributed on an
1414
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

src/main/java/org/apache/maven/plugins/dependency/analyze/AnalyzeDuplicateMojo.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,15 +122,15 @@ private void createMessage(
122122
Set<String> duplicateDependencies, StringBuilder sb, String messageDuplicateDepInDependencies) {
123123
if (!duplicateDependencies.isEmpty()) {
124124
if (sb.length() > 0) {
125-
sb.append("\n");
125+
sb.append(System.lineSeparator());
126126
}
127127
sb.append(messageDuplicateDepInDependencies);
128128
for (Iterator<String> it = duplicateDependencies.iterator(); it.hasNext(); ) {
129129
String dup = it.next();
130130

131131
sb.append("\to ").append(dup);
132132
if (it.hasNext()) {
133-
sb.append("\n");
133+
sb.append(System.lineSeparator());
134134
}
135135
}
136136
}

src/main/java/org/apache/maven/plugins/dependency/tree/AbstractSerializingVisitor.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
*/
1919
package org.apache.maven.plugins.dependency.tree;
2020

21-
import java.io.PrintWriter;
2221
import java.io.Writer;
2322

2423
/**
@@ -31,7 +30,7 @@ public abstract class AbstractSerializingVisitor {
3130
/**
3231
* The writer to serialize to.
3332
*/
34-
protected final PrintWriter writer;
33+
protected final Writer writer;
3534

3635
/**
3736
* Constructor.
@@ -42,10 +41,6 @@ public abstract class AbstractSerializingVisitor {
4241
* @param writer the writer to serialize to.
4342
*/
4443
public AbstractSerializingVisitor(Writer writer) {
45-
if (writer instanceof PrintWriter) {
46-
this.writer = (PrintWriter) writer;
47-
} else {
48-
this.writer = new PrintWriter(writer, true);
49-
}
44+
this.writer = writer;
5045
}
5146
}

src/main/java/org/apache/maven/plugins/dependency/tree/DOTDependencyNodeVisitor.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.apache.maven.plugins.dependency.tree;
2020

21+
import java.io.IOException;
22+
import java.io.UncheckedIOException;
2123
import java.io.Writer;
2224
import java.util.List;
2325

@@ -47,16 +49,23 @@ public DOTDependencyNodeVisitor(Writer writer) {
4749
*/
4850
@Override
4951
public boolean visit(DependencyNode node) {
50-
if (node.getParent() == null || node.getParent() == node) {
51-
writer.write("digraph \"" + node.toNodeString() + "\" { " + System.lineSeparator());
52-
}
52+
try {
53+
if (node.getParent() == null || node.getParent() == node) {
54+
writer.write("digraph \"" + node.toNodeString() + "\" { " + System.lineSeparator());
55+
writer.flush();
56+
}
5357

54-
// Generate "currentNode -> Child" lines
58+
// Generate "currentNode -> Child" lines
5559

56-
List<DependencyNode> children = node.getChildren();
60+
List<DependencyNode> children = node.getChildren();
5761

58-
for (DependencyNode child : children) {
59-
writer.println("\t\"" + node.toNodeString() + "\" -> \"" + child.toNodeString() + "\" ; ");
62+
for (DependencyNode child : children) {
63+
writer.write("\t\"" + node.toNodeString() + "\" -> \"" + child.toNodeString() + "\" ; "
64+
+ System.lineSeparator());
65+
}
66+
writer.flush();
67+
} catch (IOException e) {
68+
throw new UncheckedIOException("Failed to write DOT format output", e);
6069
}
6170

6271
return true;
@@ -67,8 +76,13 @@ public boolean visit(DependencyNode node) {
6776
*/
6877
@Override
6978
public boolean endVisit(DependencyNode node) {
70-
if (node.getParent() == null || node.getParent() == node) {
71-
writer.write(" } ");
79+
try {
80+
if (node.getParent() == null || node.getParent() == node) {
81+
writer.write(" } " + System.lineSeparator());
82+
writer.flush();
83+
}
84+
} catch (IOException e) {
85+
throw new UncheckedIOException("Failed to write DOT format output", e);
7286
}
7387
return true;
7488
}

src/main/java/org/apache/maven/plugins/dependency/tree/GraphmlDependencyNodeVisitor.java

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.apache.maven.plugins.dependency.tree;
2020

21+
import java.io.IOException;
22+
import java.io.UncheckedIOException;
2123
import java.io.Writer;
2224

2325
import org.apache.maven.shared.dependency.graph.DependencyNode;
@@ -64,36 +66,47 @@ public GraphmlDependencyNodeVisitor(Writer writer) {
6466
*/
6567
@Override
6668
public boolean endVisit(DependencyNode node) {
67-
if (node.getParent() == null || node.getParent() == node) {
68-
writer.write(GRAPHML_FOOTER);
69-
} else {
70-
DependencyNode p = node.getParent();
71-
writer.print("<edge source=\"" + generateId(p) + "\" target=\"" + generateId(node) + "\">");
72-
if (node.getArtifact().getScope() != null) {
73-
// add Edge label
74-
writer.print("<data key=\"d1\"><y:PolyLineEdge><y:EdgeLabel>"
75-
+ node.getArtifact().getScope() + "</y:EdgeLabel></y:PolyLineEdge></data>");
69+
try {
70+
if (node.getParent() == null || node.getParent() == node) {
71+
writer.write(GRAPHML_FOOTER);
72+
} else {
73+
DependencyNode p = node.getParent();
74+
writer.write("<edge source=\"" + generateId(p) + "\" target=\"" + generateId(node) + "\">");
75+
if (node.getArtifact().getScope() != null) {
76+
// add Edge label
77+
writer.write("<data key=\"d1\"><y:PolyLineEdge><y:EdgeLabel>"
78+
+ node.getArtifact().getScope() + "</y:EdgeLabel></y:PolyLineEdge></data>");
79+
}
80+
writer.write("</edge>" + System.lineSeparator());
7681
}
77-
writer.println("</edge>");
82+
writer.flush();
83+
return true;
84+
} catch (IOException e) {
85+
throw new UncheckedIOException("Failed to write GraphML format output", e);
7886
}
79-
return true;
8087
}
8188

8289
/**
8390
* {@inheritDoc}
8491
*/
8592
@Override
8693
public boolean visit(DependencyNode node) {
87-
if (node.getParent() == null || node.getParent() == node) {
88-
writer.write(GRAPHML_HEADER);
94+
try {
95+
if (node.getParent() == null || node.getParent() == node) {
96+
writer.write(GRAPHML_HEADER);
97+
writer.flush();
98+
}
99+
// write node
100+
writer.write("<node id=\"" + generateId(node) + "\">");
101+
// add node label
102+
writer.write("<data key=\"d0\"><y:ShapeNode><y:NodeLabel>" + node.toNodeString()
103+
+ "</y:NodeLabel></y:ShapeNode></data>");
104+
writer.write("</node>" + System.lineSeparator());
105+
writer.flush();
106+
return true;
107+
} catch (IOException e) {
108+
throw new UncheckedIOException("Failed to write GraphML format output", e);
89109
}
90-
// write node
91-
writer.print("<node id=\"" + generateId(node) + "\">");
92-
// add node label
93-
writer.print("<data key=\"d0\"><y:ShapeNode><y:NodeLabel>" + node.toNodeString()
94-
+ "</y:NodeLabel></y:ShapeNode></data>");
95-
writer.println("</node>");
96-
return true;
97110
}
98111

99112
/**

src/main/java/org/apache/maven/plugins/dependency/tree/JsonDependencyNodeVisitor.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.apache.maven.plugins.dependency.tree;
2020

21+
import java.io.IOException;
22+
import java.io.UncheckedIOException;
2123
import java.io.Writer;
2224
import java.util.HashSet;
2325
import java.util.Set;
@@ -44,25 +46,31 @@ public JsonDependencyNodeVisitor(Writer writer) {
4446

4547
@Override
4648
public boolean visit(DependencyNode node) {
47-
if (node.getParent() == null || node.getParent() == node) {
48-
writeRootNode(node);
49+
try {
50+
if (node.getParent() == null || node.getParent() == node) {
51+
writeRootNode(node);
52+
}
53+
return true;
54+
} catch (IOException e) {
55+
throw new UncheckedIOException("Failed to write JSON format output", e);
4956
}
50-
return true;
5157
}
5258

5359
/**
5460
* Writes the node to the writer. This method is recursive and will write all children nodes.
5561
*
5662
* @param node the node to write
63+
* @throws IOException if an I/O error occurs while writing
5764
*/
58-
private void writeRootNode(DependencyNode node) {
65+
private void writeRootNode(DependencyNode node) throws IOException {
5966
Set<DependencyNode> visited = new HashSet<>();
6067
int indent = 2;
6168
StringBuilder sb = new StringBuilder();
62-
sb.append("{").append("\n");
69+
sb.append("{").append(System.lineSeparator());
6370
writeNode(indent, node, sb, visited);
64-
sb.append("}").append("\n");
71+
sb.append("}").append(System.lineSeparator());
6572
writer.write(sb.toString());
73+
writer.flush();
6674
}
6775
/**
6876
* Appends the node and its children to the string builder.
@@ -91,21 +99,21 @@ private void writeNode(int indent, DependencyNode node, StringBuilder sb, Set<De
9199
* @param sb the string builder to append to
92100
*/
93101
private void writeChildren(int indent, DependencyNode node, StringBuilder sb, Set<DependencyNode> visited) {
94-
sb.append(indent(indent)).append("\"children\": [").append("\n");
102+
sb.append(indent(indent)).append("\"children\": [").append(System.lineSeparator());
95103
indent += 2;
96104
for (int i = 0; i < node.getChildren().size(); i++) {
97105
DependencyNode child = node.getChildren().get(i);
98106
sb.append(indent(indent));
99-
sb.append("{").append("\n");
107+
sb.append("{").append(System.lineSeparator());
100108
writeNode(indent + 2, child, sb, visited);
101109
sb.append(indent(indent)).append("}");
102110
// we skip the comma for the last child
103111
if (i != node.getChildren().size() - 1) {
104112
sb.append(",");
105113
}
106-
sb.append("\n");
114+
sb.append(System.lineSeparator());
107115
}
108-
sb.append(indent(indent)).append("]").append("\n");
116+
sb.append(indent(indent)).append("]").append(System.lineSeparator());
109117
}
110118

111119
@Override
@@ -156,7 +164,7 @@ private void appendKeyValue(StringBuilder sb, int indent, String key, String val
156164
.append(value)
157165
.append("\"")
158166
.append(",")
159-
.append("\n");
167+
.append(System.lineSeparator());
160168
}
161169
/**
162170
* 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 @@ private void appendKeyWithoutComma(StringBuilder sb, int indent, String key, Str
180188
.append("\"")
181189
.append(value)
182190
.append("\"")
183-
.append("\n");
191+
.append(System.lineSeparator());
184192
}
185193

186194
/**

src/main/java/org/apache/maven/plugins/dependency/tree/TGFDependencyNodeVisitor.java

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
*/
1919
package org.apache.maven.plugins.dependency.tree;
2020

21+
import java.io.IOException;
22+
import java.io.UncheckedIOException;
2123
import java.io.Writer;
2224
import java.util.ArrayList;
2325
import java.util.List;
@@ -35,7 +37,7 @@
3537
public class TGFDependencyNodeVisitor extends AbstractSerializingVisitor implements DependencyNodeVisitor {
3638

3739
/**
38-
* Utiity class to write an Edge.
40+
* Utility class to write an Edge.
3941
*
4042
* @author <a href="mailto:jerome.creignou@gmail.com">Jerome Creignou</a>
4143
*/
@@ -102,30 +104,41 @@ public TGFDependencyNodeVisitor(Writer writer) {
102104
*/
103105
@Override
104106
public boolean endVisit(DependencyNode node) {
105-
if (node.getParent() == null || node.getParent() == node) {
106-
// dump edges on last node endVisit
107-
writer.println("#");
108-
for (EdgeAppender edge : edges) {
109-
writer.println(edge.toString());
107+
try {
108+
if (node.getParent() == null || node.getParent() == node) {
109+
// dump edges on last node endVisit
110+
writer.write("#" + System.lineSeparator());
111+
for (EdgeAppender edge : edges) {
112+
writer.write(edge.toString() + System.lineSeparator());
113+
}
114+
writer.flush();
115+
} else {
116+
DependencyNode parent = node.getParent();
117+
// using scope as edge label.
118+
edges.add(new EdgeAppender(parent, node, node.getArtifact().getScope()));
110119
}
111-
} else {
112-
DependencyNode p = node.getParent();
113-
// using scope as edge label.
114-
edges.add(new EdgeAppender(p, node, node.getArtifact().getScope()));
120+
return true;
121+
} catch (IOException e) {
122+
throw new UncheckedIOException("Failed to write TGF format output", e);
115123
}
116-
return true;
117124
}
118125

119126
/**
120127
* {@inheritDoc}
121128
*/
122129
@Override
123130
public boolean visit(DependencyNode node) {
124-
// write node
125-
writer.write(generateId(node));
126-
writer.write(" ");
127-
writer.println(node.toNodeString());
128-
return true;
131+
try {
132+
// Write node
133+
writer.write(generateId(node));
134+
writer.write(" ");
135+
writer.write(node.toNodeString());
136+
writer.write(System.lineSeparator());
137+
writer.flush();
138+
return true;
139+
} catch (IOException e) {
140+
throw new UncheckedIOException("Failed to write TGF format output", e);
141+
}
129142
}
130143

131144
/**

src/test/java/org/apache/maven/plugins/dependency/tree/TestTreeMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public void testTreeJsonParsing() throws Exception {
190190
List<String> contents = runTreeMojo("tree2.json", "json");
191191

192192
System.setProperty("jakarta.json.provider", "org.glassfish.json.JsonProviderImpl");
193-
try (JsonReader reader = Json.createReader(new StringReader(String.join("\n", contents)))) {
193+
try (JsonReader reader = Json.createReader(new StringReader(String.join(System.lineSeparator(), contents)))) {
194194
JsonObject root = reader.readObject();
195195

196196
assertEquals(root.getString("groupId"), "testGroupId");

0 commit comments

Comments
 (0)