Program: 89970
Project: 89970
Buggy source:
/** 
 * Gets a list of settings. First it is checked, if the key is registered as a System property. If yes, registered value is returned in a list of length 1. If no, the data loaded from the settings xml files are examined.  If value is there, it is returned in a list. If not, the default settings from classpath are examined. If values for this setting are found here, they are returned. Otherwise, an UnknownId exception is thrown. Note that the values will not be concatenated, the first place with a match will define the entire list. Furthemore the list cannot be empty.
 * @param key name of the setting to retrieve
 * @return the retrieved values (as a non-empty String array)
 * @throws ArgumentNotValid if key is null or the empty string
 * @throws UnknownID        if no setting loaded matches key
 */
public static String[] getAll(String key) throws UnknownID, ArgumentNotValid {
  ArgumentNotValid.checkNotNullOrEmpty(key,"String_Node_Str");
  log.debug("String_Node_Str" + key);
  String val=System.getProperty(key);
  if (val != null) {
    log.debug("String_Node_Str" + val);
    return new String[]{val};
  }
  if (fileSettingsXmlList.isEmpty()) {
    log.warn("String_Node_Str" + "String_Node_Str");
  }
  for (  SimpleXml settingsXml : getFileSettingsXmlList()) {
    List<String> result=settingsXml.getList(key);
    if (result.size() == 0) {
      continue;
    }
    log.debug("String_Node_Str" + StringUtils.conjoin("String_Node_Str",result));
    return result.toArray(new String[result.size()]);
  }
  for (  SimpleXml settingsXml : getDefaultClasspathSettingsXmlList()) {
    List<String> result=settingsXml.getList(key);
    if (result.size() == 0) {
      continue;
    }
    log.debug("String_Node_Str" + StringUtils.conjoin("String_Node_Str",result));
    return result.toArray(new String[result.size()]);
  }
  throw new UnknownID("String_Node_Str" + key + "String_Node_Str");
}

Fixed version (ground truth):
/** 
 * Gets a list of settings. First it is checked, if the key is registered as a System property. If yes, registered value is returned in a list of length 1. If no, the data loaded from the settings xml files are examined.  If value is there, it is returned in a list. If not, the default settings from classpath are examined. If values for this setting are found here, they are returned. Otherwise, an UnknownId exception is thrown. Note that the values will not be concatenated, the first place with a match will define the entire list. Furthemore the list cannot be empty.
 * @param key name of the setting to retrieve
 * @return the retrieved values (as a non-empty String array)
 * @throws ArgumentNotValid if key is null or the empty string
 * @throws UnknownID        if no setting loaded matches key
 */
public static String[] getAll(String key) throws UnknownID, ArgumentNotValid {
  ArgumentNotValid.checkNotNullOrEmpty(key,"String_Node_Str");
  log.debug("String_Node_Str" + key);
  String val=System.getProperty(key);
  if (val != null) {
    log.debug("String_Node_Str" + val);
    return new String[]{val};
  }
  if (fileSettingsXmlList.isEmpty()) {
    log.warn("String_Node_Str" + "String_Node_Str");
  }
synchronized (fileSettingsXmlList) {
    for (    SimpleXml settingsXml : fileSettingsXmlList) {
      List<String> result=settingsXml.getList(key);
      if (result.size() == 0) {
        continue;
      }
      log.debug("String_Node_Str" + StringUtils.conjoin("String_Node_Str",result));
      return result.toArray(new String[result.size()]);
    }
  }
synchronized (defaultClasspathSettingsXmlList) {
    for (    SimpleXml settingsXml : defaultClasspathSettingsXmlList) {
      List<String> result=settingsXml.getList(key);
      if (result.size() == 0) {
        continue;
      }
      log.debug("String_Node_Str" + StringUtils.conjoin("String_Node_Str",result));
      return result.toArray(new String[result.size()]);
    }
  }
  throw new UnknownID("String_Node_Str" + key + "String_Node_Str");
}