public String toString() { String info = ""; switch (reason) { case BOTH_FLOW: info = "direct and indirect flow "; break; case DIRECT_FLOW: info = "direct flow "; break; case INDIRECT_FLOW: info = "indirect flow "; break; case EXCEPTION: info = "flow caused by exceptions "; break; case THREAD: info = "critical thread interference "; break; case THREAD_DATA: info = "critical thread interference (data) "; break; case THREAD_ORDER: info = "critical thread interference (order) "; break; case THREAD_EXCEPTION: info = "critical thread interference caused by exceptions "; break; } switch (reason) { case THREAD: case THREAD_DATA: case THREAD_ORDER: case THREAD_EXCEPTION: info += "between '" + source.toString() + "' and '" + sink.toString() + "'"; break; default: info += "from '" + source.toString() + "' to '" + sink.toString() + "'"; } return info; }
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(); }