Program: 58503
Project: 58503
Buggy source:
@Override public void handleVirtualArrayUpdate(IVirtualArrayDelta delta,String info){
  SelectionManager selectionManager;
  if (delta.getIDType() == EIDType.EXPERIMENT_INDEX) {
    storageSelectionManager.setVADelta(delta);
    for (    VADeltaItem deltaItem : delta.getAllItems()) {
      final int iVAIndex=deltaItem.getIndex();
switch (deltaItem.getType()) {
case REMOVE:
        composite.getDisplay().asyncExec(new Runnable(){
          public void run(){
            contentTable.getColumn(iVAIndex + 3).dispose();
          }
        }
);
      break;
case ADD:
    addColumn(deltaItem.getIndex() + COLUMN_OFFSET,deltaItem.getPrimaryID());
  break;
case COPY:
addColumn(deltaItem.getIndex() + 1 + COLUMN_OFFSET,storageVA.get(deltaItem.getIndex()));
break;
case MOVE:
int[] orig=contentTable.getColumnOrder();
System.out.println(Arrays.toString(orig));
ArrayList<Integer> ordered=new ArrayList<Integer>(orig.length);
for (int index : orig) {
ordered.add(index);
}
Integer item=ordered.remove(deltaItem.getIndex() + COLUMN_OFFSET);
System.out.println(ordered);
ordered.add(deltaItem.getTargetIndex() + COLUMN_OFFSET,item);
System.out.println(ordered);
for (int count=0; count < ordered.size(); count++) {
orig[count]=ordered.get(count);
}
System.out.println(Arrays.toString(orig));
contentTable.setColumnOrder(orig);
break;
default :
throw new IllegalStateException("String_Node_Str");
}
}
}
 else if (delta.getIDType() == EIDType.REFSEQ_MRNA_INT) {
delta=DeltaConverter.convertDelta(EIDType.EXPRESSION_INDEX,delta);
selectionManager=contentSelectionManager;
selectionManager.setVADelta(delta);
}
 else if (delta.getIDType() == EIDType.EXPRESSION_INDEX) {
selectionManager=contentSelectionManager;
selectionManager.setVADelta(delta);
}
 else return;
}

Fixed version (ground truth):
@Override public void handleVirtualArrayUpdate(IVirtualArrayDelta delta,String info){
  SelectionManager selectionManager;
  if (delta.getIDType() == EIDType.EXPERIMENT_INDEX) {
    storageSelectionManager.setVADelta(delta);
    for (    VADeltaItem deltaItem : delta.getAllItems()) {
      final int iVAIndex=deltaItem.getIndex();
switch (deltaItem.getType()) {
case REMOVE:
        composite.getDisplay().asyncExec(new Runnable(){
          public void run(){
            contentTable.getColumn(iVAIndex + 3).dispose();
          }
        }
);
      break;
case ADD:
    addColumn(deltaItem.getIndex() + COLUMN_OFFSET,deltaItem.getPrimaryID());
  break;
case COPY:
addColumn(deltaItem.getIndex() + 1 + COLUMN_OFFSET,storageVA.get(deltaItem.getIndex()));
break;
case MOVE:
int[] orig=contentTable.getColumnOrder();
ArrayList<Integer> ordered=new ArrayList<Integer>(orig.length);
for (int index : orig) {
ordered.add(index);
}
Integer item=ordered.remove(deltaItem.getIndex() + COLUMN_OFFSET);
ordered.add(deltaItem.getTargetIndex() + COLUMN_OFFSET,item);
for (int count=0; count < ordered.size(); count++) {
orig[count]=ordered.get(count);
}
contentTable.setColumnOrder(orig);
break;
default :
throw new IllegalStateException("String_Node_Str");
}
}
}
 else if (delta.getIDType() == EIDType.REFSEQ_MRNA_INT) {
delta=DeltaConverter.convertDelta(EIDType.EXPRESSION_INDEX,delta);
selectionManager=contentSelectionManager;
selectionManager.setVADelta(delta);
}
 else if (delta.getIDType() == EIDType.EXPRESSION_INDEX) {
selectionManager=contentSelectionManager;
selectionManager.setVADelta(delta);
}
 else return;
}