Program: 65262
Project: 65262
Buggy source:
protected List getSelectValueList() throws BirtException {
  CubeHandle cube=null;
  CrosstabReportItemHandle crosstab=null;
  if (designHandle instanceof ExtendedItemHandle) {
    try {
      Object obj=((ExtendedItemHandle)designHandle).getReportItem();
      DesignElementHandle tmp=designHandle;
      while (true) {
        if (obj == null || obj instanceof ReportDesignHandle) {
          break;
        }
 else         if (obj instanceof CrosstabReportItemHandle) {
          crosstab=(CrosstabReportItemHandle)obj;
          cube=crosstab.getCube();
          break;
        }
 else         if (tmp instanceof ExtendedItemHandle) {
          tmp=tmp.getContainer();
          if (tmp instanceof ExtendedItemHandle) {
            obj=((ExtendedItemHandle)tmp).getReportItem();
          }
        }
      }
    }
 catch (    ExtendedElementException e) {
      throw e;
    }
  }
  if (cube == null || (!(cube instanceof TabularCubeHandle)) || getExpression().length() == 0) {
    return new ArrayList();
  }
  String expr=null;
  IExpressionConverter converter=ExpressionButtonUtil.getCurrentExpressionConverter(getExpressionControl());
  if (converter != null) {
    for (int i=0; i < columnList.size(); i++) {
      ComputedColumnHandle column=columnList.get(i);
      if (column != null) {
        String value=ExpressionUtility.getDataExpression(column.getName(),converter);
        if (value.equals(getExpression())) {
          expr=ExpressionUtility.getDataExpression(column.getName(),ExpressionUtility.getExpressionConverter(ExpressionType.JAVASCRIPT));
          break;
        }
      }
    }
  }
  Iterator iter=null;
  ICubeQueryDefinition cubeQueryDefn=null;
  DataRequestSession session=null;
  try {
    session=DataRequestSession.newSession(new DataSessionContext(DataSessionContext.MODE_DIRECT_PRESENTATION));
    DataService.getInstance().registerSession(((TabularCubeHandle)cube).getDataSet(),session);
    cubeQueryDefn=CrosstabUIHelper.createBindingQuery(crosstab);
    iter=CubeValueSelector.getMemberValueIterator(session,cube,expr,cubeQueryDefn);
  }
 catch (  BirtException e) {
    throw e;
  }
  List valueList=new ArrayList();
  int count=0;
  int MAX_COUNT=PreferenceFactory.getInstance().getPreferences(CrosstabPlugin.getDefault(),UIUtil.getCurrentProject()).getInt(CrosstabPlugin.PREFERENCE_FILTER_LIMIT);
  while (iter != null && iter.hasNext()) {
    Object obj=iter.next();
    if (obj != null) {
      if (valueList.indexOf(obj) < 0) {
        valueList.add(obj);
        if (++count >= MAX_COUNT) {
          break;
        }
      }
    }
  }
  if (session != null) {
    session.shutdown();
  }
  return valueList;
}

Fixed version (ground truth):
protected List getSelectValueList() throws BirtException {
  CubeHandle cube=null;
  CrosstabReportItemHandle crosstab=null;
  if (designHandle instanceof ExtendedItemHandle) {
    try {
      Object obj=((ExtendedItemHandle)designHandle).getReportItem();
      DesignElementHandle tmp=designHandle;
      while (true) {
        if (obj == null || obj instanceof ReportDesignHandle) {
          break;
        }
 else         if (obj instanceof CrosstabReportItemHandle) {
          crosstab=(CrosstabReportItemHandle)obj;
          cube=crosstab.getCube();
          break;
        }
 else         if (tmp instanceof ExtendedItemHandle) {
          tmp=tmp.getContainer();
          if (tmp instanceof ExtendedItemHandle) {
            obj=((ExtendedItemHandle)tmp).getReportItem();
          }
        }
      }
    }
 catch (    ExtendedElementException e) {
      throw e;
    }
  }
  if (cube == null || (!(cube instanceof TabularCubeHandle)) || getExpression().length() == 0) {
    return new ArrayList();
  }
  String expr=null;
  IExpressionConverter converter=ExpressionButtonUtil.getCurrentExpressionConverter(getExpressionControl());
  if (converter != null) {
    for (int i=0; i < columnList.size(); i++) {
      ComputedColumnHandle column=columnList.get(i);
      if (column != null) {
        String value=ExpressionUtility.getDataExpression(column.getName(),converter);
        if (value.equals(getExpression())) {
          expr=ExpressionUtility.getDataExpression(column.getName(),ExpressionUtility.getExpressionConverter(ExpressionType.JAVASCRIPT));
          break;
        }
      }
    }
  }
  Iterator iter=null;
  ICubeQueryDefinition cubeQueryDefn=null;
  DataRequestSession session=null;
  try {
    session=DataRequestSession.newSession(new DataSessionContext(DataSessionContext.MODE_DIRECT_PRESENTATION,designHandle.getModuleHandle()));
    DataService.getInstance().registerSession(((TabularCubeHandle)cube).getDataSet(),session);
    cubeQueryDefn=CrosstabUIHelper.createBindingQuery(crosstab);
    iter=CubeValueSelector.getMemberValueIterator(session,cube,expr,cubeQueryDefn);
  }
 catch (  BirtException e) {
    throw e;
  }
  List valueList=new ArrayList();
  int count=0;
  int MAX_COUNT=PreferenceFactory.getInstance().getPreferences(CrosstabPlugin.getDefault(),UIUtil.getCurrentProject()).getInt(CrosstabPlugin.PREFERENCE_FILTER_LIMIT);
  while (iter != null && iter.hasNext()) {
    Object obj=iter.next();
    if (obj != null) {
      if (valueList.indexOf(obj) < 0) {
        valueList.add(obj);
        if (++count >= MAX_COUNT) {
          break;
        }
      }
    }
  }
  if (session != null) {
    session.shutdown();
  }
  return valueList;
}