package de.gaalop.visitors;
import de.gaalop.cfg.AssignmentNode;
import de.gaalop.cfg.BlockEndNode;
import de.gaalop.cfg.BreakNode;
import de.gaalop.cfg.ColorNode;
import de.gaalop.cfg.ControlFlowGraph;
import de.gaalop.cfg.EmptyControlFlowVisitor;
import de.gaalop.cfg.EndNode;
import de.gaalop.cfg.ExpressionStatement;
import de.gaalop.cfg.IfThenElseNode;
import de.gaalop.cfg.LoopNode;
import de.gaalop.cfg.Macro;
import de.gaalop.cfg.Node;
import de.gaalop.cfg.StartNode;
import de.gaalop.cfg.StoreResultNode;
import java.util.LinkedList;
/**
* Collect all nodes from a ControlFlowGraph
* @author Christian Steinmetz
*/
public class NodeCollector extends EmptyControlFlowVisitor {
private LinkedList<Node> nodes = new LinkedList<Node>();
private NodeCollector() {
}
/**
* Collect all nodes from a given ControlFlowGraph
* @param graph The ControlFlowGraph
* @return The collected nodes
*/
public static LinkedList<Node> collectNodes(ControlFlowGraph graph) {
NodeCollector collector = new NodeCollector();
graph.accept(collector);
return collector.nodes;
}
@Override
public void visit(StartNode node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(AssignmentNode node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(StoreResultNode node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(IfThenElseNode node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(BlockEndNode node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(LoopNode node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(BreakNode node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(Macro node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(ExpressionStatement node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(EndNode node) {
nodes.add(node);
super.visit(node);
}
@Override
public void visit(ColorNode node) {
nodes.add(node);
super.visit(node);
}
}