Program: 35396
Project: 35396
Buggy source:
private void sortContacts(SortInfo sortInfo){
  if (sortInfo.getSortField() != null) {
    final String sortField=sortInfo.getSortField();
    if (sortField != null) {
      Collections.sort(allContacts,sortInfo.getSortDir().comparator(new Comparator<DashboardContact>(){
        public int compare(        DashboardContact p1,        DashboardContact p2){
          if (sortField.equals(ContactDTO.TYPE)) {
            return compareNullableStrings(ContactModelType.getName(p1.getContact().getType()),ContactModelType.getName(p2.getContact().getType()));
          }
          if (sortField.equals(ContactDTO.NAME)) {
            return compareNullableStrings(p1.getContact().getName(),p2.getContact().getName());
          }
          if (sortField.equals(ContactDTO.FIRSTNAME)) {
            return compareNullableStrings(p1.getContact().getFirstname(),p2.getContact().getFirstname());
          }
          if (sortField.equals(ContactHistory.FORMATTED_CHANGE_TYPE)) {
            return compareNullableStrings(p1.getLastChange().getFormattedChangeType(),p2.getLastChange().getFormattedChangeType());
          }
          if (sortField.equals(ContactHistory.SUBJECT)) {
            return compareNullableStrings(p1.getLastChange().getSubject(),p2.getLastChange().getSubject());
          }
          if (sortField.equals(ContactHistory.FORMATTED_VALUE)) {
            return compareNullableStrings(p1.getLastChange().getFormattedValue(),p2.getLastChange().getFormattedValue());
          }
          if (sortField.equals(ContactDTO.EMAIL)) {
            return compareNullableStrings(p1.getContact().getEmail(),p2.getContact().getEmail());
          }
          if (sortField.equals(ContactDTO.ID)) {
            return compareNullableStrings(String.valueOf(p1.getContact().getId()),String.valueOf(p2.getContact().getId()));
          }
          if (sortField.equals(ContactDTO.PARENT)) {
            ContactDTO org1=p1.getContact().getParent();
            ContactDTO org2=p2.getContact().getParent();
            String nom1=org1 == null ? "String_Node_Str" : org1.getOrganizationName();
            String nom2=org2 == null ? "String_Node_Str" : org2.getOrganizationName();
            return compareNullableStrings(nom1,nom2);
          }
          if (sortField.equals(ContactDTO.ROOT)) {
            ContactDTO org1=p1.getContact().getRoot();
            ContactDTO org2=p2.getContact().getRoot();
            String nom1=org1 == null ? "String_Node_Str" : org1.getOrganizationName();
            String nom2=org2 == null ? "String_Node_Str" : org2.getOrganizationName();
            return compareNullableStrings(nom1,nom2);
          }
          if (sortField.equals(ContactHistory.UPDATED_AT)) {
            return compareNullableDates(p1.getLastChange().getUpdatedAt(),p2.getLastChange().getUpdatedAt());
          }
          if (sortField.equals(ContactHistory.COMMENT)) {
            return compareNullableStrings(p1.getLastChange().getComment(),p2.getLastChange().getComment());
          }
          return 0;
        }
      }
));
    }
  }
}

Fixed version (ground truth):
private void sortContacts(SortInfo sortInfo){
  if (sortInfo.getSortField() != null) {
    final String sortField=sortInfo.getSortField();
    if (sortField != null) {
      Collections.sort(allContacts,sortInfo.getSortDir().comparator(new Comparator<DashboardContact>(){
        public int compare(        DashboardContact p1,        DashboardContact p2){
          if (sortField.equals(ContactDTO.TYPE)) {
            return compareNullableStrings(ContactModelType.getName(p1.getContact().getType()),ContactModelType.getName(p2.getContact().getType()));
          }
          if (sortField.equals(ContactDTO.NAME)) {
            return compareNullableStrings(p1.getContact().getName(),p2.getContact().getName());
          }
          if (sortField.equals(ContactDTO.FIRSTNAME)) {
            return compareNullableStrings(p1.getContact().getFirstname(),p2.getContact().getFirstname());
          }
          if (sortField.equals(ContactHistory.FORMATTED_CHANGE_TYPE)) {
            return compareNullableStrings(p1.getLastChange().getFormattedChangeType(),p2.getLastChange().getFormattedChangeType());
          }
          if (sortField.equals(ContactHistory.SUBJECT)) {
            return compareNullableStrings(p1.getLastChange().getSubject(),p2.getLastChange().getSubject());
          }
          if (sortField.equals(ContactHistory.FORMATTED_VALUE)) {
            return compareNullableStrings(p1.getLastChange().getFormattedValue(),p2.getLastChange().getFormattedValue());
          }
          if (sortField.equals(ContactDTO.EMAIL)) {
            return compareNullableStrings(p1.getContact().getEmail(),p2.getContact().getEmail());
          }
          if (sortField.equals(ContactDTO.ID)) {
            return compareNullableStrings(String.valueOf(p1.getContact().getId()),String.valueOf(p2.getContact().getId()));
          }
          if (sortField.equals(ContactDTO.PARENT)) {
            ContactDTO org1=p1.getContact().getParent();
            ContactDTO org2=p2.getContact().getParent();
            String nom1=org1 == null ? "String_Node_Str" : org1.getOrganizationName();
            String nom2=org2 == null ? "String_Node_Str" : org2.getOrganizationName();
            return compareNullableStrings(nom1,nom2);
          }
          if (sortField.equals(ContactDTO.ROOT)) {
            ContactDTO org1=p1.getContact().getRoot();
            ContactDTO org2=p2.getContact().getRoot();
            String nom1=org1 == null ? "String_Node_Str" : org1.getOrganizationName();
            String nom2=org2 == null ? "String_Node_Str" : org2.getOrganizationName();
            return compareNullableStrings(nom1,nom2);
          }
          if (sortField.equals(ContactHistory.UPDATED_AT)) {
            Date d1=p1.getLastChange() != null ? p1.getLastChange().getUpdatedAt() : null;
            Date d2=p2.getLastChange() != null ? p2.getLastChange().getUpdatedAt() : null;
            return compareNullableDates(d1,d2);
          }
          if (sortField.equals(ContactHistory.COMMENT)) {
            return compareNullableStrings(p1.getLastChange().getComment(),p2.getLastChange().getComment());
          }
          return 0;
        }
      }
));
    }
  }
}