Skip to content

Commit

Permalink
refactor(SpoonifierVisitor): Deque should be used instead of Stack (
Browse files Browse the repository at this point in the history
  • Loading branch information
tenax66 authored Aug 3, 2023
1 parent 5f30f72 commit f60b801
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions src/main/java/spoon/experimental/SpoonifierVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,13 @@
import spoon.reflect.visitor.CtInheritanceScanner;
import spoon.reflect.visitor.CtScanner;

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Stack;

/**
* Visitor that generates factory calls to recreate the AST visited.
Expand All @@ -47,8 +48,8 @@ public class SpoonifierVisitor extends CtScanner {
//public class SpoonifierVisitor extends CtInheritanceScanner {
StringBuilder result = new StringBuilder();
Map<String, Integer> variableCount = new HashMap<>();
Stack<String> parentName = new Stack<>();
Stack<Map<CtRole, String>> roleContainer = new Stack<>();
Deque<String> parentName = new ArrayDeque<>();
Deque<Map<CtRole, String>> roleContainer = new ArrayDeque<>();

PropertyScanner propertyScanner = new PropertyScanner();

Expand Down Expand Up @@ -154,7 +155,7 @@ && isLeafTypeReference(element.getParent())) {
} else if (o instanceof Set) {
handleContainer(element, parent, elementRoleInParent, variableName, "Set");
} else {
result.append(printTabs() + parentName.peek() + ".setValueByRole(CtRole." + elementRoleInParent.name() + ", " + variableName + ");\n");
result.append(printTabs() + parentName.getFirst() + ".setValueByRole(CtRole." + elementRoleInParent.name() + ", " + variableName + ");\n");
}
}

Expand Down Expand Up @@ -188,12 +189,12 @@ private void handleContainer(CtElement element, CtElement parent, CtRole element
}

String containerName;
if (!roleContainer.peek().containsKey(elementRoleInParent)) {
containerName = parentName.peek() + elementRoleInParent.toString().substring(0, 1).toUpperCase() + elementRoleInParent.toString().substring(1) + "s";
roleContainer.peek().put(elementRoleInParent, containerName);
if (!roleContainer.getFirst().containsKey(elementRoleInParent)) {
containerName = parentName.getFirst() + elementRoleInParent.toString().substring(0, 1).toUpperCase() + elementRoleInParent.toString().substring(1) + "s";
roleContainer.getFirst().put(elementRoleInParent, containerName);
result.append(printTabs() + container + " " + containerName + " = new " + concreteClass + "();\n");
} else {
containerName = roleContainer.peek().get(elementRoleInParent);
containerName = roleContainer.getFirst().get(elementRoleInParent);
}

if (container.equals("Map")) {
Expand Down Expand Up @@ -222,11 +223,11 @@ public void exit(CtElement element) {
&& isLeafTypeReference(element.getParent())) {
return;
}
if (!roleContainer.peek().isEmpty()) {
for (CtRole role: roleContainer.peek().keySet()) {
String variableName = roleContainer.peek().get(role);
if (!roleContainer.getFirst().isEmpty()) {
for (CtRole role: roleContainer.getFirst().keySet()) {
String variableName = roleContainer.getFirst().get(role);
result.append(printTabs())
.append(parentName.peek())
.append(parentName.getFirst())
.append(".setValueByRole(CtRole.")
.append(role.name())
.append(", ")
Expand Down

0 comments on commit f60b801

Please sign in to comment.