Program: 39612
Project: 39612
Buggy source:
private void perform(TransformationUtility utility,File transformedAppFolder,TransformationContextImpl transformationContext,String order) throws TransformationException {
  boolean isTO=utility instanceof TransformationOperation;
  PerformResult result=null;
  try {
    result=utility.perform(transformedAppFolder,transformationContext);
switch (result.getType()) {
case SKIPPED_CONDITION:
case SKIPPED_DEPENDENCY:
      if (isTO || logger.isDebugEnabled()) {
        logger.debug("String_Node_Str",order,result.getDetails());
      }
    break;
case EXECUTION_RESULT:
  if (isTO) {
    processOperationExecutionResult(utility,result,order,transformationContext);
  }
 else {
    TUExecutionResult executionResult=(TUExecutionResult)result.getExecutionResult();
    Object executionValue=executionResult.getValue();
    if (utility instanceof MultipleConditions) {
      Set<File> files=(Set<File>)executionValue;
      result=perform((MultipleConditions)utility,files,transformedAppFolder,transformationContext);
    }
 else     if (utility instanceof FilterFiles) {
      Set<File> files=(Set<File>)executionValue;
      result=perform((FilterFiles)utility,files,transformedAppFolder,transformationContext);
    }
    processUtilityExecutionResult(utility,result,transformationContext);
    if (utility instanceof TransformationUtilityLoop) {
      boolean iterate=executionValue instanceof Boolean && ((Boolean)executionValue).booleanValue();
      if (iterate) {
        TransformationUtilityLoop utilityLoop=(TransformationUtilityLoop)utility;
        String newOrder=String.format("String_Node_Str",order,utilityLoop.getNextIteration());
        logger.info("String_Node_Str");
        logger.info("String_Node_Str",newOrder,utilityLoop.getNextIteration(),utilityLoop.getName());
        perform(utilityLoop.run(),transformedAppFolder,transformationContext,newOrder + "String_Node_Str");
        perform(utilityLoop.iterate(),transformedAppFolder,transformationContext,order);
      }
    }
 else     if (utility instanceof TransformationUtilityParent) {
      perform((TransformationUtilityParent)utility,result,transformedAppFolder,transformationContext,order);
    }
 else     if (utility instanceof ManualInstruction) {
      transformationContext.registerManualInstruction((ManualInstructionRecord)executionValue);
    }
  }
break;
case ERROR:
processError(utility,result.getException(),order,transformationContext);
break;
default :
logger.error("String_Node_Str",order,utility.getName(),result.getType().name());
break;
}
}
 catch (TransformationUtilityException e) {
result=PerformResult.error(utility,e);
processError(utility,e,order,transformationContext);
}
 finally {
if (utility.isSaveResult()) {
transformationContext.putResult(utility.getName(),result);
}
}
}

Fixed version (ground truth):
private void perform(TransformationUtility utility,File transformedAppFolder,TransformationContextImpl transformationContext,String order) throws TransformationException {
  boolean isTO=utility instanceof TransformationOperation;
  PerformResult result=null;
  try {
    result=utility.perform(transformedAppFolder,transformationContext);
switch (result.getType()) {
case SKIPPED_CONDITION:
case SKIPPED_DEPENDENCY:
      if (isTO || logger.isDebugEnabled()) {
        logger.debug("String_Node_Str",order,result.getDetails());
      }
    break;
case EXECUTION_RESULT:
  if (isTO) {
    processOperationExecutionResult(utility,result,order,transformationContext);
  }
 else {
    TUExecutionResult executionResult=(TUExecutionResult)result.getExecutionResult();
    Object executionValue=executionResult.getValue();
    if (executionResult.getType().equals(TUExecutionResult.Type.ERROR)) {
      processUtilityExecutionResult(utility,result,transformationContext);
      break;
    }
    if (utility instanceof MultipleConditions) {
      Set<File> files=(Set<File>)executionValue;
      result=perform((MultipleConditions)utility,files,transformedAppFolder,transformationContext);
    }
 else     if (utility instanceof FilterFiles) {
      Set<File> files=(Set<File>)executionValue;
      result=perform((FilterFiles)utility,files,transformedAppFolder,transformationContext);
    }
    processUtilityExecutionResult(utility,result,transformationContext);
    if (utility instanceof TransformationUtilityLoop) {
      boolean iterate=executionValue instanceof Boolean && ((Boolean)executionValue).booleanValue();
      if (iterate) {
        TransformationUtilityLoop utilityLoop=(TransformationUtilityLoop)utility;
        String newOrder=String.format("String_Node_Str",order,utilityLoop.getNextIteration());
        logger.info("String_Node_Str");
        logger.info("String_Node_Str",newOrder,utilityLoop.getNextIteration(),utilityLoop.getName());
        perform(utilityLoop.run(),transformedAppFolder,transformationContext,newOrder + "String_Node_Str");
        perform(utilityLoop.iterate(),transformedAppFolder,transformationContext,order);
      }
    }
 else     if (utility instanceof TransformationUtilityParent) {
      perform((TransformationUtilityParent)utility,result,transformedAppFolder,transformationContext,order);
    }
 else     if (utility instanceof ManualInstruction) {
      transformationContext.registerManualInstruction((ManualInstructionRecord)executionValue);
    }
  }
break;
case ERROR:
processError(utility,result.getException(),order,transformationContext);
break;
default :
logger.error("String_Node_Str",order,utility.getName(),result.getType().name());
break;
}
}
 catch (TransformationUtilityException e) {
result=PerformResult.error(utility,e);
processError(utility,e,order,transformationContext);
}
 finally {
if (utility.isSaveResult()) {
transformationContext.putResult(utility.getName(),result);
}
}
}