Buggy code:
private void fillContextMenu ( IMenuManager manager ) { } private void hookContextMenu ( ) { } private void hookParticipantsContextMenu ( ) { } private void makeActions ( ) { } protected Text getInputText ( ) { } protected void setKeyListener ( KeyListener listener ) { } protected TableViewer getParticipantsViewer ( ) { } public StyledText getOutputText ( ) { } } public void createPartControl ( Composite parent ) { } private boolean closeTabItem ( CTabItem tabItem ) { } public IChatRoomContainer getActiveChatRoomContainer ( ) { } private ChatRoomManagerView . ChatRoom findChatRoomForTabItem ( CTabItem tabItem ) { } private Text getRootTextInput ( ) { } private StyledText getRootTextOutput ( ) { } public void initializeWithoutManager ( String localUserName , String hostName , final IChatRoomCommandListener commandListener , final IChatRoomViewCloseListener closeListener ) { } public void initializeWithManager ( String localUserName , String hostName , final IChatRoomContainer rootChatRoomContainer , final IChatRoomCommandListener commandListener , final IChatRoomViewCloseListener closeListener ) { } public void setEnabled ( boolean enabled ) { } public boolean isEnabled ( ) { } protected void clearInput ( ) { } public void sendMessageLine ( String line ) { } public void disconnected ( ) { } protected CTabItem getTabItem ( String targetName ) { } protected void doJoinRoom ( final IChatRoomInfo roomInfo , final String password ) { } class ChatRoom implements IChatRoomInvitationListener , KeyListener { private IChatRoomContainer chatRoomContainer ; private ChatRoomManagerView . ChatRoomTab chatRoomTab ; private IChatRoomMessageSender chatRoomMessageSender ; private IUser localUser ; private TableViewer chatRoomParticipantViewer = null ; private ArrayList options ; private int maximumCyclingOptions = 5 ; private int prefixLength ; private int choice = 0 ; private int nickRemainder ; private int caret ; private char nickCompletionSuffix = ':' ; private boolean isCycling = false ; private boolean isAtStart = false ; private CTabItem itemSelected = null ; private Text getInputText ( ) { } private StyledText getOutputText ( ) { } ChatRoom ( IChatRoomContainer container , ChatRoomManagerView . ChatRoomTab tabItem ) { } private SelectionListener scrollSelectionListener = new SelectionListener ( ) { public void widgetDefaultSelected ( SelectionEvent e ) { } public void widgetSelected ( SelectionEvent e ) { } } ; protected void makeTabItemBold ( ) { } protected void makeTabItemNormal ( ) { } protected void changeTabItem ( boolean bold ) { } public void handleMessage ( final ID fromID , final String messageBody ) { } public void handleInvitationReceived ( ID roomID , ID from , String subject , String body ) { } public void keyPressed ( KeyEvent e ) { } public void keyReleased ( KeyEvent e ) { } protected void handleKeyPressed ( KeyEvent evt ) { } protected void handleKeyReleased ( KeyEvent evt ) { } protected void handleTextInput ( String text ) { } protected void chatRoomDisconnect ( ) { } protected void clearInput ( ) { } protected void sendMessageLine ( String line ) { } public void handlePresence ( final ID fromID , final IPresence presence ) { } public void disconnected ( ) { } protected boolean isConnected ( ) { } protected void setSelected ( ) { } protected void addParticipant ( IUser p ) { } protected boolean isLocalUser ( ID id ) { } protected void removeLocalUser ( ) { } protected void removeParticipant ( IUser p ) { } protected void removeAllParticipants ( ) { } } protected void handleTextInput ( String text ) { } protected String processForCommand ( IChatRoomContainer chatRoomContainer , String text ) { } protected void handleEnter ( ) { } protected void handleKeyPressed ( KeyEvent evt ) { } public void setFocus ( ) { } public void joinRoom ( final IChatRoomInfo info , final String password ) { } public void dispose ( ) { } protected String getMessageString ( ID fromID , String text ) { } public void handleMessage ( final ID fromID , final String messageBody ) { } public static String getUsernameFromID ( ID targetID ) { } public static String getHostnameFromID ( ID targetID ) { } class ChatRoomParticipant implements IUser , IActionFilter { private static final long serialVersionUID = 2008114088656711572L ; ID id ; public ChatRoomParticipant ( ID id ) { } public ID getID ( ) { } public String getName ( ) { } public boolean equals ( Object other ) { } public int hashCode ( ) { } public String toString ( ) { } public Map getProperties ( ) { } public Object getAdapter ( Class adapter ) { } public String getNickname ( ) { } public boolean testAttribute ( Object target , String name , String value ) { } } public void disconnect ( ) { if ( ( rootCloseListener ) != null ) { rootCloseListener . chatRoomViewClosing ( ) ; } for ( Iterator i = chatRooms . values ( ) . iterator ( ) ; i . hasNext ( ) ; ) { ChatRoomManagerView . ChatRoom chatRoom = ( ( ChatRoomManagerView . ChatRoom ) ( i . next ( ) ) ) ; IChatRoomContainer container = chatRoom . chatRoomContainer ; if ( container != null ) <START_BUG> container . dispose ( ) ; <END_BUG> } rootMessageSender = null ; rootCloseListener = null ; chatRooms . clear ( ) ; } protected void removeLocalUser ( ) { } public void handleInvitationReceived ( ID roomID , ID from , String subject , String body ) { } private boolean isLastOutputInvisible ( StyledText chatText ) { } private void scrollToEnd ( StyledText chatText ) { } protected void appendText ( ChatRoomManagerView . ChatRoomTab chatRoomTab , StyledText st , ChatLine text ) { } protected void outputClear ( ) { } protected void outputCopy ( ) { } protected void outputSelectAll ( ) { } protected void makeActions ( ) { } private void fillContextMenu ( IMenuManager manager ) { } private void hookContextMenu ( ) { } public void setMessageRenderer ( IMessageRenderer defaultMessageRenderer ) { } private boolean isCurrentlyActive ( ChatRoomManagerView . ChatRoomTab chatRoomTab ) { } }

Fix:
container . disconnect ( ) ;