Program: 77952
Project: 77952
Buggy source:
protected Control createDialogArea(Composite parent){
  Composite parentComposite=(Composite)super.createDialogArea(parent);
  if (this.canSelect) {
    Composite composite=new Composite(parentComposite,SWT.NONE);
    composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    composite.setLayout(UIUtil.createGridLayoutWithoutMargin(2,false));
    CLabel warnLabel=new CLabel(composite,SWT.NONE);
    warnLabel.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK));
    warnLabel.setText(WARN_COLUMN_BINDINGS);
    GridData gd=new GridData(GridData.FILL_HORIZONTAL);
    gd.horizontalSpan=2;
    warnLabel.setLayoutData(gd);
    Label label=new Label(composite,SWT.NONE);
    label.setText(LABEL_COLUMN_BINDINGS);
    label.setLayoutData(new GridData(GridData.BEGINNING));
    final CCombo combo=new CCombo(composite,SWT.READ_ONLY | SWT.BORDER);
    combo.setBackground(PlatformUI.getWorkbench().getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
    String[] dataSets=ChoiceSetFactory.getDataSets();
    String[] newList=new String[dataSets.length + 1];
    newList[0]=NONE;
    System.arraycopy(dataSets,0,newList,1,dataSets.length);
    combo.setItems(newList);
    String dataSetName=getDataSetName();
    combo.deselectAll();
    combo.setText(dataSetName);
    combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    gd=new GridData();
    gd.widthHint=250;
    combo.setLayoutData(gd);
    combo.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(      SelectionEvent event){
        String value=combo.getText();
        if (value.equals(NONE)) {
          value=null;
        }
        if (canChangeDataSet(value)) {
          try {
            startTrans("String_Node_Str");
            DataSetHandle dataSet=null;
            if (value != null) {
              dataSet=SessionHandleAdapter.getInstance().getReportDesignHandle().findDataSet(value);
            }
            inputElement.setDataSet(dataSet);
            generateBindingColumns();
            getPropertyHandle().setStringValue(null);
            commit();
          }
 catch (          SemanticException e) {
            rollback();
            ExceptionHandler.handle(e);
          }
        }
 else {
          combo.setText(getDataSetName());
        }
      }
    }
);
  }
  Table table=new Table(parentComposite,SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER| (canSelect ? SWT.CHECK : 0));
  GridData gd=new GridData(GridData.FILL_BOTH);
  gd.heightHint=200;
  table.setLayoutData(gd);
  table.setLinesVisible(true);
  table.setHeaderVisible(true);
  table.addKeyListener(new KeyAdapter(){
    /** 
 * @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent)
 */
    public void keyReleased(    KeyEvent e){
      if (e.keyCode == SWT.DEL) {
        IStructuredSelection selection=(IStructuredSelection)bindingTable.getSelection();
        if (selection.getFirstElement() instanceof ComputedColumnHandle) {
          deleteRow((ComputedColumnHandle)selection.getFirstElement());
        }
      }
    }
  }
);
  String[] columns=null;
  int[] columnWidth=null;
  CellEditor[] cellEditors;
  expressionCellEditor=new ExpressionCellEditor(table);
  columns=new String[]{null,COLUMN_NAME,COLUMN_DATATYPE,COLUMN_EXPRESSION,COLUMN_AGGREGATEON};
  columnWidth=new int[]{canSelect ? 25 : 20,150,70,150,150};
  groupList=DEUtil.getGroups(inputElement);
  groups=new String[groupList.size() + 1];
  groups[0]=NONE;
  for (int i=0; i < groupList.size(); i++) {
    groups[i + 1]=((GroupHandle)groupList.get(i)).getName();
  }
  cellEditors=new CellEditor[]{null,new TextCellEditor(table),new ComboBoxCellEditor(table,dataTypeDisplayNames),expressionCellEditor,new ComboBoxCellEditor(table,groups,SWT.READ_ONLY)};
  for (int i=0; i < columns.length; i++) {
    TableColumn column=new TableColumn(table,SWT.LEFT);
    column.setResizable(columns[i] != null);
    if (columns[i] != null) {
      column.setText(columns[i]);
    }
    column.setWidth(columnWidth[i]);
  }
  if (canSelect) {
    bindingTable=new CheckboxTableViewer(table);
    ((CheckboxTableViewer)bindingTable).addCheckStateListener(new ICheckStateListener(){
      public void checkStateChanged(      CheckStateChangedEvent event){
        if (event.getElement() instanceof ComputedColumnHandle) {
          ComputedColumnHandle handle=(ComputedColumnHandle)event.getElement();
          if (handle.getName().equals(selectedColumnName)) {
            selectedColumnName=null;
          }
 else {
            selectedColumnName=handle.getName();
          }
          updateSelection();
          updateButtons();
        }
 else {
          ((CheckboxTableViewer)bindingTable).setChecked(dummyChoice,false);
        }
      }
    }
);
  }
 else {
    bindingTable=new TableViewer(table);
  }
  bindingTable.setCellEditors(cellEditors);
  bindingTable.setColumnProperties(columns);
  bindingTable.setContentProvider(contentProvider);
  bindingTable.setLabelProvider(labelProvider);
  bindingTable.setCellModifier(cellModifier);
  bindingTable.setInput(inputElement);
  bindingTable.addSelectionChangedListener(new ISelectionChangedListener(){
    public void selectionChanged(    SelectionChangedEvent event){
      if (!bindingTable.getSelection().isEmpty()) {
        Object obj=((IStructuredSelection)bindingTable.getSelection()).getFirstElement();
        if (obj == dummyChoice && !existHighLightColumn()) {
          bindingTable.refresh();
          setHihtLightColumn();
        }
 else         if (obj instanceof ComputedColumnHandle) {
          ComputedColumnHandle column=(ComputedColumnHandle)obj;
          BindingExpressionProvider provider=new BindingExpressionProvider(column.getElementHandle());
          provider.addFilter(new ComputedColumnExpressionFilter(bindingTable));
          expressionCellEditor.setExpressionProvider(provider);
        }
      }
    }
  }
);
  return parentComposite;
}

Fixed version (ground truth):
protected Control createDialogArea(Composite parent){
  Composite parentComposite=(Composite)super.createDialogArea(parent);
  if (this.canSelect) {
    Composite composite=new Composite(parentComposite,SWT.NONE);
    composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    composite.setLayout(UIUtil.createGridLayoutWithoutMargin(2,false));
    CLabel warnLabel=new CLabel(composite,SWT.NONE);
    warnLabel.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK));
    warnLabel.setText(WARN_COLUMN_BINDINGS);
    GridData gd=new GridData(GridData.FILL_HORIZONTAL);
    gd.horizontalSpan=2;
    warnLabel.setLayoutData(gd);
    Label label=new Label(composite,SWT.NONE);
    label.setText(LABEL_COLUMN_BINDINGS);
    label.setLayoutData(new GridData(GridData.BEGINNING));
    final CCombo combo=new CCombo(composite,SWT.READ_ONLY | SWT.BORDER);
    combo.setBackground(PlatformUI.getWorkbench().getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
    String[] dataSets=ChoiceSetFactory.getDataSets();
    String[] newList=new String[dataSets.length + 1];
    newList[0]=NONE;
    System.arraycopy(dataSets,0,newList,1,dataSets.length);
    combo.setItems(newList);
    String dataSetName=getDataSetName();
    combo.deselectAll();
    combo.setText(dataSetName);
    combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    gd=new GridData();
    gd.widthHint=250;
    combo.setLayoutData(gd);
    combo.addSelectionListener(new SelectionAdapter(){
      public void widgetSelected(      SelectionEvent event){
        String value=combo.getText();
        if (value.equals(NONE)) {
          value=null;
        }
        if (canChangeDataSet(value)) {
          try {
            startTrans("String_Node_Str");
            DataSetHandle dataSet=null;
            if (value != null) {
              dataSet=SessionHandleAdapter.getInstance().getReportDesignHandle().findDataSet(value);
            }
            inputElement.setDataSet(dataSet);
            generateBindingColumns();
            getPropertyHandle().setStringValue(null);
            commit();
          }
 catch (          SemanticException e) {
            rollback();
            ExceptionHandler.handle(e);
          }
        }
 else {
          combo.setText(getDataSetName());
        }
      }
    }
);
  }
  Table table=new Table(parentComposite,SWT.SINGLE | SWT.FULL_SELECTION | SWT.BORDER| (canSelect ? SWT.CHECK : 0));
  GridData gd=new GridData(GridData.FILL_BOTH);
  gd.heightHint=200;
  table.setLayoutData(gd);
  table.setLinesVisible(true);
  table.setHeaderVisible(true);
  table.addKeyListener(new KeyAdapter(){
    /** 
 * @see org.eclipse.swt.events.KeyAdapter#keyReleased(org.eclipse.swt.events.KeyEvent)
 */
    public void keyReleased(    KeyEvent e){
      if (e.keyCode == SWT.DEL) {
        IStructuredSelection selection=(IStructuredSelection)bindingTable.getSelection();
        if (selection.getFirstElement() instanceof ComputedColumnHandle) {
          deleteRow((ComputedColumnHandle)selection.getFirstElement());
        }
      }
    }
  }
);
  String[] columns=null;
  int[] columnWidth=null;
  CellEditor[] cellEditors;
  expressionCellEditor=new ExpressionCellEditor(table);
  columns=new String[]{null,COLUMN_NAME,COLUMN_DATATYPE,COLUMN_EXPRESSION,COLUMN_AGGREGATEON};
  columnWidth=new int[]{canSelect ? 25 : 20,150,70,150,150};
  groups=new String[groupList.size() + 1];
  groups[0]=NONE;
  for (int i=0; i < groupList.size(); i++) {
    groups[i + 1]=((GroupHandle)groupList.get(i)).getName();
  }
  cellEditors=new CellEditor[]{null,new TextCellEditor(table),new ComboBoxCellEditor(table,dataTypeDisplayNames),expressionCellEditor,new ComboBoxCellEditor(table,groups,SWT.READ_ONLY)};
  for (int i=0; i < columns.length; i++) {
    TableColumn column=new TableColumn(table,SWT.LEFT);
    column.setResizable(columns[i] != null);
    if (columns[i] != null) {
      column.setText(columns[i]);
    }
    column.setWidth(columnWidth[i]);
  }
  if (canSelect) {
    bindingTable=new CheckboxTableViewer(table);
    ((CheckboxTableViewer)bindingTable).addCheckStateListener(new ICheckStateListener(){
      public void checkStateChanged(      CheckStateChangedEvent event){
        if (event.getElement() instanceof ComputedColumnHandle) {
          ComputedColumnHandle handle=(ComputedColumnHandle)event.getElement();
          if (handle.getName().equals(selectedColumnName)) {
            selectedColumnName=null;
          }
 else {
            selectedColumnName=handle.getName();
          }
          updateSelection();
          updateButtons();
        }
 else {
          ((CheckboxTableViewer)bindingTable).setChecked(dummyChoice,false);
        }
      }
    }
);
  }
 else {
    bindingTable=new TableViewer(table);
  }
  bindingTable.setCellEditors(cellEditors);
  bindingTable.setColumnProperties(columns);
  bindingTable.setContentProvider(contentProvider);
  bindingTable.setLabelProvider(labelProvider);
  bindingTable.setCellModifier(cellModifier);
  bindingTable.setInput(inputElement);
  bindingTable.addSelectionChangedListener(new ISelectionChangedListener(){
    public void selectionChanged(    SelectionChangedEvent event){
      if (!bindingTable.getSelection().isEmpty()) {
        Object obj=((IStructuredSelection)bindingTable.getSelection()).getFirstElement();
        if (obj == dummyChoice && !existHighLightColumn()) {
          bindingTable.refresh();
          setHihtLightColumn();
        }
 else         if (obj instanceof ComputedColumnHandle) {
          ComputedColumnHandle column=(ComputedColumnHandle)obj;
          BindingExpressionProvider provider=new BindingExpressionProvider(column.getElementHandle());
          provider.addFilter(new ComputedColumnExpressionFilter(bindingTable));
          expressionCellEditor.setExpressionProvider(provider);
        }
      }
    }
  }
);
  return parentComposite;
}