Program: 108778
Project: 108778
Buggy source:
/** 
 * Creates a new instance
 * @param parent
 * @param controller
 */
public ViewLattice(final Composite parent,final Controller controller){
  controller.addListener(ModelPart.SELECTED_NODE,this);
  controller.addListener(ModelPart.FILTER,this);
  controller.addListener(ModelPart.MODEL,this);
  this.controller=controller;
  parent.setLayout(new GridLayout());
  bridge=new Composite(parent,SWT.BORDER | SWT.NO_BACKGROUND | SWT.EMBEDDED);
  bridge.setLayoutData(SWTUtil.createFillGridData());
  frame=SWT_AWT.new_Frame(bridge);
  frame.setLayout(new BorderLayout());
  frame.add(this,BorderLayout.CENTER);
  frame.setBackground(Color.WHITE);
  menu=new Menu(parent.getShell(),SWT.POP_UP);
  MenuItem item1=new MenuItem(menu,SWT.NONE);
  item1.setText(Resources.getMessage("String_Node_Str"));
  item1.addSelectionListener(new SelectionAdapter(){
    @Override public void widgetSelected(    final SelectionEvent arg0){
      model.getClipboard().add(selectedNode);
      controller.update(new ModelEvent(ViewLattice.this,ModelPart.CLIPBOARD,selectedNode));
      model.setSelectedNode(selectedNode);
      controller.update(new ModelEvent(ViewLattice.this,ModelPart.SELECTED_NODE,selectedNode));
      repaint();
    }
  }
);
  MenuItem item2=new MenuItem(menu,SWT.NONE);
  item2.setText(Resources.getMessage("String_Node_Str"));
  item2.addSelectionListener(new SelectionAdapter(){
    @Override public void widgetSelected(    final SelectionEvent arg0){
      controller.actionApplySelectedTransformation();
      model.setSelectedNode(selectedNode);
      controller.update(new ModelEvent(ViewLattice.this,ModelPart.SELECTED_NODE,selectedNode));
      repaint();
    }
  }
);
  this.tooltipTimer=new Timer(TOOLTIP_WAIT,new ActionListener(){
    @Override public void actionPerformed(    ActionEvent arg0){
      if (tooltipX != -1 && tooltipY != -1) {
        final ARXNode node=getNode(tooltipX,tooltipY);
        if (node != null) {
          final Bounds dbounds=(Bounds)node.getAttributes().get(ATTRIBUTE_BOUNDS);
          final org.eclipse.swt.graphics.Rectangle bounds=new org.eclipse.swt.graphics.Rectangle((int)dbounds.x,(int)dbounds.y,(int)nodeWidth,(int)nodeHeight);
          if (bounds.x < 0)           bounds.x=0;
          if (bounds.y < 0)           bounds.y=0;
          bounds.x=frame.getLocationOnScreen().x + bounds.x;
          bounds.y=frame.getLocationOnScreen().y + bounds.y;
          controller.getToolTip().setText(createTooltipText(node),bounds);
        }
      }
    }
  }
);
  resetBuffer();
  initializeListeners();
}

Fixed version (ground truth):
/** 
 * Creates a new instance
 * @param parent
 * @param controller
 */
public ViewLattice(final Composite parent,final Controller controller){
  controller.addListener(ModelPart.SELECTED_NODE,this);
  controller.addListener(ModelPart.FILTER,this);
  controller.addListener(ModelPart.MODEL,this);
  this.controller=controller;
  parent.setLayout(new GridLayout());
  bridge=new Composite(parent,SWT.BORDER | SWT.NO_BACKGROUND | SWT.EMBEDDED);
  bridge.setLayoutData(SWTUtil.createFillGridData());
  frame=SWT_AWT.new_Frame(bridge);
  frame.setLayout(new BorderLayout());
  frame.add(this,BorderLayout.CENTER);
  frame.setBackground(Color.WHITE);
  menu=new Menu(parent.getShell());
  MenuItem item1=new MenuItem(menu,SWT.NONE);
  item1.setText(Resources.getMessage("String_Node_Str"));
  item1.addSelectionListener(new SelectionAdapter(){
    @Override public void widgetSelected(    final SelectionEvent arg0){
      model.getClipboard().add(selectedNode);
      controller.update(new ModelEvent(ViewLattice.this,ModelPart.CLIPBOARD,selectedNode));
      model.setSelectedNode(selectedNode);
      controller.update(new ModelEvent(ViewLattice.this,ModelPart.SELECTED_NODE,selectedNode));
      repaint();
    }
  }
);
  MenuItem item2=new MenuItem(menu,SWT.NONE);
  item2.setText(Resources.getMessage("String_Node_Str"));
  item2.addSelectionListener(new SelectionAdapter(){
    @Override public void widgetSelected(    final SelectionEvent arg0){
      controller.actionApplySelectedTransformation();
      model.setSelectedNode(selectedNode);
      controller.update(new ModelEvent(ViewLattice.this,ModelPart.SELECTED_NODE,selectedNode));
      repaint();
    }
  }
);
  this.tooltipTimer=new Timer(TOOLTIP_WAIT,new ActionListener(){
    @Override public void actionPerformed(    ActionEvent arg0){
      if (tooltipX != -1 && tooltipY != -1) {
        final ARXNode node=getNode(tooltipX,tooltipY);
        if (node != null) {
          final Bounds dbounds=(Bounds)node.getAttributes().get(ATTRIBUTE_BOUNDS);
          final org.eclipse.swt.graphics.Rectangle bounds=new org.eclipse.swt.graphics.Rectangle((int)dbounds.x,(int)dbounds.y,(int)nodeWidth,(int)nodeHeight);
          if (bounds.x < 0)           bounds.x=0;
          if (bounds.y < 0)           bounds.y=0;
          bounds.x=frame.getLocationOnScreen().x + bounds.x;
          bounds.y=frame.getLocationOnScreen().y + bounds.y;
          controller.getToolTip().setText(createTooltipText(node),bounds);
        }
      }
    }
  }
);
  resetBuffer();
  initializeListeners();
}