@Override protected TypedAST doTransform(TypedAST transform) { List<List<SCCNode>> sccs = TarjansSCCCheck( new ImportGraphBuilder( new ImportGraphBuilder.NodeFactory<SCCNode>() { @Override public SCCNode create( String name, TypedAST ast, LinkedList<Node<SCCNode>> links) { return new SCCNode(name, ast, links); } }) .getGraph("entry", transform)); if (sccs.size() > 0) { StringBuilder allSCCs = new StringBuilder(sccs.size()); for (List<SCCNode> scc : sccs) { StringBuilder sccBuilder = new StringBuilder(scc.size() * 2 + 1); sccBuilder.append("\t"); Iterator<SCCNode> iterator = scc.iterator(); while (iterator.hasNext()) { SCCNode component = iterator.next(); sccBuilder.append(component.getName()); sccBuilder.append(" -> "); } sccBuilder.append(scc.get(0).getName() + "\n"); allSCCs.append(sccBuilder.toString()); } ToolError.reportError(ErrorMessage.IMPORT_CYCLE, allSCCs.toString(), transform); } return transform; }