Program: 73593
Project: 73593
Buggy source:
/** 
 * Construct the AttributeSearcher according to the input search criteria.
 * @param searchCriteria The search criteria that input by the user.
 */
public AttributeSearcher(SearchCriteria searchCriteria){
  if (searchCriteria.getAttributes() != null && searchCriteria.getAttributes().size() > 0) {
    HashMap<String,PTDBGenericAttribute> attributesMap=new HashMap<String,PTDBGenericAttribute>();
    for (    Attribute originalAttribute : searchCriteria.getAttributes()) {
      if (!attributesMap.containsKey(originalAttribute.getName())) {
        PTDBGenericAttribute newAttribute=new PTDBGenericAttribute(originalAttribute.getName());
        newAttribute.addValue(((Variable)originalAttribute).getExpression());
        if (originalAttribute instanceof PTDBSearchAttribute) {
          if (!((PTDBSearchAttribute)originalAttribute).isGenericAttribute()) {
            newAttribute.setClassName(originalAttribute.getClassName());
          }
 else {
            newAttribute.setClassName(((PTDBSearchAttribute)originalAttribute).getGenericClassName());
          }
        }
 else {
          newAttribute.setClassName(originalAttribute.getClassName());
        }
        attributesMap.put(newAttribute.getAttributeName(),newAttribute);
      }
 else {
        PTDBGenericAttribute attribute=attributesMap.get(originalAttribute.getName());
        attribute.addValue(((Variable)originalAttribute).getValueAsString());
      }
    }
    ArrayList<PTDBGenericAttribute> attributeList=new ArrayList<PTDBGenericAttribute>(attributesMap.values());
    _attributesCriteria=attributeList;
  }
}

Fixed version (ground truth):
/** 
 * Construct the AttributeSearcher according to the input search criteria.
 * @param searchCriteria The search criteria that input by the user.
 */
public AttributeSearcher(SearchCriteria searchCriteria){
  if (searchCriteria.getAttributes() != null && searchCriteria.getAttributes().size() > 0) {
    HashMap<String,PTDBGenericAttribute> attributesMap=new HashMap<String,PTDBGenericAttribute>();
    for (    Attribute originalAttribute : searchCriteria.getAttributes()) {
      if (!attributesMap.containsKey(originalAttribute.getName())) {
        PTDBGenericAttribute newAttribute=new PTDBGenericAttribute(originalAttribute.getName());
        newAttribute.addValue(((Variable)originalAttribute).getExpression());
        if (originalAttribute instanceof PTDBSearchAttribute) {
          if (!((PTDBSearchAttribute)originalAttribute).isGenericAttribute()) {
            newAttribute.setClassName(originalAttribute.getClassName());
          }
 else {
            newAttribute.setClassName(((PTDBSearchAttribute)originalAttribute).getGenericClassName());
          }
        }
 else {
          newAttribute.setClassName(originalAttribute.getClassName());
        }
        attributesMap.put(newAttribute.getAttributeName(),newAttribute);
      }
 else {
        PTDBGenericAttribute attribute=attributesMap.get(originalAttribute.getName());
        attribute.addValue(((Variable)originalAttribute).getExpression());
      }
    }
    ArrayList<PTDBGenericAttribute> attributeList=new ArrayList<PTDBGenericAttribute>(attributesMap.values());
    _attributesCriteria=attributeList;
  }
}