Program: 93715
Project: 93715
Buggy source:
/** 
 * Handles the creation of the tree tab of this viewer part given the parent   {@link Composite} under whichto create it.
 * @param composite Parent  {@link Composite} of the tree to create.
 * @return The tree part displayed by this viewer part's tree tab.
 */
private IModelContentMergeViewerTab createTreePart(Composite composite){
  final IModelContentMergeViewerTab treePart=new ModelContentMergeDiffTab(composite,partSide,this);
  ((Scrollable)treePart.getControl()).getVerticalBar().addSelectionListener(new SelectionListener(){
    public void widgetDefaultSelected(    SelectionEvent e){
      widgetSelected(e);
    }
    public void widgetSelected(    SelectionEvent e){
      fireUpdateCenter();
    }
  }
);
  ((Tree)treePart.getControl()).addTreeListener(new TreeListener(){
    public void treeCollapsed(    TreeEvent e){
      ((TreeItem)e.item).setExpanded(false);
      e.doit=false;
      parentViewer.update();
      expanded=true;
    }
    public void treeExpanded(    TreeEvent e){
      ((TreeItem)e.item).setExpanded(true);
      e.doit=false;
      parentViewer.update();
      expanded=true;
    }
  }
);
  treePart.addSelectionChangedListener(new ISelectionChangedListener(){
    public void selectionChanged(    SelectionChangedEvent event){
      fireSelectionChanged(event);
    }
  }
);
  ((Tree)treePart.getControl()).addSelectionListener(new SelectionAdapter(){
    @Override public void widgetSelected(    SelectionEvent e){
      if (tree.getSelectedElements().size() > 0) {
        final Item selected=tree.getSelectedElements().get(0);
        for (        final DiffElement diff : ((ModelCompareInput)parentViewer.getInput()).getDiffAsList()) {
          if (!(diff instanceof DiffGroup) && partSide == EMFCompareConstants.LEFT) {
            if (selected.getData().equals(EMFCompareEObjectUtils.getLeftElement(diff))) {
              parentViewer.setSelection(diff);
            }
          }
 else           if (!(diff instanceof DiffGroup) && partSide == EMFCompareConstants.RIGHT) {
            if (selected.getData().equals(EMFCompareEObjectUtils.getRightElement(diff))) {
              parentViewer.setSelection(diff);
            }
          }
        }
        if (!selected.isDisposed() && selected.getData() instanceof EObject) {
          properties.setReflectiveInput(findMatchFromElement((EObject)selected.getData()));
        }
      }
    }
  }
);
  return treePart;
}

Fixed version (ground truth):
/** 
 * Handles the creation of the tree tab of this viewer part given the parent   {@link Composite} under whichto create it.
 * @param composite Parent  {@link Composite} of the tree to create.
 * @return The tree part displayed by this viewer part's tree tab.
 */
private IModelContentMergeViewerTab createTreePart(Composite composite){
  final IModelContentMergeViewerTab treePart=new ModelContentMergeDiffTab(composite,partSide,this);
  ((Scrollable)treePart.getControl()).getVerticalBar().addSelectionListener(new SelectionListener(){
    public void widgetDefaultSelected(    SelectionEvent e){
      widgetSelected(e);
    }
    public void widgetSelected(    SelectionEvent e){
      fireUpdateCenter();
    }
  }
);
  ((Tree)treePart.getControl()).addTreeListener(new TreeListener(){
    public void treeCollapsed(    TreeEvent e){
      ((TreeItem)e.item).setExpanded(false);
      e.doit=false;
      parentViewer.update();
    }
    public void treeExpanded(    TreeEvent e){
      ((TreeItem)e.item).setExpanded(true);
      e.doit=false;
      parentViewer.update();
    }
  }
);
  treePart.addSelectionChangedListener(new ISelectionChangedListener(){
    public void selectionChanged(    SelectionChangedEvent event){
      fireSelectionChanged(event);
    }
  }
);
  ((Tree)treePart.getControl()).addSelectionListener(new SelectionAdapter(){
    @Override public void widgetSelected(    SelectionEvent e){
      if (tree.getSelectedElements().size() > 0) {
        final Item selected=tree.getSelectedElements().get(0);
        for (        final DiffElement diff : ((ModelCompareInput)parentViewer.getInput()).getDiffAsList()) {
          if (!(diff instanceof DiffGroup) && partSide == EMFCompareConstants.LEFT) {
            if (selected.getData().equals(EMFCompareEObjectUtils.getLeftElement(diff))) {
              parentViewer.setSelection(diff);
            }
          }
 else           if (!(diff instanceof DiffGroup) && partSide == EMFCompareConstants.RIGHT) {
            if (selected.getData().equals(EMFCompareEObjectUtils.getRightElement(diff))) {
              parentViewer.setSelection(diff);
            }
          }
        }
        if (!selected.isDisposed() && selected.getData() instanceof EObject) {
          properties.setReflectiveInput(findMatchFromElement((EObject)selected.getData()));
        }
      }
    }
  }
);
  return treePart;
}