Program: 64520
Project: 64520
Buggy source:
@Override public Ranking<S> computeRanking(List<S> solutionSet){
  List<S> population=solutionSet;
  int[] dominateMe=new int[population.size()];
  List<List<Integer>> iDominate=new ArrayList<>(population.size());
  List<List<Integer>> front=new ArrayList<>(population.size() + 1);
  for (int i=0; i < front.size(); i++) {
    front.set(i,new LinkedList<Integer>());
  }
  for (int p=0; p < population.size(); p++) {
    iDominate.set(p,new LinkedList<Integer>());
    dominateMe[p]=0;
  }
  int flagDominate;
  for (int p=0; p < (population.size() - 1); p++) {
    for (int q=p + 1; q < population.size(); q++) {
      flagDominate=CONSTRAINT_VIOLATION_COMPARATOR.compare(solutionSet.get(p),solutionSet.get(q));
      if (flagDominate == 0) {
        flagDominate=DOMINANCE_COMPARATOR.compare(solutionSet.get(p),solutionSet.get(q));
      }
      if (flagDominate == -1) {
        iDominate.get(p).add(q);
        dominateMe[q]++;
      }
 else       if (flagDominate == 1) {
        iDominate.get(q).add(p);
        dominateMe[p]++;
      }
    }
  }
  for (int i=0; i < population.size(); i++) {
    if (dominateMe[i] == 0) {
      front.get(0).add(i);
      solutionSet.get(i).setAttribute(getAttributeID(),0);
    }
  }
  int i=0;
  Iterator<Integer> it1, it2;
  while (front.get(i).size() != 0) {
    i++;
    it1=front.get(i - 1).iterator();
    while (it1.hasNext()) {
      it2=iDominate.get(it1.next()).iterator();
      while (it2.hasNext()) {
        int index=it2.next();
        dominateMe[index]--;
        if (dominateMe[index] == 0) {
          front.get(i).add(index);
          solutionSet.get(index).setAttribute(getAttributeID(),i);
        }
      }
    }
  }
  rankedSubpopulations=new ArrayList<>();
  for (int j=0; j < i; j++) {
    rankedSubpopulations.add(j,new ArrayList<S>(front.get(j).size()));
    it1=front.get(j).iterator();
    while (it1.hasNext()) {
      rankedSubpopulations.get(j).add(solutionSet.get(it1.next()));
    }
  }
  return this;
}

Fixed version (ground truth):
@Override public Ranking<S> computeRanking(List<S> solutionSet){
  List<S> population=solutionSet;
  int[] dominateMe=new int[population.size()];
  List<Integer>[] iDominate=new List[population.size()];
  List<Integer>[] front=new List[population.size() + 1];
  for (int i=0; i < front.length; i++) {
    front[i]=new LinkedList<>();
  }
  for (int p=0; p < population.size(); p++) {
    iDominate[p]=new LinkedList<>();
    dominateMe[p]=0;
  }
  int flagDominate;
  for (int p=0; p < (population.size() - 1); p++) {
    for (int q=p + 1; q < population.size(); q++) {
      flagDominate=CONSTRAINT_VIOLATION_COMPARATOR.compare(solutionSet.get(p),solutionSet.get(q));
      if (flagDominate == 0) {
        flagDominate=DOMINANCE_COMPARATOR.compare(solutionSet.get(p),solutionSet.get(q));
      }
      if (flagDominate == -1) {
        iDominate[p].add(q);
        dominateMe[q]++;
      }
 else       if (flagDominate == 1) {
        iDominate[q].add(p);
        dominateMe[p]++;
      }
    }
  }
  for (int i=0; i < population.size(); i++) {
    if (dominateMe[i] == 0) {
      front[0].add(i);
      solutionSet.get(i).setAttribute(getAttributeID(),0);
    }
  }
  int i=0;
  Iterator<Integer> it1, it2;
  while (front[i].size() != 0) {
    i++;
    it1=front[i - 1].iterator();
    while (it1.hasNext()) {
      it2=iDominate[it1.next()].iterator();
      while (it2.hasNext()) {
        int index=it2.next();
        dominateMe[index]--;
        if (dominateMe[index] == 0) {
          front[i].add(index);
          solutionSet.get(index).setAttribute(getAttributeID(),i);
        }
      }
    }
  }
  rankedSubpopulations=new ArrayList<>();
  for (int j=0; j < i; j++) {
    rankedSubpopulations.add(j,new ArrayList<S>(front[j].size()));
    it1=front[j].iterator();
    while (it1.hasNext()) {
      rankedSubpopulations.get(j).add(solutionSet.get(it1.next()));
    }
  }
  return this;
}