public String toString(final File srcFile) { StringBuffer sbuf = new StringBuffer(); switch (reason) { case DIRECT_FLOW: sbuf.append("direct flow:\n"); break; case INDIRECT_FLOW: sbuf.append("indirect flow:\n"); break; case BOTH_FLOW: sbuf.append("direct and indirect flow:\n"); break; case EXCEPTION: sbuf.append("flow due to exceptions:\n"); break; case THREAD: sbuf.append("possibilistic or probabilistic flow:\n"); break; case THREAD_DATA: sbuf.append("possibilistic flow:\n"); break; case THREAD_ORDER: sbuf.append("probabilistic flow:\n"); break; case THREAD_EXCEPTION: sbuf.append("possibilistic or probabilistic flow caused by exceptions:\n"); break; default: sbuf.append("reason: " + reason + "\n"); } sbuf.append("from '" + source.toString() + "' to '" + sink.toString() + "'\n"); for (final SPos pos : chop) { sbuf.append(pos.toString() + "\t"); final String code = pos.getSourceCode(srcFile); sbuf.append(code + "\n"); } return sbuf.toString(); }