diff options
author | Alena Laskavaia | 2010-04-15 02:22:56 +0000 |
---|---|---|
committer | Alena Laskavaia | 2010-04-15 02:22:56 +0000 |
commit | 234a20224a17c7229a7e4a440c2a89992ba825df (patch) | |
tree | 08280571a85cc1e4ac05a0579266c5fccd8ae866 /codan/org.eclipse.cdt.codan.ui.cfgview | |
parent | 697b118ca513be0a19f94db521159dca1bbb342d (diff) | |
download | org.eclipse.cdt-234a20224a17c7229a7e4a440c2a89992ba825df.tar.gz org.eclipse.cdt-234a20224a17c7229a7e4a440c2a89992ba825df.tar.xz org.eclipse.cdt-234a20224a17c7229a7e4a440c2a89992ba825df.zip |
- added support for break and continue
Diffstat (limited to 'codan/org.eclipse.cdt.codan.ui.cfgview')
-rw-r--r-- | codan/org.eclipse.cdt.codan.ui.cfgview/src/org/eclipse/cdt/codan/ui/cfgview/views/ControlFlowGraphView.java | 59 |
1 files changed, 26 insertions, 33 deletions
diff --git a/codan/org.eclipse.cdt.codan.ui.cfgview/src/org/eclipse/cdt/codan/ui/cfgview/views/ControlFlowGraphView.java b/codan/org.eclipse.cdt.codan.ui.cfgview/src/org/eclipse/cdt/codan/ui/cfgview/views/ControlFlowGraphView.java index f3f05073bf8..218004ab9fd 100644 --- a/codan/org.eclipse.cdt.codan.ui.cfgview/src/org/eclipse/cdt/codan/ui/cfgview/views/ControlFlowGraphView.java +++ b/codan/org.eclipse.cdt.codan.ui.cfgview/src/org/eclipse/cdt/codan/ui/cfgview/views/ControlFlowGraphView.java @@ -13,7 +13,7 @@ import org.eclipse.cdt.codan.provisional.core.model.cfg.IControlFlowGraph; import org.eclipse.cdt.codan.provisional.core.model.cfg.IDecisionNode; import org.eclipse.cdt.codan.provisional.core.model.cfg.IExitNode; import org.eclipse.cdt.codan.provisional.core.model.cfg.IJumpNode; -import org.eclipse.cdt.codan.provisional.core.model.cfg.ILabeledNode; +import org.eclipse.cdt.codan.provisional.core.model.cfg.IBranchNode; import org.eclipse.cdt.codan.provisional.core.model.cfg.ISingleOutgoing; import org.eclipse.cdt.codan.provisional.core.model.cfg.IStartNode; import org.eclipse.cdt.codan.ui.cfgview.ControlFlowGraphPlugin; @@ -131,10 +131,9 @@ public class ControlFlowGraphView extends ViewPart { } blocks.add(((IDecisionNode) parent).getMergeNode()); return blocks.toArray(); - } else if (parent instanceof ILabeledNode) { - Collection<IBasicBlock> blocks = getFlat( - ((ILabeledNode) parent).getOutgoing(), - new ArrayList<IBasicBlock>()); + } else if (parent instanceof IBranchNode) { + Collection<IBasicBlock> blocks = getFlat(((IBranchNode) parent) + .getOutgoing(), new ArrayList<IBasicBlock>()); return blocks.toArray(); } return new Object[0]; @@ -143,6 +142,25 @@ public class ControlFlowGraphView extends ViewPart { public boolean hasChildren(Object parent) { return getChildren(parent).length > 0; } + + /** + * @param list + * @param startNode + * @return + */ + public Collection<IBasicBlock> getFlat(IBasicBlock node, + Collection<IBasicBlock> list) { + list.add(node); + if (node instanceof IJumpNode) + return list; + if (node instanceof ISingleOutgoing) { + getFlat(((ISingleOutgoing) node).getOutgoing(), list); + } else if (node instanceof IDecisionNode) { + getFlat(((IDecisionNode) node).getMergeNode().getOutgoing(), + list); + } + return list; + } } class ViewLabelProvider extends LabelProvider { @@ -154,13 +172,11 @@ public class ControlFlowGraphView extends ViewPart { strdata = ((AbstractBasicBlock) obj).toStringData(); } if (strdata == null || strdata.length() == 0) { - if (obj instanceof ILabeledNode) { - strdata = strdata+blockHexLabel(obj); - } else if (obj instanceof IConnectorNode) { + if (obj instanceof IConnectorNode) { strdata = blockHexLabel(obj); } else if (obj instanceof IJumpNode) { strdata = blockHexLabel(((IJumpNode) obj).getJumpNode()); - } + } } return obj.getClass().getSimpleName() + ": " + strdata; } @@ -184,7 +200,7 @@ public class ControlFlowGraphView extends ViewPart { imageKey = "start.png"; else if (obj instanceof IJumpNode) imageKey = "jump.png"; - else if (obj instanceof ILabeledNode) + else if (obj instanceof IBranchNode) imageKey = "labeled.png"; else if (obj instanceof IConnectorNode) imageKey = "connector.png"; @@ -200,29 +216,6 @@ public class ControlFlowGraphView extends ViewPart { } /** - * @param list - * @param startNode - * @return - */ - public Collection<IBasicBlock> getFlat(IBasicBlock node, - Collection<IBasicBlock> list) { - list.add(node); - if (node instanceof IConnectorNode - && !((IConnectorNode) node).hasBackwardIncoming() && - !(node instanceof ILabeledNode)) { - return list; - } - if (node instanceof IJumpNode) - return list; - if (node instanceof ISingleOutgoing) { - getFlat(((ISingleOutgoing) node).getOutgoing(), list); - } else if (node instanceof IDecisionNode) { - getFlat(((IDecisionNode) node).getMergeNode().getOutgoing(), list); - } - return list; - } - - /** * This is a callback that will allow us to create the viewer and initialize * it. */ |