Buggy code:
public class XMPPClientSOContainer extends ClientSOContainer { public static final int DEFAULT_KEEPALIVE = 30000 ; Trace trace = Trace . create ( "XMPPClientSOContainer" ) ; public static final String NAMESPACE_IDENTIFIER = XmppPlugin . getDefault ( ) . getNamespaceIdentifier ( ) ; public static final String XMPP_SHARED_OBJECT_ID = ( XMPPClientSOContainer . class . getName ( ) ) + ".xmpphandler" ; protected static final String GOOGLE_SERVICENAME = "gmail.com" ; int keepAlive = 0 ; protected IIMMessageSender messageSender = null ; protected XMPPPresenceSharedObject sharedObject = null ; protected ID sharedObjectID = null ; Vector chats = new Vector ( ) ; protected void addChat ( IChatRoomContainer container ) { } protected void removeChat ( IChatRoomContainer container ) { } protected void trace ( String msg ) { } protected void dumpStack ( Throwable t , String msg ) { } public XMPPClientSOContainer ( ) throws Exception { } public XMPPClientSOContainer ( int ka ) throws Exception { } public XMPPClientSOContainer ( String userhost , int ka ) throws Exception { } protected void disposeChats ( ) { } protected IChatRoomContainer findChat ( ID toID ) { } protected ID handleConnectResponse ( ID originalTarget , Object serverData ) throws Exception { } protected void addSharedObjectToContainer ( ID remote ) throws SharedObjectAddException { } protected void cleanUpConnectFail ( ) { } public void dispose ( ) { } protected ISynchAsynchConnection createConnection ( ID remoteSpace , Object data ) throws ConnectionInstantiationException { } protected Object createConnectData ( ID target , Callback [ ] cbs , Object data ) { } protected Callback [ ] createAuthorizationCallbacks ( ) { } protected int getConnectTimeout ( ) { } public Roster getRoster ( ) throws IOException { } public Namespace getConnectNamespace ( ) { } protected void handleChatMessageWithExtension ( Message mess ) throws IOException { } protected void handleChatMessage ( Message mess ) throws IOException { } protected void handleContainerMessage ( ContainerMessage mess ) throws IOException { } protected void handleIQMessageWithExtension ( IQ mess ) throws IOException { } protected void handleIQMessage ( IQ mess ) throws IOException { } protected void handlePresenceMessageWithExtension ( Presence mess ) throws IOException { } protected void handlePresenceMessage ( Presence mess ) throws IOException { } protected void handleXMPPMessage ( Packet aPacket ) throws IOException { } protected void initializeSharedObject ( ) throws Exception { } public void connect ( ID remote , IConnectContext joinContext ) throws ContainerConnectException { } public void disconnect ( ) { ID groupID = getConnectedID ( ) ; fireContainerEvent ( new org . eclipse . ecf . core . events . ContainerDisconnectingEvent ( this . getID ( ) , groupID ) ) ; synchronized ( getConnectLock ( ) ) { if ( isConnected ( ) ) { ISynchAsynchConnection conn = getConnection ( ) ; synchronized ( conn ) { synchronized ( getGroupMembershipLock ( ) ) { memberLeave ( groupID , null ) ; } try { conn . disconnect ( ) ; } catch ( IOException e ) { dumpStack ( "Exception<seq2seq4repair_space>disconnecting" , e ) ; } } } <START_BUG> connectionState = UNCONNECTED ; <END_BUG> this . connection = null ; remoteServerID = null ; } fireContainerEvent ( new org . eclipse . ecf . core . events . ContainerDisconnectedEvent ( this . getID ( ) , groupID ) ) ; dispose ( ) ; } protected SOContext createSharedObjectContext ( SOConfig soconfig , IQueueEnqueue queue ) { } protected void processAsynch ( AsynchConnectionEvent e ) { } public void sendMessage ( ID target , String message ) throws IOException { } protected Presence createPresenceFromIPresence ( IPresence presence ) { } protected void sendPresenceUpdate ( ID target , Presence presence ) throws IOException { } protected void sendRosterAdd ( String user , String name , String [ ] groups ) throws IOException { } protected void sendRosterRemove ( String user ) throws IOException { } public Object getAdapter ( Class clazz ) { } protected Collection getHostedRoomForService ( String svc ) throws XMPPException { } protected ID createIDFromHostedRoom ( HostedRoom room ) { } protected ID [ ] getChatRooms ( ) { } class ECFRoomInfo implements IRoomInfo { RoomInfo info ; XMPPRoomID roomID ; ID connectedID ; public ECFRoomInfo ( XMPPRoomID roomID , RoomInfo info , ID connectedID ) { } public String getDescription ( ) { } public String getSubject ( ) { } public ID getRoomID ( ) { } public int getParticipantsCount ( ) { } public String getName ( ) { } public boolean isPersistent ( ) { } public boolean requiresPassword ( ) { } public boolean isModerated ( ) { } public ID getConnectedID ( ) { } public String toString ( ) { } } protected IRoomInfo getChatRoomInfo ( ID roomID ) { } }

Fix:
connectionState = DISCONNECTED ;