Program: 121020
Project: 121020
Buggy source:
private void setParallelization(INode node){
  if (node.isActivate()) {
    if (node.getOutgoingConnections().size() > 0) {
      for (      IConnection con : node.getOutgoingConnections()) {
        EConnectionType lineStyle=con.getLineStyle();
        if (lineStyle.hasConnectionCategory(IConnectionCategory.DATA)) {
          if (con.isActivate()) {
            boolean isEndRow=con.getTarget().getOutgoingConnections().size() == 0;
            boolean isStartRow=node.isStart();
            if (ParallelExecutionUtils.isPartitionKeysExist(con)) {
              ParallelExecutionUtils.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);
                ParallelExecutionUtils.setHashKeysFromTarget(con,(Node)con.getTarget());
                setParallelization(con.getTarget());
              }
 else {
                if (ParallelExecutionUtils.existPreviousPar((Node)con.getSource()) || ParallelExecutionUtils.existPreviousNone((Node)con.getSource()) || ParallelExecutionUtils.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 {
                  parallelForCon=true;
                  INode firstPartionerNode=null;
                  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 (isStartRow) {
                    firstPartionerNode=ParallelExecutionUtils.getFirstPartionerTargetNode(con);
                  }
                  if (firstPartionerNode != null) {
                    if (ParallelExecutionUtils.getColumnListFromTargetNode((Node)firstPartionerNode).size() > 0) {
                      ParallelExecutionUtils.setHashKeysFromTarget(con,(Node)firstPartionerNode);
                    }
 else {
                      ParallelExecutionUtils.setHashKeysForCon(con);
                    }
                  }
 else {
                    ParallelExecutionUtils.setHashKeysForCon(con);
                  }
                  if (con.getTarget() != null) {
                    setParallelization(con.getTarget());
                  }
                }
              }
            }
 else {
              if (!con.getSource().isStart()) {
                if (!ParallelExecutionUtils.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.isActivate()) {
    if (node.getOutgoingConnections().size() > 0) {
      for (      IConnection con : node.getOutgoingConnections()) {
        EConnectionType lineStyle=con.getLineStyle();
        if (lineStyle.hasConnectionCategory(IConnectionCategory.DATA)) {
          boolean isEndRow=con.getTarget().getOutgoingConnections().size() == 0;
          boolean isStartRow=node.isStart();
          if (ParallelExecutionUtils.isPartitionKeysExist(con)) {
            ParallelExecutionUtils.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);
              ParallelExecutionUtils.setHashKeysFromTarget(con,(Node)con.getTarget());
              setParallelization(con.getTarget());
            }
 else {
              if (ParallelExecutionUtils.existPreviousPar((Node)con.getSource()) || ParallelExecutionUtils.existPreviousNone((Node)con.getSource()) || ParallelExecutionUtils.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 {
                parallelForCon=true;
                INode firstPartionerNode=null;
                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 (isStartRow) {
                  firstPartionerNode=ParallelExecutionUtils.getFirstPartionerTargetNode(con);
                }
                if (firstPartionerNode != null) {
                  if (ParallelExecutionUtils.getColumnListFromTargetNode((Node)firstPartionerNode).size() > 0) {
                    ParallelExecutionUtils.setHashKeysFromTarget(con,(Node)firstPartionerNode);
                  }
 else {
                    ParallelExecutionUtils.setHashKeysForCon(con);
                  }
                }
 else {
                  ParallelExecutionUtils.setHashKeysForCon(con);
                }
                if (con.getTarget() != null) {
                  setParallelization(con.getTarget());
                }
              }
            }
          }
 else {
            if (!con.getSource().isStart()) {
              if (!ParallelExecutionUtils.existPreviousDepar((Node)con.getSource())) {
                setDeparallelization(con.getTarget());
              }
            }
          }
        }
 else {
          node=con.getTarget();
          setParallelization(node);
        }
      }
    }
 else {
      if (!node.isStart()) {
        setDeparallelization(node);
      }
    }
  }
}