Program: 119656
Project: 119656
Buggy source:
/** 
 * DOC YeXiaowei Comment method "findMoreLibraries".
 * @param neededLibraries
 * @param curParam
 */
public static void findMoreLibraries(final IProcess process,List<ModuleNeeded> modulesNeeded,IElementParameter curParam){
  Object value=curParam.getValue();
  String name=curParam.getName();
  if (name.equals("String_Node_Str")) {
    if (value != null && value instanceof List) {
      List list=(List)value;
      for (int i=0; i < list.size(); i++) {
        if (list.get(i) instanceof HashMap) {
          HashMap map=(HashMap)list.get(i);
          Object object=map.get("String_Node_Str");
          if (object != null && object instanceof String) {
            String driverName=(String)object;
            if (driverName != null && !"String_Node_Str".equals(driverName)) {
              boolean isContextMode=ContextParameterUtils.containContextVariables(driverName);
              if (isContextMode) {
                getModulesInTable(process,curParam,modulesNeeded);
              }
 else {
                ModuleNeeded module=new ModuleNeeded(null,driverName,null,true);
                modulesNeeded.add(module);
              }
            }
          }
        }
      }
    }
  }
 else   if (name.equals("String_Node_Str")) {
    String jdbcName=(String)value;
    if (jdbcName != null) {
      String jars=(jdbcName).replaceAll(TalendTextUtils.QUOTATION_MARK,"String_Node_Str").replaceAll(TalendTextUtils.SINGLE_QUOTE,"String_Node_Str");
      String separator="String_Node_Str";
      if (jars.contains(separator)) {
        for (        String jar : jars.split(separator)) {
          ModuleNeeded module=new ModuleNeeded(null,jar,null,true);
          modulesNeeded.add(module);
        }
      }
 else {
        ModuleNeeded module=new ModuleNeeded(null,jars,null,true);
        modulesNeeded.add(module);
      }
    }
  }
 else   if (name.equals("String_Node_Str")) {
    List<Map<String,Object>> tableValues=(List<Map<String,Object>>)value;
    Object[] listItemsValue=curParam.getListItemsValue();
    for (    Map<String,Object> line : tableValues) {
      Object libPath=line.get("String_Node_Str");
      if (libPath == null) {
        continue;
      }
      String text=null;
      if (libPath instanceof String && !StringUtils.isEmpty((String)libPath)) {
        text=(String)libPath;
      }
 else       if (libPath instanceof Integer && listItemsValue != null) {
        int index=((Integer)libPath).intValue();
        if (index > -1 && index < listItemsValue.length && listItemsValue[index] != null) {
          if (listItemsValue[index] instanceof IElementParameter) {
            text=(String)((IElementParameter)listItemsValue[index]).getValue();
          }
 else {
            text=listItemsValue[index].toString();
          }
        }
      }
      if (text != null) {
        boolean isContextMode=ContextParameterUtils.containContextVariables(text);
        if (isContextMode) {
          List<IContext> listContext=process.getContextManager().getListContext();
          for (          IContext context : listContext) {
            List<IContextParameter> contextParameterList=context.getContextParameterList();
            for (            IContextParameter contextPara : contextParameterList) {
              String var=ContextParameterUtils.getVariableFromCode(text);
              if (var.equals(contextPara.getName())) {
                String values=context.getContextParameter(contextPara.getName()).getValue();
                values=values.substring(values.lastIndexOf("String_Node_Str") + 1);
                ModuleNeeded module=new ModuleNeeded(null,values,null,true);
                modulesNeeded.add(module);
              }
            }
          }
        }
 else {
          ModuleNeeded module=new ModuleNeeded(null,TalendTextUtils.removeQuotes(text),null,true);
          modulesNeeded.add(module);
        }
      }
    }
  }
 else   if (name.equals(EParameterName.HADOOP_CUSTOM_JARS.getDisplayName())) {
    String jarsName=(String)value;
    if (StringUtils.isNotEmpty(jarsName)) {
      String jars=jarsName.replaceAll(TalendTextUtils.QUOTATION_MARK,"String_Node_Str").replaceAll(TalendTextUtils.SINGLE_QUOTE,"String_Node_Str");
      String separator="String_Node_Str";
      for (      String jar : jars.split(separator)) {
        ModuleNeeded module=new ModuleNeeded(null,jar,null,true);
        modulesNeeded.add(module);
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * DOC YeXiaowei Comment method "findMoreLibraries".
 * @param neededLibraries
 * @param curParam
 */
public static void findMoreLibraries(final IProcess process,List<ModuleNeeded> modulesNeeded,IElementParameter curParam){
  Object value=curParam.getValue();
  String name=curParam.getName();
  if (name.equals("String_Node_Str")) {
    if (value != null && value instanceof List) {
      List list=(List)value;
      for (int i=0; i < list.size(); i++) {
        if (list.get(i) instanceof HashMap) {
          HashMap map=(HashMap)list.get(i);
          Object object=map.get("String_Node_Str");
          if (object != null && object instanceof String) {
            String driverName=(String)object;
            if (driverName != null && !"String_Node_Str".equals(driverName)) {
              boolean isContextMode=ContextParameterUtils.containContextVariables(driverName);
              if (isContextMode) {
                getModulesInTable(process,curParam,modulesNeeded);
              }
 else {
                ModuleNeeded module=new ModuleNeeded(null,driverName,null,true);
                modulesNeeded.add(module);
              }
            }
          }
        }
      }
    }
  }
 else   if (name.equals("String_Node_Str")) {
    String jdbcName=(String)value;
    if (jdbcName != null) {
      String jars=(jdbcName).replaceAll(TalendTextUtils.QUOTATION_MARK,"String_Node_Str").replaceAll(TalendTextUtils.SINGLE_QUOTE,"String_Node_Str");
      String separator="String_Node_Str";
      if (jars.contains(separator)) {
        for (        String jar : jars.split(separator)) {
          ModuleNeeded module=new ModuleNeeded(null,jar,null,true);
          modulesNeeded.add(module);
        }
      }
 else {
        ModuleNeeded module=new ModuleNeeded(null,jars,null,true);
        modulesNeeded.add(module);
      }
    }
  }
 else   if (name.equals("String_Node_Str")) {
    List<Map<String,Object>> tableValues=(List<Map<String,Object>>)value;
    Object[] listItemsValue=curParam.getListItemsValue();
    for (    Map<String,Object> line : tableValues) {
      Object libPath=line.get("String_Node_Str");
      if (libPath == null) {
        continue;
      }
      String text=null;
      if (libPath instanceof String && !StringUtils.isEmpty((String)libPath)) {
        text=(String)libPath;
      }
 else       if (libPath instanceof Integer && listItemsValue != null) {
        int index=((Integer)libPath).intValue();
        if (index > -1 && index < listItemsValue.length && listItemsValue[index] != null) {
          if (listItemsValue[index] instanceof IElementParameter) {
            text=(String)((IElementParameter)listItemsValue[index]).getValue();
          }
 else {
            text=listItemsValue[index].toString();
          }
        }
      }
      if (text != null) {
        boolean isContextMode=ContextParameterUtils.containContextVariables(text);
        if (isContextMode) {
          List<IContext> listContext=process.getContextManager().getListContext();
          String var=ContextParameterUtils.getVariableFromCode(text);
          for (          IContext context : listContext) {
            List<IContextParameter> contextParameterList=context.getContextParameterList();
            for (            IContextParameter contextPara : contextParameterList) {
              String paramName=contextPara.getName();
              if (var.equals(paramName)) {
                ModuleNeeded module=getModuleNeededForContextParam(contextPara);
                if (module != null && !modulesNeeded.contains(module)) {
                  modulesNeeded.add(module);
                }
              }
            }
          }
        }
 else {
          ModuleNeeded module=new ModuleNeeded(null,TalendTextUtils.removeQuotes(text),null,true);
          modulesNeeded.add(module);
        }
      }
    }
  }
 else   if (name.equals(EParameterName.HADOOP_CUSTOM_JARS.getDisplayName())) {
    String jarsName=(String)value;
    if (StringUtils.isNotEmpty(jarsName)) {
      String jars=jarsName.replaceAll(TalendTextUtils.QUOTATION_MARK,"String_Node_Str").replaceAll(TalendTextUtils.SINGLE_QUOTE,"String_Node_Str");
      String separator="String_Node_Str";
      for (      String jar : jars.split(separator)) {
        ModuleNeeded module=new ModuleNeeded(null,jar,null,true);
        modulesNeeded.add(module);
      }
    }
  }
}