Program: 65408
Project: 65408
Buggy source:
/** 
 * Copy series definition from one chart model to another.
 * @param srcCM
 * @param targetCM
 * @since 2.5
 */
public static void copyChartSeriesDefinition(Chart srcCM,Chart targetCM){
  boolean isSameType=srcCM.getType().equals(targetCM.getType());
  EList<SeriesDefinition> srcRsds=ChartUtil.getBaseSeriesDefinitions(srcCM);
  EList<SeriesDefinition> tagRsds=ChartUtil.getBaseSeriesDefinitions(targetCM);
  for (int i=0; i < srcRsds.size(); i++) {
    SeriesDefinition sd=srcRsds.get(i);
    SeriesDefinition tagSD=null;
    if (i >= tagRsds.size()) {
      tagSD=SeriesDefinitionImpl.create();
      if (targetCM instanceof ChartWithAxes) {
        ((ChartWithAxes)targetCM).getAxes().get(0).getSeriesDefinitions().add(tagSD);
      }
 else       if (targetCM instanceof ChartWithoutAxes) {
        ((ChartWithoutAxes)targetCM).getSeriesDefinitions().add(tagSD);
      }
    }
 else {
      tagSD=tagRsds.get(i);
    }
    copySDQueryAttributes(sd,tagSD);
  }
  if (targetCM instanceof ChartWithAxes) {
    EList<Axis> tagAxisList=((ChartWithAxes)targetCM).getAxes().get(0).getAssociatedAxes();
    if (srcCM instanceof ChartWithAxes) {
      EList<Axis> srcAxisList=((ChartWithAxes)srcCM).getAxes().get(0).getAssociatedAxes();
      if (tagAxisList.size() > srcAxisList.size()) {
        for (int i=(tagAxisList.size() - 1); i >= srcAxisList.size(); i--) {
          tagAxisList.remove(i);
        }
      }
      if (isSameType) {
        for (int i=0; i < srcAxisList.size(); i++) {
          if (i >= tagAxisList.size()) {
            tagAxisList.add(srcAxisList.get(i).copyInstance());
          }
          srcRsds=srcAxisList.get(i).getSeriesDefinitions();
          tagRsds=tagAxisList.get(i).getSeriesDefinitions();
          copySDListQueryAttributes(srcRsds,tagRsds,isSameType);
        }
      }
 else {
        int minsize=srcAxisList.size() > tagAxisList.size() ? tagAxisList.size() : srcAxisList.size();
        for (int i=0; i < minsize; i++) {
          srcRsds=srcAxisList.get(i).getSeriesDefinitions();
          tagRsds=tagAxisList.get(i).getSeriesDefinitions();
          copySDListQueryAttributes(srcRsds,tagRsds,isSameType);
        }
      }
    }
 else {
      srcRsds=((ChartWithoutAxes)srcCM).getSeriesDefinitions().get(0).getSeriesDefinitions();
      if (tagAxisList.size() > 1) {
        for (int i=1; i < tagAxisList.size(); i++) {
          tagAxisList.remove(i);
        }
      }
      tagRsds=tagAxisList.get(0).getSeriesDefinitions();
      copySDListQueryAttributes(srcRsds,tagRsds,isSameType);
    }
  }
 else {
    tagRsds=((ChartWithoutAxes)targetCM).getSeriesDefinitions().get(0).getSeriesDefinitions();
    if (srcCM instanceof ChartWithAxes) {
      srcRsds=((ChartWithAxes)srcCM).getAxes().get(0).getAssociatedAxes().get(0).getSeriesDefinitions();
    }
 else {
      srcRsds=((ChartWithoutAxes)srcCM).getSeriesDefinitions().get(0).getSeriesDefinitions();
    }
    copySDListQueryAttributes(srcRsds,tagRsds,isSameType);
  }
}

Fixed version (ground truth):
/** 
 * Copy series definition from one chart model to another.
 * @param srcCM
 * @param targetCM
 * @since 2.5
 */
public static void copyChartSeriesDefinition(Chart srcCM,Chart targetCM){
  boolean isSameType=srcCM.getType().equals(targetCM.getType());
  EList<SeriesDefinition> srcRsds=ChartUtil.getBaseSeriesDefinitions(srcCM);
  EList<SeriesDefinition> tagRsds=ChartUtil.getBaseSeriesDefinitions(targetCM);
  for (int i=0; i < srcRsds.size(); i++) {
    SeriesDefinition sd=srcRsds.get(i);
    SeriesDefinition tagSD=null;
    if (i >= tagRsds.size()) {
      tagSD=SeriesDefinitionImpl.create();
      if (targetCM instanceof ChartWithAxes) {
        ((ChartWithAxes)targetCM).getAxes().get(0).getSeriesDefinitions().add(tagSD);
      }
 else       if (targetCM instanceof ChartWithoutAxes) {
        ((ChartWithoutAxes)targetCM).getSeriesDefinitions().add(tagSD);
      }
    }
 else {
      tagSD=tagRsds.get(i);
    }
    copySDQueryAttributes(sd,tagSD);
    if (srcCM instanceof ChartWithAxes && targetCM instanceof ChartWithAxes) {
      if (((ChartWithAxes)srcCM).getAxes().get(0).isSetType()) {
        ((ChartWithAxes)targetCM).getAxes().get(0).setType(((ChartWithAxes)srcCM).getAxes().get(0).getType());
      }
    }
  }
  if (targetCM instanceof ChartWithAxes) {
    EList<Axis> tagAxisList=((ChartWithAxes)targetCM).getAxes().get(0).getAssociatedAxes();
    if (srcCM instanceof ChartWithAxes) {
      EList<Axis> srcAxisList=((ChartWithAxes)srcCM).getAxes().get(0).getAssociatedAxes();
      if (tagAxisList.size() > srcAxisList.size()) {
        for (int i=(tagAxisList.size() - 1); i >= srcAxisList.size(); i--) {
          tagAxisList.remove(i);
        }
      }
      if (isSameType) {
        for (int i=0; i < srcAxisList.size(); i++) {
          if (i >= tagAxisList.size()) {
            tagAxisList.add(srcAxisList.get(i).copyInstance());
          }
          srcRsds=srcAxisList.get(i).getSeriesDefinitions();
          tagRsds=tagAxisList.get(i).getSeriesDefinitions();
          copySDListQueryAttributes(srcRsds,tagRsds,isSameType);
          if (srcAxisList.get(i).isSetType()) {
            tagAxisList.get(i).setType(srcAxisList.get(i).getType());
          }
        }
      }
 else {
        int minsize=srcAxisList.size() > tagAxisList.size() ? tagAxisList.size() : srcAxisList.size();
        for (int i=0; i < minsize; i++) {
          srcRsds=srcAxisList.get(i).getSeriesDefinitions();
          tagRsds=tagAxisList.get(i).getSeriesDefinitions();
          copySDListQueryAttributes(srcRsds,tagRsds,isSameType);
          if (srcAxisList.get(i).isSetType()) {
            tagAxisList.get(i).setType(srcAxisList.get(i).getType());
          }
        }
      }
    }
 else {
      srcRsds=((ChartWithoutAxes)srcCM).getSeriesDefinitions().get(0).getSeriesDefinitions();
      if (tagAxisList.size() > 1) {
        for (int i=1; i < tagAxisList.size(); i++) {
          tagAxisList.remove(i);
        }
      }
      tagRsds=tagAxisList.get(0).getSeriesDefinitions();
      copySDListQueryAttributes(srcRsds,tagRsds,isSameType);
    }
  }
 else {
    tagRsds=((ChartWithoutAxes)targetCM).getSeriesDefinitions().get(0).getSeriesDefinitions();
    if (srcCM instanceof ChartWithAxes) {
      srcRsds=((ChartWithAxes)srcCM).getAxes().get(0).getAssociatedAxes().get(0).getSeriesDefinitions();
    }
 else {
      srcRsds=((ChartWithoutAxes)srcCM).getSeriesDefinitions().get(0).getSeriesDefinitions();
    }
    copySDListQueryAttributes(srcRsds,tagRsds,isSameType);
  }
}