Program: 99172
Project: 99172
Buggy source:
static void doMining(Graph g,ArrayList<ArrayList<Integer>> sets){
  for (  ArrayList<Integer> W : sets) {
    counter.clear();
    for (    Integer v : W) {
      Node n=g.nodes.get(v);
      for (int i=0; i < n.edgeIds.size(); i++) {
        Integer eid=n.edgeIds.get(i);
        Object obj=counter.get(eid);
        if (obj == null) {
          counter.put(eid,new Integer(1));
        }
 else {
          int tmp=((Integer)obj).intValue() + 1;
          counter.put(eid,new Integer(tmp));
        }
      }
    }
    Trie T=new Trie();
    for (    Integer v : W) {
      ArrayList<Integer> L=new ArrayList<Integer>();
      Node n=g.nodes.get(v);
      for (int i=0; i < n.edgeIds.size(); i++) {
        Integer eid=n.edgeIds.get(i);
        if (counter.get(eid) > 1) {
          L.add(eid);
        }
      }
      Collections.sort(L,new MiningPhase.MyCountComparator());
      T.insert(L,v);
    }
    ArrayList<Pattern> P=new ArrayList<Pattern>();
    T.findPatterns(P);
    Collections.sort(P,new MiningPhase.MyPatternComparator());
    for (    Pattern p : P) {
      VirtualNode v=new VirtualNode(g.nodes.size() + 1);
      for (      Integer outlink : p.outlinkList) {
        v.edgeIds.add(outlink);
      }
      g.nodes.put(v.id,v);
      for (      Integer target : v.edgeIds) {
        for (        Integer source : p.vertexList) {
          Node n=g.nodes.get(source);
          for (int i=0; i < n.edgeIds.size(); i++) {
            Integer eid=n.edgeIds.get(i);
            if (eid == target) {
              n.edgeIds.remove(i);
              break;
            }
          }
        }
      }
      for (      Integer source : p.vertexList) {
        Node n=g.nodes.get(source);
        n.edgeIds.add(v.id);
      }
    }
  }
}

Fixed version (ground truth):
static void doMining(Graph g,ArrayList<ArrayList<Integer>> sets){
  for (  ArrayList<Integer> W : sets) {
    System.out.println("String_Node_Str" + W.size());
    counter.clear();
    for (    Integer v : W) {
      Node n=g.nodes.get(v);
      for (int i=0; i < n.edgeIds.size(); i++) {
        Integer eid=n.edgeIds.get(i);
        Integer targetID=g.edges.get(eid).getOtherNodeId(v);
        Object obj=counter.get(targetID);
        if (obj == null) {
          counter.put(targetID,new Integer(1));
        }
 else {
          int tmp=((Integer)obj).intValue() + 1;
          counter.put(targetID,new Integer(tmp));
        }
      }
    }
    Trie T=new Trie();
    for (    Integer v : W) {
      ArrayList<Integer> L=new ArrayList<Integer>();
      Node n=g.nodes.get(v);
      for (int i=0; i < n.edgeIds.size(); i++) {
        Integer eid=n.edgeIds.get(i);
        Integer targetID=g.edges.get(eid).getOtherNodeId(v);
        if (counter.get(targetID) > 1) {
          L.add(targetID);
        }
      }
      Collections.sort(L,new MiningPhase.MyCountComparator());
      T.insert(L,v);
    }
    ArrayList<Pattern> P=new ArrayList<Pattern>();
    T.findPatterns(P);
    Collections.sort(P,new MiningPhase.MyPatternComparator());
    while (P.size() > 0) {
      Pattern p=P.get(0);
      VirtualNode v=new VirtualNode(g.nodes.size() + 1);
      for (      Integer outlink : p.outlinkList) {
        Edge e=new Edge(v.id,outlink,g.edges.size() + 1);
        g.edges.put(e.id,e);
        v.edgeIds.add(e.id);
      }
      g.nodes.put(v.id,v);
      for (      Integer outlink : v.edgeIds) {
        Integer target=g.edges.get(outlink).getOtherNodeId(v.id);
        for (        Integer source : p.vertexList) {
          Node n=g.nodes.get(source);
          for (int i=0; i < n.edgeIds.size(); i++) {
            Integer eid=n.edgeIds.get(i);
            Integer targetID=g.edges.get(eid).getOtherNodeId(source);
            if (targetID == target) {
              n.edgeIds.remove(i);
              g.edges.remove(eid);
              break;
            }
          }
        }
      }
      for (      Integer source : p.vertexList) {
        Node n=g.nodes.get(source);
        Edge e=new Edge(source,v.id,g.edges.size() + 1);
        g.edges.put(e.id,e);
        n.edgeIds.add(e.id);
      }
      Pattern.recompute(P);
      Collections.sort(P,new MiningPhase.MyPatternComparator());
    }
  }
}