package de.gaalop.tba.cfgImport.optimization; import de.gaalop.cfg.AssignmentNode; import de.gaalop.cfg.BlockEndNode; import de.gaalop.cfg.BreakNode; import de.gaalop.cfg.ColorNode; import de.gaalop.cfg.ControlFlowVisitor; 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; /** * This class collects all nodes in a control flow graph * */ public class NodeCollectorControlFlowVisitor implements ControlFlowVisitor { private LinkedList<Node> nodeList = new LinkedList<Node>(); public LinkedList<Node> getNodeList() { return nodeList; } /** * {@inheritDoc} * * This empty implementation visits the successor node by default. */ @Override public void visit(StartNode node) { node.getSuccessor().accept(this); } /** * {@inheritDoc} * * This empty implementation visits the successor node by default. */ @Override public void visit(AssignmentNode node) { nodeList.addLast(node); node.getSuccessor().accept(this); } @Override public void visit(ExpressionStatement node) { nodeList.addLast(node); node.getSuccessor().accept(this); } /** * {@inheritDoc} * * This empty implementation visits the successor node by default. */ @Override public void visit(StoreResultNode node) { nodeList.addLast(node); node.getSuccessor().accept(this); } /** * {@inheritDoc} * * This empty implementation visits the positive part, the negative part and finally the successor node by default. */ @Override public void visit(IfThenElseNode node) { node.getPositive().accept(this); node.getNegative().accept(this); node.getSuccessor().accept(this); } /** * {@inheritDoc} * * This empty implementation does not call a successor's visit method. */ @Override public void visit(BlockEndNode node) { } /** * {@inheritDoc} * * This empty implementation visits the successor node by default. */ @Override public void visit(LoopNode node) { node.getBody().accept(this); node.getSuccessor().accept(this); } /** * {@inheritDoc} * * This empty implementation visits the successor node by default. */ @Override public void visit(BreakNode node) { node.getSuccessor().accept(this); } /** * {@inheritDoc} * * This is an entirely empty implementation. */ @Override public void visit(EndNode node) { } /** * {@inheritDoc} * * This empty implementation visits the successor node by default. */ @Override public void visit(Macro node) { node.getSuccessor().accept(this); } @Override public void visit(ColorNode node) { nodeList.addLast(node); node.getSuccessor().accept(this); } }