Buggy code:
public Rectangle getBounds ( ) { } public Rectangle getBounds ( int columnIndex ) { } Rectangle getCellBounds ( int columnIndex ) { } Rectangle getCheckboxBounds ( ) { } public boolean getChecked ( ) { } int getContentWidth ( int columnIndex ) { } int getContentX ( int columnIndex ) { } String getDisplayText ( int columnIndex ) { } public boolean getExpanded ( ) { } Rectangle getExpanderBounds ( ) { } Rectangle getFocusBounds ( ) { } public Font getFont ( ) { } public Font getFont ( int columnIndex ) { } int getFontHeight ( ) { } int getFontHeight ( int columnIndex ) { } public Color getForeground ( ) { } public Color getForeground ( int columnIndex ) { } public boolean getGrayed ( ) { } Point [ ] getHconnectorEndpoints ( ) { } Rectangle getHitBounds ( ) { } public Image getImage ( ) { } public Image getImage ( int columnIndex ) { } public Rectangle getImageBounds ( int columnIndex ) { } int getIndex ( ) { } public TreeItem getItem ( int index ) { } public int getItemCount ( ) { } public TreeItem [ ] getItems ( ) { } public Tree getParent ( ) { } public TreeItem getParentItem ( ) { } int getPreferredWidth ( int columnIndex ) { } public String getText ( ) { } public String getText ( int columnIndex ) { } int getTextX ( int columnIndex ) { } boolean hasAncestor ( TreeItem item ) { } public int indexOf ( TreeItem item ) { } boolean isAvailable ( ) { } boolean isLastChild ( ) { } boolean isSelected ( ) { } void paint ( GC gc , TreeColumn column , boolean paintCellContent ) { } void recomputeTextWidths ( GC gc ) { } void redrawItem ( ) { } void removeColumn ( TreeColumn column , int index ) { } void removeItem ( TreeItem item , int index ) { } public void setBackground ( Color value ) { } public void setBackground ( int columnIndex , Color value ) { } public void setChecked ( boolean value ) { } public void setExpanded ( boolean value ) { } public void setFont ( Font value ) { } public void setFont ( int columnIndex , Font value ) { } public void setForeground ( Color value ) { } public void setForeground ( int columnIndex , Color value ) { } public void setGrayed ( boolean value ) { } public void setImage ( Image value ) { } public void setImage ( Image [ ] value ) { } public void setImage ( int columnIndex , Image value ) { checkWidget ( ) ; if ( ( value != null ) && ( value . isDisposed ( ) ) ) error ( ERROR_INVALID_ARGUMENT ) ; TreeColumn [ ] columns = parent . columns ; int validColumnCount = Math . max ( 1 , columns . length ) ; if ( ! ( ( 0 <= columnIndex ) && ( columnIndex < validColumnCount ) ) ) return ; Image image = getImage ( columnIndex ) ; if ( value == image ) return ; if ( ( value != null ) && ( value . equals ( image ) ) ) return ; if ( columnIndex == 0 ) { super . setImage ( value ) ; } else { images [ columnIndex ] = value ; } if ( ( columns . length ) > 0 ) { GC gc = new GC ( parent ) ; gc . setFont ( getFont ( columnIndex ) ) ; computeDisplayText ( columnIndex , gc ) ; textWidths [ columnIndex ] = gc . textExtent ( getDisplayText ( columnIndex ) ) . x ; gc . dispose ( ) ; } if ( value == null ) { redrawItem ( ) ; return ; } if ( ( parent . imageHeight ) == 0 ) { int oldItemHeight = parent . itemHeight ; parent . setImageHeight ( value . getBounds ( ) . height ) ; if ( oldItemHeight != ( parent . itemHeight ) ) { if ( columnIndex == 0 ) { parent . col0ImageWidth = value . getBounds ( ) . width ; if ( ( columns . length ) > 0 ) { GC gc = new GC ( parent ) ; TreeItem [ ] rootItems = parent . items ; for ( int i = 0 ; i < ( rootItems . length ) ; i ++ ) { rootItems [ i ] . updateColumnWidth ( columns [ 0 ] , gc ) ; } gc . dispose ( ) ; } } parent . redraw ( ) ; return ; } } if ( ( columnIndex == 0 ) && ( ( parent . col0ImageWidth ) == 0 ) ) { parent . col0ImageWidth = value . getBounds ( ) . width ; if ( ( columns . length ) == 0 ) { parent . redraw ( ) ; } else { GC gc = new GC ( parent ) ; TreeItem [ ] rootItems = parent . items ; for ( int i = 0 ; i < ( rootItems . length ) ; i ++ ) { rootItems [ i ] . updateColumnWidth ( columns [ 0 ] , gc ) ; } gc . dispose ( ) ; <START_BUG> parent . redraw ( 0 , 0 , columns [ 0 ] . width , parent . getClientArea ( ) . height , true ) ; <END_BUG> } return ; } redrawItem ( ) ; } public void setText ( String value ) { } public void setText ( String [ ] value ) { } public void setText ( int columnIndex , String value ) { } void updateColumnWidth ( TreeColumn column , GC gc ) { } void updateFont ( GC gc ) { } }

Fix:
parent . redraw ( columns [ 0 ] . getX ( ) , 0 , columns [ 0 ] . width , parent . getClientArea ( ) . height , true ) ;