package de.gaalop.api.cfg;
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;
/**
* Returns the type of a ControlFlowGraph node
* @author Christian Steinmetz
*/
public class CFGNodeTypeGetter implements ControlFlowVisitor {
private CFGNodeType type;
private static final CFGNodeTypeGetter getter = new CFGNodeTypeGetter();
/**
* Returns the type of a ControlFlowGraphNode
* @param node The node
* @return The type of the given node
*/
public static CFGNodeType getTypeOfCFGNode(Node node) {
if (node == null) {
return null;
}
node.accept(getter);
return getter.type;
}
@Override
public void visit(StartNode node) {
type = CFGNodeType.StartNode;
}
@Override
public void visit(AssignmentNode node) {
type = CFGNodeType.AssignmentNode;
}
@Override
public void visit(StoreResultNode node) {
type = CFGNodeType.StoreResultNode;
}
@Override
public void visit(IfThenElseNode node) {
type = CFGNodeType.IfThenElseNode;
}
@Override
public void visit(BlockEndNode node) {
type = CFGNodeType.BlockEndNode;
}
@Override
public void visit(LoopNode node) {
type = CFGNodeType.LoopNode;
}
@Override
public void visit(BreakNode node) {
type = CFGNodeType.BreakNode;
}
@Override
public void visit(Macro node) {
type = CFGNodeType.Macro;
}
@Override
public void visit(ExpressionStatement node) {
type = CFGNodeType.ExpressionStatement;
}
@Override
public void visit(EndNode node) {
type = CFGNodeType.EndNode;
}
@Override
public void visit(ColorNode node) {
type = CFGNodeType.ColorNode;
}
}