package com.dragome.compiler.graph; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.dragome.compiler.ast.TryStatement; public class TryHeaderNode extends Node { public TryStatement tryStmt; public TryHeaderNode(Graph theGraph) { super(theGraph); } public void setTryBody(Node theTryBody) { Edge edge= graph.addEdge(this, theTryBody); edge.type= EdgeType.TRYBODY; } public void setFinallyNode(Node theFinallyNode) { Edge edge= graph.addEdge(this, theFinallyNode); edge.type= EdgeType.FINALLY; } public void addCatchNode(Node node) { Edge edge= graph.addEdge(this, node); edge.type= EdgeType.CATCH; } public Node getSuccessor() { Iterator iter= outEdges.iterator(); while (iter.hasNext()) { Edge edge= (Edge) iter.next(); if (edge.type == null) return edge.target; } return null; } public Node getTryBody() { Iterator iter= outEdges.iterator(); while (iter.hasNext()) { Edge edge= (Edge) iter.next(); if (edge.type == EdgeType.TRYBODY) return edge.target; } throw new RuntimeException(); } public Node getFinallyNode() { Iterator iter= outEdges.iterator(); while (iter.hasNext()) { Edge edge= (Edge) iter.next(); if (edge.type == EdgeType.FINALLY) return edge.target; } return null; } public List<Node> getCatchNodes() { List<Node> catchNodes= new ArrayList<Node>(); for (Edge edge : outEdges) { if (edge.type == EdgeType.CATCH) catchNodes.add(edge.target); } return catchNodes; } public TryStatement getTryStatement() { return tryStmt; } }