package net.jaekl.cfb.analyze;
+import java.io.PrintWriter;
import java.util.HashSet;
+import net.jaekl.cfb.store.Run;
import net.jaekl.cfb.xml.BugInstance;
// Compute and store the delta (difference) between two analyses
public class Delta {
+ Run m_earlier;
+ Run m_later;
+
HashSet<BugInstance> m_fixed; // bugs that have been fixed
HashSet<BugInstance> m_common; // bugs that are present in both versions
HashSet<BugInstance> m_new; // bugs introduced in the new version
public Delta(Analysis before, Analysis after)
{
+ m_earlier = new Run(before);
+ m_later = new Run(after);
+
m_fixed = new HashSet<BugInstance>();
m_common = new HashSet<BugInstance>();
m_new = new HashSet<BugInstance>();
public BugInstance[] getNew() { return m_new.toArray(new BugInstance[m_new.size()]); }
public int getNumNew() { return m_new.size(); }
+ public Run getEarlier() { return m_earlier; }
+ public Run getLater() { return m_later; }
+
+ public void dump(PrintWriter pw) {
+ pw.println("=========================");
+ pw.println(" NEW BUGS (" + m_new.size() + ")");
+ pw.println("-------------------------");
+ for (BugInstance bug : m_new) {
+ bug.dump(pw, 2);
+ }
+
+ pw.println("=========================");
+ pw.println(" FIXED BUGS (" + m_fixed.size() + ")");
+ pw.println("-------------------------");
+ for (BugInstance bug : m_fixed) {
+ bug.dump(pw, 2);
+ }
+
+ pw.println("=========================");
+ pw.println(" OLD BUGS (" + m_common.size() + ")");
+ pw.println("-------------------------");
+ for (BugInstance bug : m_common) {
+ bug.dump(pw, 2);
+ }
+ }
+
void computeDelta(Analysis before, Analysis after)
{
m_fixed.clear();
HashSet<BugInstance> beforeBugs = new HashSet<BugInstance>();
- beforeBugs.addAll(before.getBugCollection().getBugs());
+ if (null != before) {
+ beforeBugs.addAll(before.getBugCollection().getBugs());
+ }
for (BugInstance bug : after.getBugCollection().getBugs()) {
if (beforeBugs.contains(bug)) {
}
}
+ if (null == before) {
+ return;
+ }
+
for (BugInstance bug : before.getBugCollection().getBugs()) {
if (! m_common.contains(bug)) {
m_fixed.add(bug);