//# 3 errors, 822 messages
//#
/*
    //#ServerManager.java:1:1: class: com.dmdirc.ServerManager
    //#ServerManager.java:1:1: method: com.dmdirc.ServerManager.com.dmdirc.ServerManager__static_init
 * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.dmdirc;

import com.dmdirc.config.IdentityManager;
import com.dmdirc.ui.interfaces.Window;

import java.util.ArrayList;
import java.util.List;

/**
 * The ServerManager maintains a list of all servers, and provides methods to
 * search or iterate over them.
 *
 * @author chris
 */
public final class ServerManager {

    /** Singleton instance of ServerManager. */
    private static ServerManager me;

    /** All servers that currently exist. */
    private final List<Server> servers = new ArrayList<Server>();

    /**
     * Creates a new instance of ServerManager.
     */
    private ServerManager() {
    //#ServerManager.java:48: method: void com.dmdirc.ServerManager.com.dmdirc.ServerManager()
    //#input(void com.dmdirc.ServerManager()): this
    //#output(void com.dmdirc.ServerManager()): new ArrayList(ServerManager#1) num objects
    //#output(void com.dmdirc.ServerManager()): this.servers
    //#new obj(void com.dmdirc.ServerManager()): new ArrayList(ServerManager#1)
    //#post(void com.dmdirc.ServerManager()): this.servers == &new ArrayList(ServerManager#1)
    //#post(void com.dmdirc.ServerManager()): new ArrayList(ServerManager#1) num objects == 1
    }
    //#ServerManager.java:49: end of method: void com.dmdirc.ServerManager.com.dmdirc.ServerManager()

    /**
     * Returns the singleton instance of ServerManager.
     *
     * @return Instance of ServerManager
     */
    public static synchronized ServerManager getServerManager() {
        if (me == null) {
    //#ServerManager.java:57: method: ServerManager com.dmdirc.ServerManager.getServerManager()
    //#input(ServerManager getServerManager()): __Class_Obj.__Lock
    //#input(ServerManager getServerManager()): me
    //#output(ServerManager getServerManager()): me
    //#output(ServerManager getServerManager()): new ArrayList(ServerManager#1) num objects
    //#output(ServerManager getServerManager()): new ServerManager(getServerManager#1) num objects
    //#output(ServerManager getServerManager()): new ServerManager(getServerManager#1).__Tag
    //#output(ServerManager getServerManager()): new ServerManager(getServerManager#1).servers
    //#output(ServerManager getServerManager()): return_value
    //#new obj(ServerManager getServerManager()): new ArrayList(ServerManager#1)
    //#new obj(ServerManager getServerManager()): new ServerManager(getServerManager#1)
    //#pre[1] (ServerManager getServerManager()): init'ed(me)
    //#post(ServerManager getServerManager()): me == One-of{old me, &new ServerManager(getServerManager#1)}
    //#post(ServerManager getServerManager()): me != null
    //#post(ServerManager getServerManager()): return_value == me
    //#post(ServerManager getServerManager()): new ArrayList(ServerManager#1) num objects <= 1
    //#post(ServerManager getServerManager()): new ServerManager(getServerManager#1) num objects <= 1
    //#post(ServerManager getServerManager()): new ServerManager(getServerManager#1).__Tag == com/dmdirc/ServerManager
    //#post(ServerManager getServerManager()): new ServerManager(getServerManager#1).servers == &new ArrayList(ServerManager#1)
    //#unanalyzed(ServerManager getServerManager()): Effects-of-calling:java.util.ArrayList
    //#test_vector(ServerManager getServerManager()): me: Inverse{null}, Addr_Set{null}
            me = new ServerManager();
        }
        return me;
    //#ServerManager.java:60: end of method: ServerManager com.dmdirc.ServerManager.getServerManager()
    }

    /**
     * Registers a new server with the manager.
     *
     * @param server The server to be registered
     */
    public void registerServer(final Server server) {
        synchronized (servers) {
    //#ServerManager.java:69: method: void com.dmdirc.ServerManager.registerServer(Server)
    //#input(void registerServer(Server)): server
    //#input(void registerServer(Server)): this
    //#input(void registerServer(Server)): this.servers
    //#input(void registerServer(Server)): this.servers.__Lock
    //#pre[3] (void registerServer(Server)): this.servers != null
            servers.add(server);
        }
    }
    //#ServerManager.java:72: end of method: void com.dmdirc.ServerManager.registerServer(Server)

    /**
     * Unregisters a server from the manager. The request is ignored if the
     * ServerManager is in the process of closing all servers.
     *
     * @param server The server to be unregistered
     */
    public void unregisterServer(final Server server) {
        synchronized (servers) {
    //#ServerManager.java:81: method: void com.dmdirc.ServerManager.unregisterServer(Server)
    //#input(void unregisterServer(Server)): server
    //#input(void unregisterServer(Server)): this
    //#input(void unregisterServer(Server)): this.servers
    //#input(void unregisterServer(Server)): this.servers.__Lock
    //#pre[3] (void unregisterServer(Server)): this.servers != null
            servers.remove(server);
        }
    }
    //#ServerManager.java:84: end of method: void com.dmdirc.ServerManager.unregisterServer(Server)

    /**
     * Returns a list of all servers.
     *
     * @return A list of all servers
     */
    public List<Server> getServers() {
        return new ArrayList<Server>(servers);
    //#ServerManager.java:92: method: List com.dmdirc.ServerManager.getServers()
    //#input(List getServers()): this
    //#input(List getServers()): this.servers
    //#output(List getServers()): new ArrayList(getServers#1) num objects
    //#output(List getServers()): return_value
    //#new obj(List getServers()): new ArrayList(getServers#1)
    //#post(List getServers()): return_value == &new ArrayList(getServers#1)
    //#post(List getServers()): new ArrayList(getServers#1) num objects == 1
    //#ServerManager.java:92: end of method: List com.dmdirc.ServerManager.getServers()
    }

    /**
     * Makes all servers disconnected with the specified quit message.
     *
     * @param message The quit message to send to the IRC servers
     */
    public void disconnectAll(final String message) {
        synchronized (servers) {
    //#ServerManager.java:101: method: void com.dmdirc.ServerManager.disconnectAll(String)
    //#input(void disconnectAll(String)): " ["._tainted
    //#input(void disconnectAll(String)): "->"._tainted
    //#input(void disconnectAll(String)): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void disconnectAll(String)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void disconnectAll(String)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void disconnectAll(String)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void disconnectAll(String)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void disconnectAll(String)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void disconnectAll(String)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void disconnectAll(String)): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void disconnectAll(String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void disconnectAll(String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void disconnectAll(String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void disconnectAll(String)): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void disconnectAll(String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void disconnectAll(String)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void disconnectAll(String)): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void disconnectAll(String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void disconnectAll(String)): com/dmdirc/Server.DOMAIN_GENERAL
    //#input(void disconnectAll(String)): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void disconnectAll(String)): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void disconnectAll(String)): com/dmdirc/Server.__Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void disconnectAll(String)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/Server.__Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void disconnectAll(String)): com/dmdirc/ServerState.CONNECTED
    //#input(void disconnectAll(String)): com/dmdirc/ServerState.DISCONNECTED
    //#input(void disconnectAll(String)): com/dmdirc/ServerState.DISCONNECTING
    //#input(void disconnectAll(String)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void disconnectAll(String)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void disconnectAll(String)): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void disconnectAll(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void disconnectAll(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void disconnectAll(String)): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void disconnectAll(String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void disconnectAll(String)): message
    //#input(void disconnectAll(String)): this
    //#input(void disconnectAll(String)): this.servers
    //#input(void disconnectAll(String)): this.servers.__Lock
    //#pre[4] (void disconnectAll(String)): this.servers != null
    //#pre[1] (void disconnectAll(String)): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#presumption(void disconnectAll(String)): java.util.Iterator:next(...).__Tag@102 == com/dmdirc/Server
    //#presumption(void disconnectAll(String)): java.util.Iterator:next(...)@102 != null
    //#presumption(void disconnectAll(String)): server.channels@102 != null
    //#presumption(void disconnectAll(String)): server.config@102 != null
    //#presumption(void disconnectAll(String)): server.invites@102 != null
    //#presumption(void disconnectAll(String)): server.listeners@102 != null
    //#presumption(void disconnectAll(String)): server.myState.__Tag@102 == com/dmdirc/ServerStatus
    //#presumption(void disconnectAll(String)): server.myState.history@102 != null
    //#presumption(void disconnectAll(String)): server.myState.state.transitions@102 != null
    //#presumption(void disconnectAll(String)): server.myState.state@102 != null
    //#presumption(void disconnectAll(String)): server.myState@102 != null
    //#presumption(void disconnectAll(String)): server.parserThread@102 != null
    //#presumption(void disconnectAll(String)): server.reconnectTimer@102 != null
    //#presumption(void disconnectAll(String)): server.serverInfo@102 != null
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:setIcon
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:getConfigManager
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:updateIcon
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:removeInvites
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:clearChannels
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:closeChannels
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:closeQueries
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:close
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:getFrame
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void disconnectAll(String)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#test_vector(void disconnectAll(String)): java.util.Iterator:hasNext(...)@102: {1}, {0}
            for (Server server : servers) {
                server.disconnect(message);
            }
        }
    }
    //#ServerManager.java:106: end of method: void com.dmdirc.ServerManager.disconnectAll(String)

    /**
     * Closes all servers with a default quit message.
     */
    public void closeAll() {
        synchronized (servers) {
    //#ServerManager.java:112: method: void com.dmdirc.ServerManager.closeAll()
    //#input(void closeAll()): " ["._tainted
    //#input(void closeAll()): "->"._tainted
    //#input(void closeAll()): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void closeAll()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void closeAll()): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void closeAll()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void closeAll()): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void closeAll()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void closeAll()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void closeAll()): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void closeAll()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void closeAll()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void closeAll()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void closeAll()): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void closeAll()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void closeAll()): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void closeAll()): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void closeAll()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void closeAll()): com/dmdirc/Server.DOMAIN_GENERAL
    //#input(void closeAll()): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void closeAll()): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void closeAll()): com/dmdirc/Server.__Dispatch_Table.disconnect()V
    //#input(void closeAll()): com/dmdirc/Server.__Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void closeAll()): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/Server.__Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void closeAll()): com/dmdirc/ServerState.CONNECTED
    //#input(void closeAll()): com/dmdirc/ServerState.DISCONNECTED
    //#input(void closeAll()): com/dmdirc/ServerState.DISCONNECTING
    //#input(void closeAll()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void closeAll()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void closeAll()): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void closeAll()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void closeAll()): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void closeAll()): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void closeAll()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll()): this
    //#input(void closeAll()): this.servers
    //#input(void closeAll()): this.servers.__Lock
    //#pre[3] (void closeAll()): this.servers != null
    //#pre[1] (void closeAll()): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#presumption(void closeAll()): java.util.Iterator:next(...).__Tag@113 == com/dmdirc/Server
    //#presumption(void closeAll()): java.util.Iterator:next(...)@113 != null
    //#presumption(void closeAll()): server.channels@113 != null
    //#presumption(void closeAll()): server.config@113 != null
    //#presumption(void closeAll()): server.invites@113 != null
    //#presumption(void closeAll()): server.listeners@113 != null
    //#presumption(void closeAll()): server.myState.__Tag@113 == com/dmdirc/ServerStatus
    //#presumption(void closeAll()): server.myState.history@113 != null
    //#presumption(void closeAll()): server.myState.state.transitions@113 != null
    //#presumption(void closeAll()): server.myState.state@113 != null
    //#presumption(void closeAll()): server.myState@113 != null
    //#presumption(void closeAll()): server.parserThread@113 != null
    //#presumption(void closeAll()): server.reconnectTimer@113 != null
    //#presumption(void closeAll()): server.serverInfo@113 != null
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void closeAll()): Effects-of-calling:setIcon
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void closeAll()): Effects-of-calling:getConfigManager
    //#unanalyzed(void closeAll()): Effects-of-calling:updateIcon
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void closeAll()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void closeAll()): Effects-of-calling:removeInvites
    //#unanalyzed(void closeAll()): Effects-of-calling:clearChannels
    //#unanalyzed(void closeAll()): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void closeAll()): Effects-of-calling:closeChannels
    //#unanalyzed(void closeAll()): Effects-of-calling:closeQueries
    //#unanalyzed(void closeAll()): Effects-of-calling:close
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void closeAll()): Effects-of-calling:getFrame
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void closeAll()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#test_vector(void closeAll()): java.util.Iterator:hasNext(...)@113: {1}, {0}
            for (Server server : servers) {
                server.disconnect();
                server.close();
    //#ServerManager.java:115: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.Server:close()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ServerManager
    //#    method: void closeAll()
    //#    unanalyzed callee: void com.dmdirc.Server:close()
            }
        }
    }
    //#ServerManager.java:118: end of method: void com.dmdirc.ServerManager.closeAll()

    /**
     * Closes all servers with the specified quit message.
     *
     * @param message The quit message to send to the IRC servers
     */
    public void closeAll(final String message) {
        synchronized (servers) {
    //#ServerManager.java:126: method: void com.dmdirc.ServerManager.closeAll(String)
    //#input(void closeAll(String)): " ["._tainted
    //#input(void closeAll(String)): "->"._tainted
    //#input(void closeAll(String)): "Illegal server state transition&#10;&#10;"._tainted
    //#input(void closeAll(String)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1).length
    //#input(void closeAll(String)): com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295]
    //#input(void closeAll(String)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#7).transitions
    //#input(void closeAll(String)): com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#9).transitions
    //#input(void closeAll(String)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void closeAll(String)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void closeAll(String)): com/dmdirc/Channel.__Dispatch_Table.close()V
    //#input(void closeAll(String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/Channel.__Dispatch_Table.resetWindow()V
    //#input(void closeAll(String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void closeAll(String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void closeAll(String)): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void closeAll(String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(void closeAll(String)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(void closeAll(String)): com/dmdirc/Query.__Dispatch_Table.close()V
    //#input(void closeAll(String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/Server$4.$SwitchMap$com$dmdirc$ServerState
    //#input(void closeAll(String)): com/dmdirc/Server.DOMAIN_GENERAL
    //#input(void closeAll(String)): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void closeAll(String)): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void closeAll(String)): com/dmdirc/Server.__Dispatch_Table.disconnect(Ljava/lang/String;)V
    //#input(void closeAll(String)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/Server.__Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void closeAll(String)): com/dmdirc/ServerState.CONNECTED
    //#input(void closeAll(String)): com/dmdirc/ServerState.DISCONNECTED
    //#input(void closeAll(String)): com/dmdirc/ServerState.DISCONNECTING
    //#input(void closeAll(String)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void closeAll(String)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void closeAll(String)): com/dmdirc/ServerStatus.__Dispatch_Table.addHistoryEntry(Lcom/dmdirc/ServerState;Lcom/dmdirc/ServerState;)V
    //#input(void closeAll(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void closeAll(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getTransitionHistory()Ljava/lang/String;
    //#input(void closeAll(String)): com/dmdirc/ServerStatus.__Dispatch_Table.transition(Lcom/dmdirc/ServerState;)V
    //#input(void closeAll(String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void closeAll(String)): message
    //#input(void closeAll(String)): this
    //#input(void closeAll(String)): this.servers
    //#input(void closeAll(String)): this.servers.__Lock
    //#pre[4] (void closeAll(String)): this.servers != null
    //#pre[1] (void closeAll(String)): (soft) init'ed(com.dmdirc.Server$4__static_init.new int[](Server$4__static_init#1)[0..4_294_967_295])
    //#presumption(void closeAll(String)): java.util.Iterator:next(...).__Tag@127 == com/dmdirc/Server
    //#presumption(void closeAll(String)): java.util.Iterator:next(...)@127 != null
    //#presumption(void closeAll(String)): server.channels@127 != null
    //#presumption(void closeAll(String)): server.config@127 != null
    //#presumption(void closeAll(String)): server.invites@127 != null
    //#presumption(void closeAll(String)): server.listeners@127 != null
    //#presumption(void closeAll(String)): server.myState.__Tag@127 == com/dmdirc/ServerStatus
    //#presumption(void closeAll(String)): server.myState.history@127 != null
    //#presumption(void closeAll(String)): server.myState.state.transitions@127 != null
    //#presumption(void closeAll(String)): server.myState.state@127 != null
    //#presumption(void closeAll(String)): server.myState@127 != null
    //#presumption(void closeAll(String)): server.parserThread@127 != null
    //#presumption(void closeAll(String)): server.reconnectTimer@127 != null
    //#presumption(void closeAll(String)): server.serverInfo@127 != null
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void closeAll(String)): Effects-of-calling:setIcon
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void closeAll(String)): Effects-of-calling:getConfigManager
    //#unanalyzed(void closeAll(String)): Effects-of-calling:updateIcon
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.ServerState:ordinal
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.Timer:cancel
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.util.RollingList:getList
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.ServerState:name
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.Thread:currentThread
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.Thread:getStackTrace
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.StackTraceElement:toString
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.Thread:getName
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.util.RollingList:add
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void closeAll(String)): Effects-of-calling:removeInvites
    //#unanalyzed(void closeAll(String)): Effects-of-calling:clearChannels
    //#unanalyzed(void closeAll(String)): Effects-of-calling:java.lang.Thread:interrupt
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:disconnect
    //#unanalyzed(void closeAll(String)): Effects-of-calling:closeChannels
    //#unanalyzed(void closeAll(String)): Effects-of-calling:closeQueries
    //#unanalyzed(void closeAll(String)): Effects-of-calling:close
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.ui.interfaces.ChannelWindow:updateNames
    //#unanalyzed(void closeAll(String)): Effects-of-calling:getFrame
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void closeAll(String)): Effects-of-calling:com.dmdirc.ui.interfaces.Window:close
    //#test_vector(void closeAll(String)): java.util.Iterator:hasNext(...)@127: {1}, {0}
            for (Server server : servers) {
                server.disconnect(message);
                server.close();
    //#ServerManager.java:129: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.Server:close()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ServerManager
    //#    method: void closeAll(String)
    //#    unanalyzed callee: void com.dmdirc.Server:close()
            }
        }
    }
    //#ServerManager.java:132: end of method: void com.dmdirc.ServerManager.closeAll(String)

    /**
     * Returns the number of servers that are registered with the manager.
     *
     * @return number of registered servers
     */
    public int numServers() {
        return servers.size();
    //#ServerManager.java:140: method: int com.dmdirc.ServerManager.numServers()
    //#input(int numServers()): this
    //#input(int numServers()): this.servers
    //#output(int numServers()): return_value
    //#pre[2] (int numServers()): this.servers != null
    //#post(int numServers()): init'ed(return_value)
    //#ServerManager.java:140: end of method: int com.dmdirc.ServerManager.numServers()
    }

    /**
     * Returns the server instance that owns the specified internal frame.
     *
     * @param active The internal frame to check
     * @return The server associated with the internal frame
     */
    public Server getServerFromFrame(final Window active) {
        synchronized (servers) {
    //#ServerManager.java:150: method: Server com.dmdirc.ServerManager.getServerFromFrame(Window)
    //#input(Server getServerFromFrame(Window)): active
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Channel.__Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#input(Server getServerFromFrame(Window)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Query.__Descendant_Table[com/dmdirc/Query]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Query.__Descendant_Table[others]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Query.__Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Raw.__Descendant_Table[com/dmdirc/Raw]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Raw.__Descendant_Table[others]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Raw.__Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Server.__Descendant_Table[others]
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/Server.__Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#input(Server getServerFromFrame(Window)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(Server getServerFromFrame(Window)): this
    //#input(Server getServerFromFrame(Window)): this.servers
    //#input(Server getServerFromFrame(Window)): this.servers.__Lock
    //#output(Server getServerFromFrame(Window)): return_value
    //#pre[3] (Server getServerFromFrame(Window)): this.servers != null
    //#presumption(Server getServerFromFrame(Window)): java.util.Iterator:next(...).__Tag@151 == com/dmdirc/Server
    //#presumption(Server getServerFromFrame(Window)): java.util.Iterator:next(...)@151 != null
    //#presumption(Server getServerFromFrame(Window)): server.channels@151 != null
    //#presumption(Server getServerFromFrame(Window)): server.queries@151 != null
    //#presumption(Server getServerFromFrame(Window)): server.raw.__Tag@151 == com/dmdirc/Raw
    //#post(Server getServerFromFrame(Window)): init'ed(return_value)
    //#unanalyzed(Server getServerFromFrame(Window)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(Server getServerFromFrame(Window)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(Server getServerFromFrame(Window)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(Server getServerFromFrame(Window)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(Server getServerFromFrame(Window)): Effects-of-calling:java.lang.Object:equals
    //#unanalyzed(Server getServerFromFrame(Window)): Effects-of-calling:ownsFrame
    //#unanalyzed(Server getServerFromFrame(Window)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(Server getServerFromFrame(Window)): Effects-of-calling:getFrame
    //#test_vector(Server getServerFromFrame(Window)): java.util.Iterator:hasNext(...)@151: {1}, {0}
            for (Server server : servers) {
                if (server.ownsFrame(active)) {
                    return server;
                }
            }
        }

        return null;
    //#ServerManager.java:158: end of method: Server com.dmdirc.ServerManager.getServerFromFrame(Window)
    }

    /**
     * Retrieves a list of servers connected to the specified network.
     *
     * @param network The network to search for
     * @return A list of servers connected to the network
     */
    public List<Server> getServersByNetwork(final String network) {
        final List<Server> res = new ArrayList<Server>();
    //#ServerManager.java:168: method: List com.dmdirc.ServerManager.getServersByNetwork(String)
    //#input(List getServersByNetwork(String)): ")"._tainted
    //#input(List getServersByNetwork(String)): "."._tainted
    //#input(List getServersByNetwork(String)): "biz"._tainted
    //#input(List getServersByNetwork(String)): "com"._tainted
    //#input(List getServersByNetwork(String)): "getNetwork called when parser is null (state: "._tainted
    //#input(List getServersByNetwork(String)): "info"._tainted
    //#input(List getServersByNetwork(String)): "net"._tainted
    //#input(List getServersByNetwork(String)): "org"._tainted
    //#input(List getServersByNetwork(String)): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(List getServersByNetwork(String)): com/dmdirc/Server.__Descendant_Table[others]
    //#input(List getServersByNetwork(String)): com/dmdirc/Server.__Dispatch_Table.getNetwork()Ljava/lang/String;
    //#input(List getServersByNetwork(String)): com/dmdirc/Server.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(List getServersByNetwork(String)): com/dmdirc/Server.__Dispatch_Table.isNetwork(Ljava/lang/String;)Z
    //#input(List getServersByNetwork(String)): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(List getServersByNetwork(String)): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(List getServersByNetwork(String)): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(List getServersByNetwork(String)): network
    //#input(List getServersByNetwork(String)): this
    //#input(List getServersByNetwork(String)): this.servers
    //#input(List getServersByNetwork(String)): this.servers.__Lock
    //#output(List getServersByNetwork(String)): new ArrayList(getServersByNetwork#1) num objects
    //#output(List getServersByNetwork(String)): return_value
    //#new obj(List getServersByNetwork(String)): new ArrayList(getServersByNetwork#1)
    //#pre[3] (List getServersByNetwork(String)): this.servers != null
    //#presumption(List getServersByNetwork(String)): java.util.Iterator:next(...).__Tag@171 == com/dmdirc/Server
    //#presumption(List getServersByNetwork(String)): java.util.Iterator:next(...)@171 != null
    //#post(List getServersByNetwork(String)): return_value == &new ArrayList(getServersByNetwork#1)
    //#post(List getServersByNetwork(String)): new ArrayList(getServersByNetwork#1) num objects == 1
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:getNetwork
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:java.lang.IllegalStateException
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getNetworkName
    //#unanalyzed(List getServersByNetwork(String)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getServerName
    //#test_vector(List getServersByNetwork(String)): java.util.Iterator:hasNext(...)@171: {1}, {0}

        synchronized (servers) {
            for (Server server : servers) {
                if (server.isNetwork(network)) {
                    res.add(server);
                }
            }
        }

        return res;
    //#ServerManager.java:178: end of method: List com.dmdirc.ServerManager.getServersByNetwork(String)
    }

    /**
     * Retrieves a list of servers connected to the specified address.
     *
     * @param address The address to search for
     * @return A list of servers connected to the network
     */
    public List<Server> getServersByAddress(final String address) {
        final List<Server> res = new ArrayList<Server>();
    //#ServerManager.java:188: method: List com.dmdirc.ServerManager.getServersByAddress(String)
    //#input(List getServersByAddress(String)): address
    //#input(List getServersByAddress(String)): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(List getServersByAddress(String)): com/dmdirc/Server.__Descendant_Table[others]
    //#input(List getServersByAddress(String)): com/dmdirc/Server.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(List getServersByAddress(String)): this
    //#input(List getServersByAddress(String)): this.servers
    //#input(List getServersByAddress(String)): this.servers.__Lock
    //#output(List getServersByAddress(String)): new ArrayList(getServersByAddress#1) num objects
    //#output(List getServersByAddress(String)): return_value
    //#new obj(List getServersByAddress(String)): new ArrayList(getServersByAddress#1)
    //#pre[3] (List getServersByAddress(String)): this.servers != null
    //#presumption(List getServersByAddress(String)): com.dmdirc.parser.irc.ServerInfo:getHost(...)@862 != null
    //#presumption(List getServersByAddress(String)): java.util.Iterator:next(...).__Tag@191 == com/dmdirc/Server
    //#presumption(List getServersByAddress(String)): java.util.Iterator:next(...)@191 != null
    //#presumption(List getServersByAddress(String)): server.serverInfo@191 != null
    //#post(List getServersByAddress(String)): return_value == &new ArrayList(getServersByAddress#1)
    //#post(List getServersByAddress(String)): new ArrayList(getServersByAddress#1) num objects == 1
    //#unanalyzed(List getServersByAddress(String)): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getHost
    //#test_vector(List getServersByAddress(String)): java.lang.String:equalsIgnoreCase(...)@192: {0}, {1}
    //#test_vector(List getServersByAddress(String)): java.util.Iterator:hasNext(...)@191: {1}, {0}

        synchronized (servers) {
            for (Server server : servers) {
                if (server.getName().equalsIgnoreCase(address)) {
                    res.add(server);
                }
            }
        }

        return res;
    //#ServerManager.java:198: end of method: List com.dmdirc.ServerManager.getServersByAddress(String)
    }

    /**
     * Connects the user to Quakenet if neccessary and joins #DMDirc.
     */
    public void joinDevChat() {
        final List<Server> qnetServers = getServersByNetwork("Quakenet");
    //#ServerManager.java:205: method: void com.dmdirc.ServerManager.joinDevChat()
    //#input(void joinDevChat()): ")"._tainted
    //#input(void joinDevChat()): "."._tainted
    //#input(void joinDevChat()): "biz"._tainted
    //#input(void joinDevChat()): "com"._tainted
    //#input(void joinDevChat()): "getNetwork called when parser is null (state: "._tainted
    //#input(void joinDevChat()): "info"._tainted
    //#input(void joinDevChat()): "net"._tainted
    //#input(void joinDevChat()): "org"._tainted
    //#input(void joinDevChat()): com/dmdirc/Channel.__Descendant_Table[com/dmdirc/Channel]
    //#input(void joinDevChat()): com/dmdirc/Channel.__Descendant_Table[others]
    //#input(void joinDevChat()): com/dmdirc/Channel.__Dispatch_Table.activateFrame()V
    //#input(void joinDevChat()): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/Channel.__Dispatch_Table.join()V
    //#input(void joinDevChat()): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void joinDevChat()): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/Invite.__Descendant_Table[com/dmdirc/Invite]
    //#input(void joinDevChat()): com/dmdirc/Invite.__Descendant_Table[others]
    //#input(void joinDevChat()): com/dmdirc/Invite.__Dispatch_Table.getChannel()Ljava/lang/String;
    //#input(void joinDevChat()): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(void joinDevChat()): com/dmdirc/Server.__Descendant_Table[others]
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.getChannel(Ljava/lang/String;)Lcom/dmdirc/Channel;
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.getNetwork()Ljava/lang/String;
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.getParser()Lcom/dmdirc/parser/irc/IRCParser;
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.hasChannel(Ljava/lang/String;)Z
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.isNetwork(Ljava/lang/String;)Z
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.join(Ljava/lang/String;)V
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.removeInvite(Lcom/dmdirc/Invite;)V
    //#input(void joinDevChat()): com/dmdirc/Server.__Dispatch_Table.removeInvites(Ljava/lang/String;)V
    //#input(void joinDevChat()): com/dmdirc/ServerState.CONNECTED
    //#input(void joinDevChat()): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(void joinDevChat()): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(void joinDevChat()): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(void joinDevChat()): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void joinDevChat()): this
    //#input(void joinDevChat()): this.servers
    //#output(void joinDevChat()): com/dmdirc/actions/wrappers/AliasWrapper.me
    //#output(void joinDevChat()): me
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1) num objects
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).__Tag
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).actions
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).aliases
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).author
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).component
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).description
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).name
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).settings
    //#output(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).version
    //#output(void joinDevChat()): new ArrayList(ActionGroup#1) num objects
    //#output(void joinDevChat()): new ArrayList(AliasWrapper#1) num objects
    //#output(void joinDevChat()): new ArrayList(ServerManager#1) num objects
    //#output(void joinDevChat()): new ArrayList(ServerManager#1).__Lock
    //#output(void joinDevChat()): new HashMap(ActionGroup#2) num objects
    //#output(void joinDevChat()): new ServerManager(getServerManager#1) num objects
    //#output(void joinDevChat()): new ServerManager(getServerManager#1).__Tag
    //#output(void joinDevChat()): new ServerManager(getServerManager#1).servers
    //#new obj(void joinDevChat()): new AliasWrapper(getAliasWrapper#1)
    //#new obj(void joinDevChat()): new ArrayList(ActionGroup#1)
    //#new obj(void joinDevChat()): new ArrayList(AliasWrapper#1)
    //#new obj(void joinDevChat()): new ArrayList(ServerManager#1)
    //#new obj(void joinDevChat()): new HashMap(ActionGroup#2)
    //#new obj(void joinDevChat()): new ServerManager(getServerManager#1)
    //#pre[7] (void joinDevChat()): this.servers != null
    //#pre[4] (void joinDevChat()): (soft) init'ed(com/dmdirc/actions/wrappers/AliasWrapper.me)
    //#pre[5] (void joinDevChat()): (soft) init'ed(me)
    //#presumption(void joinDevChat()): com.dmdirc.config.IdentityManager:getProfiles(...)@224 != null
    //#presumption(void joinDevChat()): connectedServer.__Tag@209 == com/dmdirc/Server
    //#presumption(void joinDevChat()): connectedServer.autochannels@209 != null
    //#presumption(void joinDevChat()): connectedServer.channels@209 != null
    //#presumption(void joinDevChat()): connectedServer.converter@209 != null
    //#presumption(void joinDevChat()): connectedServer.invites@209 != null
    //#presumption(void joinDevChat()): connectedServer.listeners@209 != null
    //#presumption(void joinDevChat()): connectedServer.myState.__Tag@209 == com/dmdirc/ServerStatus
    //#presumption(void joinDevChat()): connectedServer.myState@209 != null
    //#presumption(void joinDevChat()): java.util.Iterator:next(...).__Tag@209 == com/dmdirc/Server
    //#presumption(void joinDevChat()): java.util.Iterator:next(...)@209 != null
    //#presumption(void joinDevChat()): server.autochannels@209 != null
    //#presumption(void joinDevChat()): server.channels@209 != null
    //#presumption(void joinDevChat()): server.converter@209 != null
    //#presumption(void joinDevChat()): server.converter@213 != null
    //#presumption(void joinDevChat()): server.invites@209 != null
    //#presumption(void joinDevChat()): server.listeners@209 != null
    //#presumption(void joinDevChat()): server.myState.__Tag@209 == com/dmdirc/ServerStatus
    //#presumption(void joinDevChat()): server.myState@209 != null
    //#presumption(void joinDevChat()): server.parser@213 != null
    //#post(void joinDevChat()): com/dmdirc/actions/wrappers/AliasWrapper.me == old com/dmdirc/actions/wrappers/AliasWrapper.me
    //#post(void joinDevChat()): me == old me
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1) num objects == 0, if init'ed
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).__Tag not init'ed, if init'ed
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).actions == null
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).aliases == null
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).author == null
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).component == 0, if init'ed
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).description == null
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).name == null
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).settings == null
    //#post(void joinDevChat()): new AliasWrapper(getAliasWrapper#1).version == 0, if init'ed
    //#post(void joinDevChat()): new ArrayList(ActionGroup#1) num objects == 0, if init'ed
    //#post(void joinDevChat()): new ArrayList(AliasWrapper#1) num objects == 0, if init'ed
    //#post(void joinDevChat()): new ArrayList(ServerManager#1) num objects == 0, if init'ed
    //#post(void joinDevChat()): new ArrayList(ServerManager#1).__Lock == 0, if init'ed
    //#post(void joinDevChat()): new HashMap(ActionGroup#2) num objects == 0, if init'ed
    //#post(void joinDevChat()): new ServerManager(getServerManager#1) num objects == 0, if init'ed
    //#post(void joinDevChat()): new ServerManager(getServerManager#1).__Tag not init'ed, if init'ed
    //#post(void joinDevChat()): new ServerManager(getServerManager#1).servers == null
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void joinDevChat()): Effects-of-calling:isNetwork
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.interfaces.InviteListener:inviteExpired
    //#unanalyzed(void joinDevChat()): Effects-of-calling:getParser
    //#unanalyzed(void joinDevChat()): Effects-of-calling:removeInvites
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getName
    //#unanalyzed(void joinDevChat()): Effects-of-calling:setIcon
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:joinChannel
    //#unanalyzed(void joinDevChat()): Effects-of-calling:activateFrame
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void joinDevChat()): Effects-of-calling:getConfigManager
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:setSSL
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionInt
    //#unanalyzed(void joinDevChat()): Effects-of-calling:getTabCompleter
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.WritableFrameContainer
    //#unanalyzed(void joinDevChat()): Effects-of-calling:getUI
    //#unanalyzed(void joinDevChat()): Effects-of-calling:getFrame
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getCallbackManager
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.callbacks.CallbackManager:addCallback
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.ServerInfo:getSSL
    //#unanalyzed(void joinDevChat()): Effects-of-calling:connect
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.Server:getConfigManager
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getInputWindow
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.WindowManager:addWindow
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:setTitle
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getInputHandler
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.input.InputHandler:setTabCompleter
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:open
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.Timer
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.config.ConfigManager
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.Hashtable
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.util.RollingList
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.input.TabCompleter
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.EventHandler
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.RegexStringList
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getServer
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.ServerWindow:setTitle
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.actions.ActionGroup
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.input.TabCompleter:addEntries
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.ServerWindow:getInputHandler
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.ServerWindow:open
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.commandparser.CommandManager:getCommandNames
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.TimerTask
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.Timer:schedule
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.Server
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.String:endsWith
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.StringBuilder:length
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void joinDevChat()): Effects-of-calling:getNetwork
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.lang.IllegalStateException
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getNetworkName
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getServerName
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.ui.interfaces.Window:activateFrame
    //#unanalyzed(void joinDevChat()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void joinDevChat()): Effects-of-calling:java.util.HashMap
    //#test_vector(void joinDevChat()): java.util.Iterator:hasNext(...)@209: {0}, {1}
    //#test_vector(void joinDevChat()): java.util.Map:containsKey(...)@445: {0}, {1}
    //#test_vector(void joinDevChat()): server.myState.state@209: Inverse{&com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#3)}, Addr_Set{&com.dmdirc.ServerState__static_init.new ServerState(ServerState__static_init#3)}

        Server connectedServer = null;

        for (Server server : qnetServers) {
            if (server.getState() == ServerState.CONNECTED) {
                connectedServer = server;

                if (server.hasChannel("#DMDirc")) {
                    server.join("#DMDirc");
                    return;
                }
            }
        }

        if (connectedServer == null) {
            final List<String> channels = new ArrayList<String>();
                channels.add("#DMDirc");

                new Server("irc.quakenet.org", 6667, "", false,
    //#ServerManager.java:224: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.IdentityManager:getProfiles()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ServerManager
    //#    method: void joinDevChat()
    //#    unanalyzed callee: List com.dmdirc.config.IdentityManager:getProfiles()
                        IdentityManager.getProfiles().get(0), channels);
        } else {
            connectedServer.join("#DMDirc");
    //#ServerManager.java:227: ?precondition failure
    //#    com/dmdirc/Server.join: this.myState.__Tag == com/dmdirc/ServerStatus
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.ServerManager
    //#    method: void joinDevChat()
    //#    basic block: bb_9
    //#    assertion: connectedServer.myState.__Tag == com/dmdirc/ServerStatus
    //#    callee: void com/dmdirc/Server.join(String)
    //#    callee assertion: this.myState.__Tag == com/dmdirc/ServerStatus
    //#    callee file: Server.java
    //#    callee precondition index: [13]
    //#    callee srcpos: 806
    //#    VN: connectedServer.myState.__Tag
    //#    Expected: {318_976}
    //#    Bad: {0, Invalid}
    //#    Attribs:  Int  Exp singleton  Bad singleton  Bad overlaps +/-1000  Bad < Exp  Uncertain
    //#ServerManager.java:227: ?precondition failure
    //#    com/dmdirc/Server.join: init'ed(this.myState.state)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.ServerManager
    //#    method: void joinDevChat()
    //#    basic block: bb_9
    //#    assertion: init'ed(connectedServer.myState.state)
    //#    callee: void com/dmdirc/Server.join(String)
    //#    callee assertion: init'ed(this.myState.state)
    //#    callee file: Server.java
    //#    callee precondition index: [14]
    //#    callee srcpos: 806
    //#    VN: connectedServer.myState.state
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid  Uncertain
    //#ServerManager.java:227: ?!precondition failure
    //#    com/dmdirc/Server.join: (soft) this.parser != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.ServerManager
    //#    method: void joinDevChat()
    //#    basic block: bb_9
    //#    assertion: (soft) undefined != null
    //#    callee: void com/dmdirc/Server.join(String)
    //#    callee assertion: (soft) this.parser != null
    //#    callee file: Server.java
    //#    callee precondition index: [15]
    //#    callee srcpos: 806
    //#    VN: undefined
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null, Invalid}
    //#    Attribs:  Ptr  null in Bad  Soft
        }
    }
    //#ServerManager.java:229: end of method: void com.dmdirc.ServerManager.joinDevChat()

}
    //#output(com.dmdirc.ServerManager__static_init): __Descendant_Table[com/dmdirc/ServerManager]
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.closeAll()V
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.closeAll(Ljava/lang/String;)V
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.disconnectAll(Ljava/lang/String;)V
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.getServerFromFrame(Lcom/dmdirc/ui/interfaces/Window;)Lcom/dmdirc/Server;
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.getServers()Ljava/util/List;
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.getServersByAddress(Ljava/lang/String;)Ljava/util/List;
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.getServersByNetwork(Ljava/lang/String;)Ljava/util/List;
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.joinDevChat()V
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.numServers()I
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.registerServer(Lcom/dmdirc/Server;)V
    //#output(com.dmdirc.ServerManager__static_init): __Dispatch_Table.unregisterServer(Lcom/dmdirc/Server;)V
    //#post(com.dmdirc.ServerManager__static_init): __Descendant_Table[com/dmdirc/ServerManager] == &__Dispatch_Table
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.closeAll()V == &closeAll
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.closeAll(Ljava/lang/String;)V == &closeAll
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.disconnectAll(Ljava/lang/String;)V == &disconnectAll
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.getServerFromFrame(Lcom/dmdirc/ui/interfaces/Window;)Lcom/dmdirc/Server; == &getServerFromFrame
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.getServers()Ljava/util/List; == &getServers
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.getServersByAddress(Ljava/lang/String;)Ljava/util/List; == &getServersByAddress
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.getServersByNetwork(Ljava/lang/String;)Ljava/util/List; == &getServersByNetwork
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.joinDevChat()V == &joinDevChat
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.numServers()I == &numServers
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.registerServer(Lcom/dmdirc/Server;)V == &registerServer
    //#post(com.dmdirc.ServerManager__static_init): __Dispatch_Table.unregisterServer(Lcom/dmdirc/Server;)V == &unregisterServer
    //#ServerManager.java:: end of method: com.dmdirc.ServerManager.com.dmdirc.ServerManager__static_init
    //#ServerManager.java:: end of class: com.dmdirc.ServerManager
