Program: 123415
Project: 123415
Buggy source:
/** 
 * load project settings to no-opened process
 * @param elemParam
 * @param projectPaType
 */
public static void loadElementParameters(ParametersType processType,ParametersType projectPaType,EParameterName paramName){
  EList listParamType=projectPaType.getElementParameter();
  for (int j=0; j < listParamType.size(); j++) {
    ElementParameterType pType=(ElementParameterType)listParamType.get(j);
    EList processParameters=processType.getElementParameter();
    ElementParameterType processParam=null;
    for (int i=0; i < processParameters.size(); i++) {
      ElementParameterType paramType=(ElementParameterType)processParameters.get(i);
      if (paramType.getName().equals(pType.getName()) && paramType.getField() != null && paramType.getField().equals(pType.getField())) {
        processParam=paramType;
      }
 else       if (pType.getName().contains("String_Node_Str")) {
        StringTokenizer token=new StringTokenizer(pType.getName(),"String_Node_Str");
        String parentId=token.nextToken();
        String childId=token.nextToken();
        String[] split=paramType.getName().split("String_Node_Str");
        if (split.length != 2) {
          continue;
        }
        String complexName=paramName + "String_Node_Str" + childId;
        if (complexName.equals(paramType.getName())) {
          processParam=paramType;
        }
      }
      if (processParam != null) {
        break;
      }
    }
    if (processParam != null) {
      processParam.setValue(pType.getValue());
    }
  }
}

Fixed version (ground truth):
/** 
 * load project settings to no-opened process
 * @param elemParam
 * @param projectPaType
 */
public static void loadElementParameters(ParametersType processType,ParametersType projectPaType,EParameterName paramName){
  EList listParamType=projectPaType.getElementParameter();
  for (int j=0; j < listParamType.size(); j++) {
    ElementParameterType pType=(ElementParameterType)listParamType.get(j);
    EList processParameters=processType.getElementParameter();
    ElementParameterType processParam=null;
    for (int i=0; i < processParameters.size(); i++) {
      ElementParameterType paramType=(ElementParameterType)processParameters.get(i);
      if (paramType.getName().equals(pType.getName()) && paramType.getField() != null && paramType.getField().equals(pType.getField())) {
        processParam=paramType;
      }
 else       if (pType.getName().contains("String_Node_Str")) {
        StringTokenizer token=new StringTokenizer(pType.getName(),"String_Node_Str");
        String parentId=token.nextToken();
        String childId=token.nextToken();
        String[] split=paramType.getName().split("String_Node_Str");
        if (split.length != 2) {
          continue;
        }
        String complexName=paramName + "String_Node_Str" + childId;
        if (complexName.equals(paramType.getName())) {
          processParam=paramType;
        }
      }
      if (processParam != null) {
        break;
      }
    }
    if (processParam != null) {
      processParam.setValue(pType.getValue());
    }
 else {
      TalendFileFactory fileFact=TalendFileFactory.eINSTANCE;
      ElementParameterType processTypes=fileFact.createElementParameterType();
      processTypes.setName(pType.getName());
      processTypes.setField(pType.getField());
      processTypes.setValue(pType.getValue());
      boolean needAdd=true;
      Property property=PropertiesFactory.eINSTANCE.createProperty();
      property.setAuthor(((RepositoryContext)CorePlugin.getContext().getProperty(Context.REPOSITORY_CONTEXT_KEY)).getUser());
      property.setVersion(VersionUtils.DEFAULT_VERSION);
      property.setStatusCode("String_Node_Str");
      property.setId("String_Node_Str");
      property.setLabel(Messages.getString("String_Node_Str"));
      for (      IElementParameter currentParam : JobSettingsManager.getJobSettingsParameters(new org.talend.designer.core.ui.editor.process.Process(property))) {
        if (currentParam.getName().equals(pType.getName())) {
          if (currentParam.getValue() != null && currentParam.getValue().equals(pType.getValue())) {
            needAdd=false;
            break;
          }
        }
      }
      if (needAdd) {
        processType.getElementParameter().add(processTypes);
      }
    }
  }
}