Program: 108050
Project: 108050
Buggy source:
@Override protected Control createDialogArea(final Composite parent){
  parent.setLayout(SWTUtil.createGridLayout(1));
  final DynamicTable table=SWTUtil.createTableDynamic(parent,SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL| SWT.FULL_SELECTION);
  table.setHeaderVisible(true);
  GridData data=SWTUtil.createFillGridData();
  data.heightHint=300;
  table.setLayoutData(data);
  DynamicTableColumn column1=new DynamicTableColumn(table,SWT.NONE);
  column1.setText(Resources.getMessage("String_Node_Str"));
  column1.setWidth("String_Node_Str","String_Node_Str");
  DynamicTableColumn column2=new DynamicTableColumn(table,SWT.NONE);
  column2.setText(Resources.getMessage("String_Node_Str"));
  column2.setWidth("String_Node_Str","String_Node_Str");
  DynamicTableColumn column3=new DynamicTableColumn(table,SWT.NONE);
  column3.setText(Resources.getMessage("String_Node_Str"));
  column3.setWidth("String_Node_Str","String_Node_Str");
  column1.pack();
  column2.pack();
  column3.pack();
  for (  String attribute : attributes) {
    TableItem item=new TableItem(table,SWT.NONE);
    item.setText(new String[]{attribute,"String_Node_Str",hierarchies.get(attribute)[0][0]});
  }
  final Menu menu=new Menu(table);
  table.setMenu(menu);
  menu.addMenuListener(new MenuAdapter(){
    public void menuShown(    MenuEvent e){
      MenuItem[] items=menu.getItems();
      for (int i=0; i < items.length; i++) {
        items[i].dispose();
      }
      if (attribute != null) {
        for (int i=0; i < hierarchies.get(attribute)[0].length; i++) {
          MenuItem newItem=new MenuItem(menu,SWT.NONE);
          newItem.setText("String_Node_Str" + i);
          final int level=i;
          newItem.addSelectionListener(new SelectionAdapter(){
            @Override public void widgetSelected(            SelectionEvent arg0){
              selection.put(attribute,level);
              item.setText(1,String.valueOf(level));
              item.setText(2,hierarchies.get(attribute)[0][level]);
            }
          }
);
        }
      }
    }
  }
);
  table.addSelectionListener(new SelectionAdapter(){
    @Override public void widgetSelected(    SelectionEvent arg0){
      if (table.getSelectionIndex() != -1) {
        item=table.getItems()[table.getSelectionIndex()];
        attribute=item.getText(0);
      }
 else {
        item=null;
        attribute=null;
      }
    }
  }
);
  return parent;
}

Fixed version (ground truth):
@Override protected Control createDialogArea(final Composite parent){
  parent.setLayout(SWTUtil.createGridLayout(1));
  final DynamicTable table=SWTUtil.createTableDynamic(parent,SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL| SWT.FULL_SELECTION);
  table.setHeaderVisible(true);
  GridData data=SWTUtil.createFillGridData();
  data.heightHint=300;
  table.setLayoutData(data);
  DynamicTableColumn column1=new DynamicTableColumn(table,SWT.NONE);
  column1.setText(Resources.getMessage("String_Node_Str"));
  column1.setWidth("String_Node_Str","String_Node_Str");
  DynamicTableColumn column2=new DynamicTableColumn(table,SWT.NONE);
  column2.setText(Resources.getMessage("String_Node_Str"));
  column2.setWidth("String_Node_Str","String_Node_Str");
  DynamicTableColumn column3=new DynamicTableColumn(table,SWT.NONE);
  column3.setText(Resources.getMessage("String_Node_Str"));
  column3.setWidth("String_Node_Str","String_Node_Str");
  column1.pack();
  column2.pack();
  column3.pack();
  for (  String attribute : attributes) {
    TableItem item=new TableItem(table,SWT.NONE);
    int level=selection.get(attribute);
    item.setText(new String[]{attribute,String.valueOf(level),hierarchies.get(attribute)[0][level]});
  }
  final Menu menu=new Menu(table);
  table.setMenu(menu);
  menu.addMenuListener(new MenuAdapter(){
    public void menuShown(    MenuEvent e){
      MenuItem[] items=menu.getItems();
      for (int i=0; i < items.length; i++) {
        items[i].dispose();
      }
      if (attribute != null) {
        for (int i=0; i < hierarchies.get(attribute)[0].length; i++) {
          MenuItem newItem=new MenuItem(menu,SWT.NONE);
          newItem.setText("String_Node_Str" + i);
          final int level=i;
          newItem.addSelectionListener(new SelectionAdapter(){
            @Override public void widgetSelected(            SelectionEvent arg0){
              selection.put(attribute,level);
              item.setText(1,String.valueOf(level));
              item.setText(2,hierarchies.get(attribute)[0][level]);
            }
          }
);
        }
      }
    }
  }
);
  table.addSelectionListener(new SelectionAdapter(){
    @Override public void widgetSelected(    SelectionEvent arg0){
      if (table.getSelectionIndex() != -1) {
        item=table.getItems()[table.getSelectionIndex()];
        attribute=item.getText(0);
      }
 else {
        item=null;
        attribute=null;
      }
    }
  }
);
  return parent;
}