IfNode (IfStatement stat, boolean stsingle) { if (stat.iftype == IfStatement.IFTYPE_IFELSE) { return null; } IfNode res = new IfNode(stat); // if branch Statement ifchild = stat.getIfstat(); if (ifchild == null) { StatEdge edge = stat.getIfEdge(); res.addChild(new IfNode(edge.getDestination()), 1); } else { IfNode ifnode = new IfNode(ifchild); res.addChild(ifnode, 0); if (ifchild.type == StatementType.IF && ((IfStatement)ifchild).iftype == IfStatement.IFTYPE_IF) { IfStatement stat2 = (IfStatement)ifchild; Statement ifchild2 = stat2.getIfstat(); if (ifchild2 == null) { StatEdge edge = stat2.getIfEdge(); ifnode.addChild(new IfNode(edge.getDestination()), 1); } else { ifnode.addChild(new IfNode(ifchild2), 0); } } if (!ifchild.getAllSuccessorEdges().isEmpty()) { ifnode.addChild(new IfNode(ifchild.getAllSuccessorEdges().get(0).getDestination()), 1); } } // else branch StatEdge edge = stat.getAllSuccessorEdges().get(0); Statement elsechild = edge.getDestination(); IfNode elsenode = new IfNode(elsechild); if (stsingle || edge.getType() != EdgeType.REGULAR) { res.addChild(elsenode, 1); } else { res.addChild(elsenode, 0); if (elsechild.type == StatementType.IF && ((IfStatement)elsechild).iftype == IfStatement.IFTYPE_IF) { IfStatement stat2 = (IfStatement)elsechild; Statement ifchild2 = stat2.getIfstat(); if (ifchild2 == null) { elsenode.addChild(new IfNode(stat2.getIfEdge().getDestination()), 1); } else { elsenode.addChild(new IfNode(ifchild2), 0); } } if (!elsechild.getAllSuccessorEdges().isEmpty()) { elsenode.addChild(new IfNode(elsechild.getAllSuccessorEdges().get(0).getDestination()), 1); } } return res; }