Program: 121546
Project: 121546
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)) {
        boolean isEndRow=con.getTarget().getOutgoingConnections().size() == 0;
        boolean isStartRow=node.isStart();
        if (isPartitionKeysExist(con)) {
          reSetParKeyValuesForCon(con);
        }
        if (!isEndRow && isComponentCanParlization(con,(Node)con.getTarget())) {
          if (!isStartRow && isComponentNeedRepartion(con,(Node)con.getTarget())) {
            con.getElementParameter(EParameterName.NONE.getName()).setValue(Boolean.FALSE);
            con.getElementParameter(EParameterName.PARTITIONER.getName()).setValue(Boolean.FALSE);
            con.getElementParameter(EParameterName.DEPARTITIONER.getName()).setValue(Boolean.FALSE);
            con.setPropertyValue(EParameterName.REPARTITIONER.getName(),Boolean.TRUE);
            setHashKeysFromTarget(con,(Node)con.getTarget());
            setParallelization(con.getTarget());
          }
 else {
            if (existPreviousPar((Node)con.getSource()) || existPreviousNone((Node)con.getSource()) || existPreviousRepar((Node)con.getSource())) {
              con.getElementParameter(EParameterName.REPARTITIONER.getName()).setValue(Boolean.FALSE);
              con.getElementParameter(EParameterName.PARTITIONER.getName()).setValue(Boolean.FALSE);
              con.getElementParameter(EParameterName.DEPARTITIONER.getName()).setValue(Boolean.FALSE);
              con.setPropertyValue(EParameterName.NONE.getName(),Boolean.TRUE);
              setParallelization(con.getTarget());
            }
 else {
              IElementParameter deparElem=con.getElementParameter(EParameterName.DEPARTITIONER.getName());
              deparElem.setValue(Boolean.FALSE);
              con.getElementParameter(EParameterName.REPARTITIONER.getName()).setValue(Boolean.FALSE);
              con.getElementParameter(EParameterName.NONE.getName()).setValue(Boolean.FALSE);
              con.setPropertyValue(EParameterName.PARTITIONER.getName(),Boolean.TRUE);
              if (con.getSource().isStart()) {
                deparElem.setShow(false);
              }
              setHashKeysForCon(con);
              if (con.getTarget() != null) {
                setParallelization(con.getTarget());
              }
            }
          }
        }
 else {
          if (!con.getSource().isStart()) {
            if (!existPreviousDepar((Node)con.getSource())) {
              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)) {
        boolean isEndRow=con.getTarget().getOutgoingConnections().size() == 0;
        boolean isStartRow=node.isStart();
        if (isPartitionKeysExist(con)) {
          reSetParKeyValuesForCon(con);
        }
        if (!isEndRow && isComponentCanParlization(con,(Node)con.getTarget())) {
          if (!isStartRow && isComponentNeedRepartion(con,(Node)con.getTarget())) {
            con.getElementParameter(EParameterName.NONE.getName()).setValue(Boolean.FALSE);
            con.getElementParameter(EParameterName.PARTITIONER.getName()).setValue(Boolean.FALSE);
            con.getElementParameter(EParameterName.DEPARTITIONER.getName()).setValue(Boolean.FALSE);
            con.setPropertyValue(EParameterName.REPARTITIONER.getName(),Boolean.TRUE);
            setHashKeysFromTarget(con,(Node)con.getTarget());
            setParallelization(con.getTarget());
          }
 else {
            if (existPreviousPar((Node)con.getSource()) || existPreviousNone((Node)con.getSource()) || existPreviousRepar((Node)con.getSource())) {
              con.getElementParameter(EParameterName.REPARTITIONER.getName()).setValue(Boolean.FALSE);
              con.getElementParameter(EParameterName.PARTITIONER.getName()).setValue(Boolean.FALSE);
              con.getElementParameter(EParameterName.DEPARTITIONER.getName()).setValue(Boolean.FALSE);
              con.setPropertyValue(EParameterName.NONE.getName(),Boolean.TRUE);
              setParallelization(con.getTarget());
            }
 else {
              IElementParameter deparElem=con.getElementParameter(EParameterName.DEPARTITIONER.getName());
              deparElem.setValue(Boolean.FALSE);
              con.getElementParameter(EParameterName.REPARTITIONER.getName()).setValue(Boolean.FALSE);
              con.getElementParameter(EParameterName.NONE.getName()).setValue(Boolean.FALSE);
              con.setPropertyValue(EParameterName.PARTITIONER.getName(),Boolean.TRUE);
              setHashKeysForCon(con);
              if (con.getTarget() != null) {
                setParallelization(con.getTarget());
              }
            }
          }
        }
 else {
          if (!con.getSource().isStart()) {
            if (!existPreviousDepar((Node)con.getSource())) {
              setDeparallelization(con.getTarget());
            }
          }
        }
      }
 else {
        node=con.getTarget();
        setParallelization(node);
      }
    }
  }
 else {
    if (!node.isStart()) {
      setDeparallelization(node);
    }
  }
}