Program: 16940
Project: 16940
Buggy source:
/** 
 * a simple matching approach that tries to do a 1:1 mapping between SEQRES and ATOM records returns true if this simple matching approach worked fine
 * @param seqRes
 * @param atomList
 * @return
 */
public boolean trySimpleMatch(List<Group> seqResGroups,List<Group> atmResGroups){
  @SuppressWarnings("String_Node_Str") List<Group> newSeqResGroups=(ArrayList<Group>)((ArrayList<Group>)seqResGroups).clone();
  boolean startAt1=true;
  for (int atomResPos=0; atomResPos < atmResGroups.size(); atomResPos++) {
    Group atomResGroup=atmResGroups.get(atomResPos);
    String threeLetterCode=atomResGroup.getPDBName();
    if (excludeTypes.contains(threeLetterCode)) {
      continue;
    }
    ResidueNumber atomResNum=atomResGroup.getResidueNumber();
    int seqResPos=atomResNum.getSeqNum();
    if (seqResPos < 0) {
      if (DEBUG)       System.err.println("String_Node_Str");
      return false;
    }
    if (seqResPos == 0) {
      Group seqResGroup=seqResGroups.get(0);
      if (seqResGroup.getPDBName().equals(atomResGroup.getPDBName())) {
        startAt1=false;
      }
 else {
        if (DEBUG) {
          System.err.println("String_Node_Str" + seqResGroup.getPDBName() + "String_Node_Str"+ atomResGroup.getPDBName()+ "String_Node_Str");
        }
        return false;
      }
    }
    if (startAt1)     seqResPos--;
    if (startAt1 && seqResPos >= seqResGroups.size()) {
      if (atomResGroup instanceof AminoAcid) {
        if (DEBUG)         System.err.println("String_Node_Str" + seqResPos + "String_Node_Str"+ seqResGroups.size()+ "String_Node_Str"+ atomResGroup);
        return false;
      }
 else       if (atomResGroup instanceof NucleotideImpl) {
        if (DEBUG)         System.err.println("String_Node_Str" + seqResPos + "String_Node_Str"+ seqResGroups.size()+ "String_Node_Str"+ atomResGroup);
        return false;
      }
 else {
        continue;
      }
    }
    if (seqResPos >= seqResGroups.size()) {
      if (DEBUG)       System.err.println("String_Node_Str" + seqResPos);
      if (atomResGroup instanceof AminoAcid)       return false;
 else       continue;
    }
    Group seqResGroup=seqResGroups.get(seqResPos);
    if (!seqResGroup.getPDBName().trim().equals(atomResGroup.getPDBName().trim())) {
      if (DEBUG)       System.err.println("String_Node_Str" + seqResPos + "String_Node_Str"+ atomResGroup+ "String_Node_Str"+ seqResGroup);
      return false;
    }
    if (DEBUG)     System.err.println("String_Node_Str" + seqResPos + "String_Node_Str"+ atomResGroup);
    newSeqResGroups.set(seqResPos,atomResGroup);
  }
  seqResGroups=newSeqResGroups;
  return true;
}

Fixed version (ground truth):
/** 
 * a simple matching approach that tries to do a 1:1 mapping between SEQRES and ATOM records returns true if this simple matching approach worked fine
 * @param seqRes
 * @param atomList
 * @return
 */
public List<Group> trySimpleMatch(List<Group> seqResGroups,List<Group> atmResGroups){
  @SuppressWarnings("String_Node_Str") List<Group> newSeqResGroups=(ArrayList<Group>)((ArrayList<Group>)seqResGroups).clone();
  boolean startAt1=true;
  for (int atomResPos=0; atomResPos < atmResGroups.size(); atomResPos++) {
    Group atomResGroup=atmResGroups.get(atomResPos);
    String threeLetterCode=atomResGroup.getPDBName();
    if (excludeTypes.contains(threeLetterCode)) {
      continue;
    }
    ResidueNumber atomResNum=atomResGroup.getResidueNumber();
    int seqResPos=atomResNum.getSeqNum();
    if (seqResPos < 0) {
      if (DEBUG)       System.err.println("String_Node_Str");
      return null;
    }
    if (seqResPos == 0) {
      Group seqResGroup=seqResGroups.get(0);
      if (seqResGroup.getPDBName().equals(atomResGroup.getPDBName())) {
        startAt1=false;
      }
 else {
        if (DEBUG) {
          System.err.println("String_Node_Str" + seqResGroup.getPDBName() + "String_Node_Str"+ atomResGroup.getPDBName()+ "String_Node_Str");
        }
        return null;
      }
    }
    if (startAt1)     seqResPos--;
    if (startAt1 && seqResPos >= seqResGroups.size()) {
      if (atomResGroup instanceof AminoAcid) {
        if (DEBUG)         System.err.println("String_Node_Str" + seqResPos + "String_Node_Str"+ seqResGroups.size()+ "String_Node_Str"+ atomResGroup);
        return null;
      }
 else       if (atomResGroup instanceof NucleotideImpl) {
        if (DEBUG)         System.err.println("String_Node_Str" + seqResPos + "String_Node_Str"+ seqResGroups.size()+ "String_Node_Str"+ atomResGroup);
        return null;
      }
 else {
        continue;
      }
    }
    if (seqResPos >= seqResGroups.size()) {
      if (DEBUG)       System.err.println("String_Node_Str" + seqResPos);
      if (atomResGroup instanceof AminoAcid)       return null;
 else       continue;
    }
    Group seqResGroup=seqResGroups.get(seqResPos);
    if (!seqResGroup.getPDBName().trim().equals(atomResGroup.getPDBName().trim())) {
      if (DEBUG)       System.err.println("String_Node_Str" + seqResPos + "String_Node_Str"+ atomResGroup+ "String_Node_Str"+ seqResGroup);
      return null;
    }
    if (DEBUG)     System.err.println("String_Node_Str" + seqResPos + "String_Node_Str"+ atomResGroup);
    newSeqResGroups.set(seqResPos,atomResGroup);
  }
  if (DEBUG) {
  }
  return newSeqResGroups;
}