Skip to content

Commit 80e46f7

Browse files
authored
refactor: remove visitors (#8)
1 parent fb305f2 commit 80e46f7

File tree

11 files changed

+3856
-10378
lines changed

11 files changed

+3856
-10378
lines changed

src/main/java/io/github/algomaster99/maven_module_graph/Utility.java

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package io.github.algomaster99.maven_module_graph;
22

3-
import io.github.algomaster99.maven_module_graph.visitor.JsonVisitor;
4-
import io.github.algomaster99.maven_module_graph.visitor.MavenModuleProcessor;
5-
import io.github.algomaster99.maven_module_graph.visitor.PlainTextVisitor;
3+
import com.fasterxml.jackson.core.util.DefaultIndenter;
4+
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import com.fasterxml.jackson.databind.node.ArrayNode;
7+
import com.fasterxml.jackson.databind.node.ObjectNode;
68
import org.apache.maven.model.Model;
79
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
810
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -14,6 +16,7 @@
1416
import java.util.ArrayList;
1517
import java.util.List;
1618
import java.util.Map;
19+
import java.util.Stack;
1720
import java.util.regex.Matcher;
1821
import java.util.regex.Pattern;
1922

@@ -55,27 +58,74 @@ private static List<String> getAllModules(Model model) {
5558
return modules;
5659
}
5760

61+
5862
public static void printToFile(MavenModule root, Path plainText, int indent) {
59-
PlainTextVisitor plainTextVisitor = new PlainTextVisitor(indent);
60-
MavenModuleProcessor.process(root, plainTextVisitor);
63+
StringBuilder sb = new StringBuilder();
64+
Stack<Pair<Integer, MavenModule>> levelToModule = new Stack<>();
65+
levelToModule.add(Pair.of(0, root));
66+
67+
String indentString = " ".repeat(indent);
68+
69+
while (!levelToModule.isEmpty()) {
70+
Pair<Integer, MavenModule> current = levelToModule.pop();
71+
int level = current.first();
72+
sb.append(indentString.repeat(level));
73+
74+
MavenModule currentModule = current.second();
75+
sb.append(String.format("%s:%s:%s", currentModule.getGroupId(), currentModule.getArtifactId(), currentModule.getVersion()));
76+
List<MavenModule> children = currentModule.getSubmodules();
77+
for (MavenModule child : children) {
78+
levelToModule.add(Pair.of(level + 1, child));
79+
}
80+
sb.append("\n");
81+
}
6182

83+
// Write to file
6284
try {
63-
Files.writeString(plainText, plainTextVisitor.getResult());
85+
Files.writeString(plainText, sb.toString());
6486
} catch (IOException e) {
6587
e.printStackTrace();
6688
}
6789
}
6890

6991
public static void printToJson(MavenModule root, Path jsonPath, int indent) {
70-
JsonVisitor jsonVisitor = new JsonVisitor(indent);
71-
MavenModuleProcessor.process(root, jsonVisitor);
92+
ObjectMapper mapper = new ObjectMapper();
93+
ObjectNode rootNode = convertToJson(mapper, root, 0);
94+
7295
try {
73-
jsonVisitor.writeToFile(jsonPath);
96+
if (indent > 0) {
97+
DefaultPrettyPrinter.Indenter indenter = new DefaultIndenter(" ".repeat(indent), DefaultIndenter.SYS_LF);
98+
DefaultPrettyPrinter printer = new DefaultPrettyPrinter();
99+
printer.indentObjectsWith(indenter);
100+
printer.indentArraysWith(indenter);
101+
Files.writeString(jsonPath, mapper.writer(printer).writeValueAsString(rootNode));
102+
} else {
103+
Files.writeString(jsonPath, mapper.writeValueAsString(rootNode));
104+
}
74105
} catch (IOException e) {
75106
e.printStackTrace();
76107
}
77108
}
78109

110+
private static ObjectNode convertToJson(ObjectMapper mapper, MavenModule module, int depth) {
111+
ObjectNode jsonNode = mapper.createObjectNode();
112+
jsonNode.put("depth", depth);
113+
jsonNode.put("groupId", module.getGroupId());
114+
jsonNode.put("artifactId", module.getArtifactId());
115+
jsonNode.put("version", module.getVersion());
116+
117+
// Add children with incremented depth
118+
List<MavenModule> submodules = module.getSubmodules();
119+
if (!submodules.isEmpty()) {
120+
ArrayNode childrenArray = jsonNode.putArray("submodules");
121+
for (MavenModule child : submodules) {
122+
childrenArray.add(convertToJson(mapper, child, depth + 1));
123+
}
124+
}
125+
126+
return jsonNode;
127+
}
128+
79129
private static String getGroupId(Model module) {
80130
String groupId = module.getGroupId();
81131
if (groupId == null) {

src/main/java/io/github/algomaster99/maven_module_graph/visitor/JsonVisitor.java

Lines changed: 0 additions & 55 deletions
This file was deleted.

src/main/java/io/github/algomaster99/maven_module_graph/visitor/MavenModuleProcessor.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/main/java/io/github/algomaster99/maven_module_graph/visitor/MavenModuleVisitor.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/main/java/io/github/algomaster99/maven_module_graph/visitor/PlainTextVisitor.java

Lines changed: 0 additions & 23 deletions
This file was deleted.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"arthas-all":{"groupId":"com.taobao.arthas","artifactId":"arthas-all","version":"4.0.4","submodules":[{"groupId":"com.taobao.arthas","artifactId":"web-ui","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"math-game","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-common","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-spy","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-vmtool","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-tunnel-common","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-tunnel-client","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-core","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-agent","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-client","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-memorycompiler","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-boot","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-agent-attach","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-spring-boot-starter","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-tunnel-server","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-testcase","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-site","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-packaging","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-grpc-web-proxy","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"native-agent","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"native-agent-management-web","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"native-agent-proxy","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"native-agent-common","version":"4.0.4"},{"groupId":"com.taobao.arthas","artifactId":"arthas-grpc-server","version":"4.0.4"}]},"web-ui":{"groupId":"com.taobao.arthas","artifactId":"web-ui","version":"4.0.4"},"math-game":{"groupId":"com.taobao.arthas","artifactId":"math-game","version":"4.0.4"},"arthas-common":{"groupId":"com.taobao.arthas","artifactId":"arthas-common","version":"4.0.4"},"arthas-spy":{"groupId":"com.taobao.arthas","artifactId":"arthas-spy","version":"4.0.4"},"arthas-vmtool":{"groupId":"com.taobao.arthas","artifactId":"arthas-vmtool","version":"4.0.4"},"arthas-tunnel-common":{"groupId":"com.taobao.arthas","artifactId":"arthas-tunnel-common","version":"4.0.4"},"arthas-tunnel-client":{"groupId":"com.taobao.arthas","artifactId":"arthas-tunnel-client","version":"4.0.4"},"arthas-core":{"groupId":"com.taobao.arthas","artifactId":"arthas-core","version":"4.0.4"},"arthas-agent":{"groupId":"com.taobao.arthas","artifactId":"arthas-agent","version":"4.0.4"},"arthas-client":{"groupId":"com.taobao.arthas","artifactId":"arthas-client","version":"4.0.4"},"arthas-memorycompiler":{"groupId":"com.taobao.arthas","artifactId":"arthas-memorycompiler","version":"4.0.4"},"arthas-boot":{"groupId":"com.taobao.arthas","artifactId":"arthas-boot","version":"4.0.4"},"arthas-agent-attach":{"groupId":"com.taobao.arthas","artifactId":"arthas-agent-attach","version":"4.0.4"},"arthas-spring-boot-starter":{"groupId":"com.taobao.arthas","artifactId":"arthas-spring-boot-starter","version":"4.0.4"},"arthas-tunnel-server":{"groupId":"com.taobao.arthas","artifactId":"arthas-tunnel-server","version":"4.0.4"},"arthas-testcase":{"groupId":"com.taobao.arthas","artifactId":"arthas-testcase","version":"4.0.4"},"arthas-site":{"groupId":"com.taobao.arthas","artifactId":"arthas-site","version":"4.0.4"},"arthas-packaging":{"groupId":"com.taobao.arthas","artifactId":"arthas-packaging","version":"4.0.4"},"arthas-grpc-web-proxy":{"groupId":"com.taobao.arthas","artifactId":"arthas-grpc-web-proxy","version":"4.0.4"},"native-agent":{"groupId":"com.taobao.arthas","artifactId":"native-agent","version":"4.0.4"},"native-agent-management-web":{"groupId":"com.taobao.arthas","artifactId":"native-agent-management-web","version":"4.0.4"},"native-agent-proxy":{"groupId":"com.taobao.arthas","artifactId":"native-agent-proxy","version":"4.0.4"},"native-agent-common":{"groupId":"com.taobao.arthas","artifactId":"native-agent-common","version":"4.0.4"},"arthas-grpc-server":{"groupId":"com.taobao.arthas","artifactId":"arthas-grpc-server","version":"4.0.4"}}
1+
{"depth":0,"groupId":"com.taobao.arthas","artifactId":"arthas-all","version":"4.0.4","submodules":[{"depth":1,"groupId":"com.taobao.arthas","artifactId":"web-ui","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"math-game","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-common","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-spy","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-vmtool","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-tunnel-common","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-tunnel-client","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-core","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-agent","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-client","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-memorycompiler","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-boot","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-agent-attach","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-spring-boot-starter","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-tunnel-server","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-testcase","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-site","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-packaging","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-grpc-web-proxy","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"native-agent","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"native-agent-management-web","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"native-agent-proxy","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"native-agent-common","version":"4.0.4"},{"depth":1,"groupId":"com.taobao.arthas","artifactId":"arthas-grpc-server","version":"4.0.4"}]}
Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
com.taobao.arthas:arthas-all:4.0.4
2-
com.taobao.arthas:web-ui:4.0.4
3-
com.taobao.arthas:math-game:4.0.4
4-
com.taobao.arthas:arthas-common:4.0.4
5-
com.taobao.arthas:arthas-spy:4.0.4
6-
com.taobao.arthas:arthas-vmtool:4.0.4
7-
com.taobao.arthas:arthas-tunnel-common:4.0.4
8-
com.taobao.arthas:arthas-tunnel-client:4.0.4
9-
com.taobao.arthas:arthas-core:4.0.4
10-
com.taobao.arthas:arthas-agent:4.0.4
11-
com.taobao.arthas:arthas-client:4.0.4
12-
com.taobao.arthas:arthas-memorycompiler:4.0.4
13-
com.taobao.arthas:arthas-boot:4.0.4
14-
com.taobao.arthas:arthas-agent-attach:4.0.4
15-
com.taobao.arthas:arthas-spring-boot-starter:4.0.4
16-
com.taobao.arthas:arthas-tunnel-server:4.0.4
17-
com.taobao.arthas:arthas-testcase:4.0.4
18-
com.taobao.arthas:arthas-site:4.0.4
19-
com.taobao.arthas:arthas-packaging:4.0.4
20-
com.taobao.arthas:arthas-grpc-web-proxy:4.0.4
21-
com.taobao.arthas:native-agent:4.0.4
22-
com.taobao.arthas:native-agent-management-web:4.0.4
23-
com.taobao.arthas:native-agent-proxy:4.0.4
24-
com.taobao.arthas:native-agent-common:4.0.4
252
com.taobao.arthas:arthas-grpc-server:4.0.4
3+
com.taobao.arthas:native-agent-common:4.0.4
4+
com.taobao.arthas:native-agent-proxy:4.0.4
5+
com.taobao.arthas:native-agent-management-web:4.0.4
6+
com.taobao.arthas:native-agent:4.0.4
7+
com.taobao.arthas:arthas-grpc-web-proxy:4.0.4
8+
com.taobao.arthas:arthas-packaging:4.0.4
9+
com.taobao.arthas:arthas-site:4.0.4
10+
com.taobao.arthas:arthas-testcase:4.0.4
11+
com.taobao.arthas:arthas-tunnel-server:4.0.4
12+
com.taobao.arthas:arthas-spring-boot-starter:4.0.4
13+
com.taobao.arthas:arthas-agent-attach:4.0.4
14+
com.taobao.arthas:arthas-boot:4.0.4
15+
com.taobao.arthas:arthas-memorycompiler:4.0.4
16+
com.taobao.arthas:arthas-client:4.0.4
17+
com.taobao.arthas:arthas-agent:4.0.4
18+
com.taobao.arthas:arthas-core:4.0.4
19+
com.taobao.arthas:arthas-tunnel-client:4.0.4
20+
com.taobao.arthas:arthas-tunnel-common:4.0.4
21+
com.taobao.arthas:arthas-vmtool:4.0.4
22+
com.taobao.arthas:arthas-spy:4.0.4
23+
com.taobao.arthas:arthas-common:4.0.4
24+
com.taobao.arthas:math-game:4.0.4
25+
com.taobao.arthas:web-ui:4.0.4

0 commit comments

Comments
 (0)