Program: 118118
Project: 118118
Buggy source:
protected void loadNodes(ProcessType process,Hashtable<String,Node> nodesHashtable) throws PersistenceException {
  EList nodeList;
  NodeType nType;
  nodeList=process.getNode();
  Node nc;
  EList listParamType;
  unloadedNode=new ArrayList<NodeType>();
  for (int i=0; i < nodeList.size(); i++) {
    nType=(NodeType)nodeList.get(i);
    listParamType=nType.getElementParameter();
    IComponent component=ComponentsFactoryProvider.getInstance().get(nType.getComponentName(),componentsType);
    if (component == null) {
      unloadedNode.add(nType);
      continue;
    }
    nc=loadNode(nType,component,nodesHashtable,listParamType);
  }
  if (!unloadedNode.isEmpty()) {
    List<NodeType> tempNodes=new ArrayList<NodeType>(unloadedNode);
    for (    NodeType unNode : tempNodes) {
      listParamType=unNode.getElementParameter();
      boolean isCurrentProject=ProjectManager.getInstance().isInCurrentMainProject(this.getProperty());
      String componentName=unNode.getComponentName();
      if (!isCurrentProject) {
        componentName=componentName + "String_Node_Str" + ProjectManager.getInstance().getProject(this.getProperty()).getLabel();
      }
      IComponent component=ComponentsFactoryProvider.getInstance().get(componentName,componentsType);
      if (component != null) {
        unloadedNode.remove(unNode);
        nc=loadNode(unNode,component,nodesHashtable,listParamType);
      }
    }
  }
  if (!unloadedNode.isEmpty()) {
    for (int i=0; i < unloadedNode.size(); i++) {
      createDummyNode(unloadedNode.get(i),nodesHashtable);
    }
  }
}

Fixed version (ground truth):
protected void loadNodes(ProcessType process,Hashtable<String,Node> nodesHashtable) throws PersistenceException {
  EList nodeList;
  NodeType nType;
  nodeList=process.getNode();
  Node nc;
  EList listParamType;
  boolean isCurrentProject=ProjectManager.getInstance().isInCurrentMainProject(this.getProperty());
  unloadedNode=new ArrayList<NodeType>();
  for (int i=0; i < nodeList.size(); i++) {
    nType=(NodeType)nodeList.get(i);
    listParamType=nType.getElementParameter();
    String componentName=nType.getComponentName();
    IComponent component=ComponentsFactoryProvider.getInstance().get(componentName,componentsType);
    if (!isCurrentProject && component != null && (component.getComponentType() == EComponentType.JOBLET) && !componentName.contains("String_Node_Str")) {
      componentName=ProjectManager.getInstance().getProject(this.getProperty()).getLabel() + "String_Node_Str" + componentName;
      component=ComponentsFactoryProvider.getInstance().get(componentName,componentsType);
    }
    if (component == null) {
      unloadedNode.add(nType);
      continue;
    }
    nc=loadNode(nType,component,nodesHashtable,listParamType);
  }
  if (!unloadedNode.isEmpty()) {
    List<NodeType> tempNodes=new ArrayList<NodeType>(unloadedNode);
    for (    NodeType unNode : tempNodes) {
      listParamType=unNode.getElementParameter();
      String componentName=unNode.getComponentName();
      if (!isCurrentProject && !componentName.contains("String_Node_Str")) {
        componentName=ProjectManager.getInstance().getProject(this.getProperty()).getLabel() + "String_Node_Str" + componentName;
      }
 else       if (new JobletUtil().matchExpression(componentName)) {
        String[] names=componentName.split("String_Node_Str");
        componentName=names[1];
      }
      IComponent component=ComponentsFactoryProvider.getInstance().get(componentName,componentsType);
      if (component != null) {
        unloadedNode.remove(unNode);
        nc=loadNode(unNode,component,nodesHashtable,listParamType);
      }
    }
  }
  if (!unloadedNode.isEmpty()) {
    for (int i=0; i < unloadedNode.size(); i++) {
      createDummyNode(unloadedNode.get(i),nodesHashtable);
    }
  }
}