Program: 141218
Project: 141218
Buggy source:
/** 
 * Add a step to the analysis
 * @param stepId id of the step
 * @param stepName name of the step to add
 * @param inputs where find step inputs
 * @param parameters parameters of the step
 * @param skipStep true if the step must be skip
 * @param discardOutput true if the output of the step can be removed
 * @throws EoulsanException if an error occurs while adding the step
 */
void addStep(final String stepId,final String stepName,final Map<String,String> inputs,final Set<Parameter> parameters,final boolean skipStep,final boolean discardOutput) throws EoulsanException {
  if (stepName == null)   throw new EoulsanException("String_Node_Str");
  final String stepNameLower=stepName.toLowerCase().trim();
  if ("String_Node_Str".equals(stepNameLower))   throw new EoulsanException("String_Node_Str");
  final String stepIdLower;
  if (stepId == null || "String_Node_Str".equals(stepId.trim()))   stepIdLower=stepNameLower;
 else   stepIdLower=stepId.toLowerCase().trim();
  if ("String_Node_Str".equals(stepIdLower))   throw new EoulsanException("String_Node_Str");
  if (this.stepParameters.containsKey(stepIdLower) || StepType.getAllDefaultStepId().contains(stepIdLower))   throw new EoulsanException("String_Node_Str" + stepIdLower);
  if (parameters == null)   throw new EoulsanException("String_Node_Str");
  if (inputs == null)   throw new EoulsanException("String_Node_Str");
  Map<DataFormat,String> inputsMap=Maps.newHashMap();
  DataFormatRegistry registry=DataFormatRegistry.getInstance();
  for (  Map.Entry<String,String> e : inputs.entrySet()) {
    final DataFormat inputFormat=registry.getDataFormatFromName(e.getKey());
    final String inputStepId=e.getValue().toLowerCase().trim();
    if (e.getValue() == null)     throw new EoulsanException("String_Node_Str" + inputFormat + "String_Node_Str"+ stepId+ "String_Node_Str");
    if (inputFormat == null)     throw new EoulsanException("String_Node_Str" + stepId + "String_Node_Str"+ inputFormat);
    if (!StepType.DESIGN_STEP.getDefaultStepId().equals(inputStepId) && !this.stepIdNames.containsKey(inputStepId))     throw new EoulsanException("String_Node_Str" + inputFormat + "String_Node_Str"+ stepId+ "String_Node_Str");
    inputsMap.put(inputFormat,inputStepId);
  }
  this.stepIdList.add(stepIdLower);
  this.stepIdNames.put(stepIdLower,stepNameLower);
  this.stepInputs.put(stepIdLower,inputsMap);
  this.stepParameters.put(stepNameLower,parameters);
  this.stepSkiped.put(stepIdLower,skipStep);
  this.stepDiscardOutput.put(stepIdLower,discardOutput);
}

Fixed version (ground truth):
/** 
 * Add a step to the analysis
 * @param stepId id of the step
 * @param stepName name of the step to add
 * @param inputs where find step inputs
 * @param parameters parameters of the step
 * @param skipStep true if the step must be skip
 * @param discardOutput true if the output of the step can be removed
 * @throws EoulsanException if an error occurs while adding the step
 */
void addStep(final String stepId,final String stepName,final Map<String,String> inputs,final Set<Parameter> parameters,final boolean skipStep,final boolean discardOutput) throws EoulsanException {
  if (stepName == null)   throw new EoulsanException("String_Node_Str");
  final String stepNameLower=stepName.toLowerCase().trim();
  if ("String_Node_Str".equals(stepNameLower))   throw new EoulsanException("String_Node_Str");
  final String stepIdLower;
  if (stepId == null || "String_Node_Str".equals(stepId.trim()))   stepIdLower=stepNameLower;
 else   stepIdLower=stepId.toLowerCase().trim();
  if ("String_Node_Str".equals(stepIdLower))   throw new EoulsanException("String_Node_Str");
  if (this.stepParameters.containsKey(stepIdLower) || StepType.getAllDefaultStepId().contains(stepIdLower))   throw new EoulsanException("String_Node_Str" + stepIdLower);
  if (parameters == null)   throw new EoulsanException("String_Node_Str");
  if (inputs == null)   throw new EoulsanException("String_Node_Str");
  Map<DataFormat,String> inputsMap=Maps.newHashMap();
  DataFormatRegistry registry=DataFormatRegistry.getInstance();
  for (  Map.Entry<String,String> e : inputs.entrySet()) {
    final DataFormat inputFormat=registry.getDataFormatFromName(e.getKey());
    final String inputStepId=e.getValue().toLowerCase().trim();
    if (e.getValue() == null)     throw new EoulsanException("String_Node_Str" + inputFormat + "String_Node_Str"+ stepId+ "String_Node_Str");
    if (inputFormat == null)     throw new EoulsanException("String_Node_Str" + stepId + "String_Node_Str"+ e.getKey());
    if (!StepType.DESIGN_STEP.getDefaultStepId().equals(inputStepId) && !this.stepIdNames.containsKey(inputStepId))     throw new EoulsanException("String_Node_Str" + inputFormat + "String_Node_Str"+ stepId+ "String_Node_Str");
    inputsMap.put(inputFormat,inputStepId);
  }
  this.stepIdList.add(stepIdLower);
  this.stepIdNames.put(stepIdLower,stepNameLower);
  this.stepInputs.put(stepIdLower,inputsMap);
  this.stepParameters.put(stepNameLower,parameters);
  this.stepSkiped.put(stepIdLower,skipStep);
  this.stepDiscardOutput.put(stepIdLower,discardOutput);
}