Program: 121593
Project: 121593
Buggy source:
private void setParallelization(INode node){
  if (node.getOutgoingConnections().size() > 0) {
    for (    IConnection con : node.getOutgoingConnections()) {
      EConnectionType lineStyle=con.getLineStyle();
      if (lineStyle.hasConnectionCategory(IConnectionCategory.MAIN) || lineStyle.hasConnectionCategory(IConnectionCategory.MERGE)) {
        if (isComponentCanParlization(con,(Node)con.getTarget())) {
          if (existPreviousParCon((Node)con.getTarget())) {
            con.getElementParameter(EParameterName.PARTITIONER.getName()).setValue(Boolean.FALSE);
            con.getElementParameter(EParameterName.DEPARTITIONER.getName()).setValue(Boolean.FALSE);
            con.setPropertyValue(EParameterName.NONE.getName(),Boolean.TRUE);
            node=con.getTarget();
            setParallelization(node);
          }
 else {
            List<String> conKeyColumnList=getKeyColumnList(con.getMetadataTable());
            con.getElementParameter(EParameterName.DEPARTITIONER.getName()).setValue(Boolean.FALSE);
            con.getElementParameter(EParameterName.NONE.getName()).setValue(Boolean.FALSE);
            con.setPropertyValue(EParameterName.PARTITIONER.getName(),Boolean.TRUE);
            IElementParameter parTableCon=con.getElementParameter("String_Node_Str");
            if (parTableCon != null) {
              Object[] itemCon=parTableCon.getListItemsValue();
              String clumnKeyListName="String_Node_Str";
              for (              Object itemList : itemCon) {
                if (((ElementParameter)itemList).getFieldType().equals(EParameterFieldType.PREV_COLUMN_LIST) || ((ElementParameter)itemList).getFieldType().equals(EParameterFieldType.COLUMN_LIST)) {
                  clumnKeyListName=((ElementParameter)itemList).getName();
                }
              }
              for (              String partionValue : conKeyColumnList) {
                Map partionKeyMap=new HashMap<String,String>();
                partionKeyMap.put(clumnKeyListName,partionValue);
                ((List)parTableCon.getValue()).add(partionKeyMap);
              }
            }
            if (con.getTarget() != null) {
              setParallelization(con.getTarget());
            }
          }
        }
 else {
          if (!con.getSource().isStart()) {
            if (!existPreviousDeparCon((Node)con.getTarget())) {
              setDeparallelization(con.getTarget());
            }
          }
        }
      }
 else {
        node=con.getTarget();
        setParallelization(node);
      }
    }
  }
 else {
    if (!node.isStart()) {
      setDeparallelization(node);
    }
  }
}

Fixed version (ground truth):
private void setParallelization(INode node){
  if (node.getOutgoingConnections().size() > 0) {
    for (    IConnection con : node.getOutgoingConnections()) {
      EConnectionType lineStyle=con.getLineStyle();
      if (lineStyle.hasConnectionCategory(IConnectionCategory.MAIN) || lineStyle.hasConnectionCategory(IConnectionCategory.MERGE)) {
        if (isComponentCanParlization(con,(Node)con.getTarget())) {
          if (existPreviousParCon((Node)con.getTarget())) {
            con.getElementParameter(EParameterName.PARTITIONER.getName()).setValue(Boolean.FALSE);
            con.getElementParameter(EParameterName.DEPARTITIONER.getName()).setValue(Boolean.FALSE);
            con.setPropertyValue(EParameterName.NONE.getName(),Boolean.TRUE);
            node=con.getTarget();
            setParallelization(node);
          }
 else {
            List<String> conKeyColumnList=getKeyColumnList(con.getMetadataTable());
            con.getElementParameter(EParameterName.DEPARTITIONER.getName()).setValue(Boolean.FALSE);
            con.getElementParameter(EParameterName.NONE.getName()).setValue(Boolean.FALSE);
            con.setPropertyValue(EParameterName.PARTITIONER.getName(),Boolean.TRUE);
            IElementParameter parTableCon=con.getElementParameter("String_Node_Str");
            boolean isExistHashValue=false;
            if (parTableCon != null) {
              Object[] itemCon=parTableCon.getListItemsValue();
              String clumnKeyListName="String_Node_Str";
              for (              Object itemList : itemCon) {
                if (((ElementParameter)itemList).getFieldType().equals(EParameterFieldType.PREV_COLUMN_LIST) || ((ElementParameter)itemList).getFieldType().equals(EParameterFieldType.COLUMN_LIST)) {
                  clumnKeyListName=((ElementParameter)itemList).getName();
                }
              }
              for (              String partionValue : conKeyColumnList) {
                for (                Object keyParMap : ((List)parTableCon.getValue())) {
                  Map existKeyMap=(Map)keyParMap;
                  if (existKeyMap.get(clumnKeyListName).equals(partionValue)) {
                    isExistHashValue=true;
                    break;
                  }
                }
                if (!isExistHashValue) {
                  Map partionKeyMap=new HashMap<String,String>();
                  partionKeyMap.put(clumnKeyListName,partionValue);
                  ((List)parTableCon.getValue()).add(partionKeyMap);
                }
              }
            }
            if (con.getTarget() != null) {
              setParallelization(con.getTarget());
            }
          }
        }
 else {
          if (!con.getSource().isStart()) {
            if (!existPreviousDeparCon((Node)con.getTarget())) {
              setDeparallelization(con.getTarget());
            }
          }
        }
      }
 else {
        node=con.getTarget();
        setParallelization(node);
      }
    }
  }
 else {
    if (!node.isStart()) {
      setDeparallelization(node);
    }
  }
}