//# 2 errors, 212 messages
//#
/*
    //#IrcAddress.java:1:1: class: com.dmdirc.util.IrcAddress
    //#IrcAddress.java:1:1: method: com.dmdirc.util.IrcAddress.com.dmdirc.util.IrcAddress__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.util;

import com.dmdirc.Server;
import com.dmdirc.ServerManager;
import com.dmdirc.config.Identity;
import com.dmdirc.config.IdentityManager;

import java.io.Serializable;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;

/**
 * Parses an IRC address. IRC addresses take the following form:
 * irc[s]://[[username][:password]@]<server>[:[+]port][/channel1[,channel2[,...]]]
 * 
 * @author Chris
 */
public class IrcAddress implements Serializable {
    
    /**
     * A version number for this class. It should be changed whenever the class
     * structure is changed (or anything else that would prevent serialized
     * objects being unserialized with the new class).
     */    
    private final static long serialVersionUID = 1;

    /** Whether or not this address uses SSL. */
    private boolean usesSSL;
    /** The server name for this address. */
    private String server;
    /** The port number for this address. */
    private int port = 6667;
    /** A list of channels to auto-connect to. */
    private List<String> channels = new ArrayList<String>();
    /** The password for this address. */
    private String pass = "";

    /**
     * Creates a new instance of IrcAddress.
     * 
     * @param address The address to parse
     * @throws InvalidAddressException If an invalid address is passed
     */
    public IrcAddress(final String address) throws InvalidAddressException {
    //#IrcAddress.java:68: method: void com.dmdirc.util.IrcAddress.com.dmdirc.util.IrcAddress(String)
    //#input(void com.dmdirc.util.IrcAddress(String)): ""._tainted
    //#input(void com.dmdirc.util.IrcAddress(String)): "#"._tainted
    //#input(void com.dmdirc.util.IrcAddress(String)): "?"._tainted
    //#input(void com.dmdirc.util.IrcAddress(String)): address
    //#input(void com.dmdirc.util.IrcAddress(String)): this
    //#output(void com.dmdirc.util.IrcAddress(String)): new ArrayList(IrcAddress#1) num objects
    //#output(void com.dmdirc.util.IrcAddress(String)): this.channels
    //#output(void com.dmdirc.util.IrcAddress(String)): this.pass
    //#output(void com.dmdirc.util.IrcAddress(String)): this.port
    //#output(void com.dmdirc.util.IrcAddress(String)): this.server
    //#output(void com.dmdirc.util.IrcAddress(String)): this.usesSSL
    //#new obj(void com.dmdirc.util.IrcAddress(String)): new ArrayList(IrcAddress#1)
    //#pre[1] (void com.dmdirc.util.IrcAddress(String)): address != null
    //#presumption(void com.dmdirc.util.IrcAddress(String)): java.lang.String:equalsIgnoreCase(...)@86 == 1
    //#presumption(void com.dmdirc.util.IrcAddress(String)): java.net.URI:getHost(...)@102 != null
    //#presumption(void com.dmdirc.util.IrcAddress(String)): java.net.URI:getScheme(...)@84 != null
    //#presumption(void com.dmdirc.util.IrcAddress(String)): java.net.URI:getScheme(...)@86 != null
    //#presumption(void com.dmdirc.util.IrcAddress(String)): java.net.URI:getScheme(...)@86 != null
    //#post(void com.dmdirc.util.IrcAddress(String)): this.channels == &new ArrayList(IrcAddress#1)
    //#post(void com.dmdirc.util.IrcAddress(String)): init'ed(this.pass)
    //#post(void com.dmdirc.util.IrcAddress(String)): init'ed(this.port)
    //#post(void com.dmdirc.util.IrcAddress(String)): init'ed(this.server)
    //#post(void com.dmdirc.util.IrcAddress(String)): possibly_updated(this.usesSSL)
    //#post(void com.dmdirc.util.IrcAddress(String)): new ArrayList(IrcAddress#1) num objects == 1
    //#unanalyzed(void com.dmdirc.util.IrcAddress(String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void com.dmdirc.util.IrcAddress(String)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void com.dmdirc.util.IrcAddress(String)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void com.dmdirc.util.IrcAddress(String)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void com.dmdirc.util.IrcAddress(String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void com.dmdirc.util.IrcAddress(String)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void com.dmdirc.util.IrcAddress(String)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.util.IrcAddress(String)): Effects-of-calling:java.lang.Exception
    //#test_vector(void com.dmdirc.util.IrcAddress(String)): java.lang.String:equalsIgnoreCase(...)@84: {0}, {1}
    //#test_vector(void com.dmdirc.util.IrcAddress(String)): java.net.URI:getPort(...)@98: {-2_147_483_648..-1}, {0..4_294_967_295}
    //#test_vector(void com.dmdirc.util.IrcAddress(String)): java.net.URI:getScheme(...)@84: Addr_Set{null}, Inverse{null}
    //#test_vector(void com.dmdirc.util.IrcAddress(String)): java.net.URI:getUserInfo(...)@90: Addr_Set{null}, Inverse{null}
        URI uri;
        String myAddress;
        
        // Check for +ports (SSL)
        myAddress = address.replaceFirst(":\\+([0-9]+)", ":$1");
        if (myAddress.length() < address.length()) {
            usesSSL = true;
        }
        
        try {
            uri = new URI(myAddress);
        } catch (URISyntaxException ex) {
            throw new InvalidAddressException("Unable to parse URI", ex);
        }
        
        if (uri.getScheme() != null && uri.getScheme().equalsIgnoreCase("ircs")) {
            usesSSL = true;
        } else if (uri.getScheme() == null || !uri.getScheme().equalsIgnoreCase("irc")) {
            throw new InvalidAddressException("Invalid protocol specified");
        }
        
        if (uri.getUserInfo() != null) {
            doPass(uri.getUserInfo());
        }
        
        doChannels(uri.getPath() + (uri.getQuery() == null ? "" :
            "?" + uri.getQuery()) + (uri.getFragment() == null ? "" :
            "#" + uri.getFragment()));

        if (uri.getPort() > -1) {
            doPort(uri.getPort());
        }

        if (uri.getHost() == null) {
            throw new InvalidAddressException("Invalid host or port specified");
        } else {
            doServer(uri.getHost());
        }
    }
    //#IrcAddress.java:107: end of method: void com.dmdirc.util.IrcAddress.com.dmdirc.util.IrcAddress(String)

    /**
     * Processes the password part of this address.
     *
     * @param pass The password part of this address
     */
    private void doPass(final String pass) {
        this.pass = pass;
    //#IrcAddress.java:115: method: void com.dmdirc.util.IrcAddress.doPass(String)
    //#input(void doPass(String)): pass
    //#input(void doPass(String)): this
    //#output(void doPass(String)): this.pass
    //#post(void doPass(String)): this.pass == pass
    //#post(void doPass(String)): init'ed(this.pass)
    }
    //#IrcAddress.java:116: end of method: void com.dmdirc.util.IrcAddress.doPass(String)

    /**
     * Processes the channels part of this address.
     *
     * @param channels The channels part of this address
     */
    private void doChannels(final String channels) {
        if (channels == null || channels.length() == 0 || channels.charAt(0) != '/') {
    //#IrcAddress.java:124: method: void com.dmdirc.util.IrcAddress.doChannels(String)
    //#input(void doChannels(String)): channels
    //#input(void doChannels(String)): channels._tainted
    //#input(void doChannels(String)): this
    //#test_vector(void doChannels(String)): channels: Addr_Set{null}, Inverse{null}
    //#test_vector(void doChannels(String)): java.lang.String:charAt(...)@124: {47}, {0..46, 48..65_535}
    //#test_vector(void doChannels(String)): java.lang.String:length(...)@124: {0}, {1..4_294_967_295}
            return;
        }
        
        for (String channel : channels.substring(1).split(",")) {
    //#IrcAddress.java:128: ?use of default init
    //#    init'ed(arr$.length)
    //#    severity: LOW
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void doChannels(String)
    //#    basic block: bb_5
    //#    assertion: init'ed(arr$.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#IrcAddress.java:128: ?use of default init
    //#    init'ed(len$)
    //#    severity: LOW
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void doChannels(String)
    //#    basic block: bb_6
    //#    assertion: init'ed(len$)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#IrcAddress.java:128: Warning: test always goes same way
    //#    Test predetermined because i$ == len$
    //#    severity: LOW
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void doChannels(String)
    //#    from bb: bb_6
    //#    live edge: bb_6-->bb_13
    //#    tested vn: i$ - undefined
    //#    tested vn values: {0}
    //#IrcAddress.java:128: Warning: dead code
    //#    Dead code here because i$ == len$
    //#    severity: LOW
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void doChannels(String)
    //#    dead bb: bb_7
    //#IrcAddress.java:128: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void doChannels(String)
    //#    dead bb: bb_12
            if (!channel.equalsIgnoreCase("needpass") && 
    //#IrcAddress.java:129: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void doChannels(String)
    //#    dead bb: bb_8
    //#IrcAddress.java:129: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void doChannels(String)
    //#    dead bb: bb_9
    //#IrcAddress.java:129: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void doChannels(String)
    //#    dead bb: bb_10
                    !channel.equalsIgnoreCase("needkey") &&
                    !channel.equalsIgnoreCase("isnick") && !channel.isEmpty()) {
                this.channels.add(channel);
    //#IrcAddress.java:132: Warning: dead code continues
    //#    Dead code continues
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void doChannels(String)
    //#    dead bb: bb_11
            }
        }
    }
    //#IrcAddress.java:135: end of method: void com.dmdirc.util.IrcAddress.doChannels(String)

    /**
     * Processes the port part of this address.
     *
     * @param port The port part of this address
     * @throws InvalidAddressException if the port is non-numeric
     */
    private void doPort(final int port) throws InvalidAddressException {
        this.port = port;
    //#IrcAddress.java:144: method: void com.dmdirc.util.IrcAddress.doPort(int)
    //#input(void doPort(int)): port
    //#input(void doPort(int)): this
    //#output(void doPort(int)): this.port
    //#post(void doPort(int)): this.port == port
    //#post(void doPort(int)): init'ed(this.port)
    }
    //#IrcAddress.java:145: end of method: void com.dmdirc.util.IrcAddress.doPort(int)

    /**
     * Processes the server part of this address.
     *
     * @param server The server part of this address
     */
    private void doServer(final String server) {
        this.server = server;
    //#IrcAddress.java:153: method: void com.dmdirc.util.IrcAddress.doServer(String)
    //#input(void doServer(String)): server
    //#input(void doServer(String)): this
    //#output(void doServer(String)): this.server
    //#post(void doServer(String)): this.server == server
    //#post(void doServer(String)): init'ed(this.server)
    }
    //#IrcAddress.java:154: end of method: void com.dmdirc.util.IrcAddress.doServer(String)

    /**
     * Determines if this address requires the use of SSL or not.
     *
     * @return True if the address requires SSL, false otherwise
     */
    public boolean isSSL() {
        return usesSSL;
    //#IrcAddress.java:162: method: bool com.dmdirc.util.IrcAddress.isSSL()
    //#input(bool isSSL()): this
    //#input(bool isSSL()): this.usesSSL
    //#output(bool isSSL()): return_value
    //#pre[2] (bool isSSL()): init'ed(this.usesSSL)
    //#post(bool isSSL()): return_value == this.usesSSL
    //#post(bool isSSL()): init'ed(return_value)
    //#IrcAddress.java:162: end of method: bool com.dmdirc.util.IrcAddress.isSSL()
    }

    /**
     * Retrieves the server from this address.
     *
     * @return This address's server
     */
    public String getServer() {
        return server;
    //#IrcAddress.java:171: method: String com.dmdirc.util.IrcAddress.getServer()
    //#input(String getServer()): this
    //#input(String getServer()): this.server
    //#output(String getServer()): return_value
    //#pre[2] (String getServer()): init'ed(this.server)
    //#post(String getServer()): return_value == this.server
    //#post(String getServer()): init'ed(return_value)
    //#IrcAddress.java:171: end of method: String com.dmdirc.util.IrcAddress.getServer()
    }

    /**
     * Retrieves the port used for this address.
     *
     * @return This address's port
     */
    public int getPort() {
        return port;
    //#IrcAddress.java:180: method: int com.dmdirc.util.IrcAddress.getPort()
    //#input(int getPort()): this
    //#input(int getPort()): this.port
    //#output(int getPort()): return_value
    //#pre[2] (int getPort()): init'ed(this.port)
    //#post(int getPort()): return_value == this.port
    //#post(int getPort()): init'ed(return_value)
    //#IrcAddress.java:180: end of method: int com.dmdirc.util.IrcAddress.getPort()
    }

    /**
     * Retrieves the password used for this address.
     *
     * @return This address's password
     */
    public String getPassword() {
        return pass;
    //#IrcAddress.java:189: method: String com.dmdirc.util.IrcAddress.getPassword()
    //#input(String getPassword()): this
    //#input(String getPassword()): this.pass
    //#output(String getPassword()): return_value
    //#pre[2] (String getPassword()): init'ed(this.pass)
    //#post(String getPassword()): return_value == this.pass
    //#post(String getPassword()): init'ed(return_value)
    //#IrcAddress.java:189: end of method: String com.dmdirc.util.IrcAddress.getPassword()
    }

    /**
     * Retrieves the list of channels for this address.
     *
     * @return This address's channels
     */
    public List<String> getChannels() {
        return channels;
    //#IrcAddress.java:198: method: List com.dmdirc.util.IrcAddress.getChannels()
    //#input(List getChannels()): this
    //#input(List getChannels()): this.channels
    //#output(List getChannels()): return_value
    //#pre[2] (List getChannels()): init'ed(this.channels)
    //#post(List getChannels()): return_value == this.channels
    //#post(List getChannels()): init'ed(return_value)
    //#IrcAddress.java:198: end of method: List com.dmdirc.util.IrcAddress.getChannels()
    }
    
    /**
     * Connects to a server represented by this address.
     */
    public void connect() {
        connect(IdentityManager.getProfiles().get(0));
    //#IrcAddress.java:205: method: void com.dmdirc.util.IrcAddress.connect()
    //#IrcAddress.java:205: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.IdentityManager:getProfiles()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void connect()
    //#    unanalyzed callee: List com.dmdirc.config.IdentityManager:getProfiles()
    //#input(void connect()): __Descendant_Table[com/dmdirc/util/IrcAddress]
    //#input(void connect()): __Descendant_Table[others]
    //#input(void connect()): __Dispatch_Table.connect(Lcom/dmdirc/config/Identity;)V
    //#input(void connect()): __Dispatch_Table.getChannels()Ljava/util/List;
    //#input(void connect()): __Dispatch_Table.getPassword()Ljava/lang/String;
    //#input(void connect()): __Dispatch_Table.getPort()I
    //#input(void connect()): __Dispatch_Table.getServer()Ljava/lang/String;
    //#input(void connect()): __Dispatch_Table.isSSL()Z
    //#input(void connect()): this
    //#input(void connect()): this.__Tag
    //#input(void connect()): this.channels
    //#input(void connect()): this.pass
    //#input(void connect()): this.port
    //#input(void connect()): this.server
    //#input(void connect()): this.usesSSL
    //#pre[2] (void connect()): this.__Tag == com/dmdirc/util/IrcAddress
    //#pre[3] (void connect()): init'ed(this.channels)
    //#pre[6] (void connect()): init'ed(this.server)
    //#pre[4] (void connect()): (soft) init'ed(this.pass)
    //#pre[5] (void connect()): (soft) init'ed(this.port)
    //#pre[7] (void connect()): (soft) init'ed(this.usesSSL)
    //#presumption(void connect()): com.dmdirc.config.IdentityManager:getProfiles(...)@205 != null
    //#unanalyzed(void connect()): Effects-of-calling:com.dmdirc.ServerManager:getServerManager
    //#unanalyzed(void connect()): Effects-of-calling:com.dmdirc.ServerManager:getServersByAddress
    //#unanalyzed(void connect()): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void connect()): Effects-of-calling:com.dmdirc.Server
    //#unanalyzed(void connect()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void connect()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void connect()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void connect()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void connect()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void connect()): Effects-of-calling:com.dmdirc.Server:join
    }
    //#IrcAddress.java:206: end of method: void com.dmdirc.util.IrcAddress.connect()

    /**
     * Connects to a server represented by this address.
     * 
     * @param profile Profile to use when connecting
     */
    public void connect(final Identity profile) {
        final List<Server> servers = ServerManager.getServerManager().
    //#IrcAddress.java:214: method: void com.dmdirc.util.IrcAddress.connect(Identity)
    //#IrcAddress.java:214: Warning: method not available - call not analyzed
    //#    call on ServerManager com.dmdirc.ServerManager:getServerManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void connect(Identity)
    //#    unanalyzed callee: ServerManager com.dmdirc.ServerManager:getServerManager()
    //#IrcAddress.java:214: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.ServerManager:getServersByAddress(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void connect(Identity)
    //#    unanalyzed callee: List com.dmdirc.ServerManager:getServersByAddress(String)
    //#input(void connect(Identity)): __Descendant_Table[com/dmdirc/util/IrcAddress]
    //#input(void connect(Identity)): __Descendant_Table[others]
    //#input(void connect(Identity)): __Dispatch_Table.getChannels()Ljava/util/List;
    //#input(void connect(Identity)): __Dispatch_Table.getPassword()Ljava/lang/String;
    //#input(void connect(Identity)): __Dispatch_Table.getPort()I
    //#input(void connect(Identity)): __Dispatch_Table.getServer()Ljava/lang/String;
    //#input(void connect(Identity)): __Dispatch_Table.isSSL()Z
    //#input(void connect(Identity)): profile
    //#input(void connect(Identity)): this
    //#input(void connect(Identity)): this.__Tag
    //#input(void connect(Identity)): this.channels
    //#input(void connect(Identity)): this.pass
    //#input(void connect(Identity)): this.port
    //#input(void connect(Identity)): this.server
    //#input(void connect(Identity)): this.usesSSL
    //#pre[3] (void connect(Identity)): this.__Tag == com/dmdirc/util/IrcAddress
    //#pre[4] (void connect(Identity)): init'ed(this.channels)
    //#pre[7] (void connect(Identity)): init'ed(this.server)
    //#pre[5] (void connect(Identity)): (soft) init'ed(this.pass)
    //#pre[6] (void connect(Identity)): (soft) init'ed(this.port)
    //#pre[8] (void connect(Identity)): (soft) init'ed(this.usesSSL)
    //#presumption(void connect(Identity)): com.dmdirc.ServerManager:getServerManager(...)@214 != null
    //#presumption(void connect(Identity)): com.dmdirc.ServerManager:getServersByAddress(...)@214 != null
    //#presumption(void connect(Identity)): java.util.ArrayList:iterator(...)@221 != null
    //#presumption(void connect(Identity)): java.util.List:get(...)@220 != null
    //#test_vector(void connect(Identity)): java.util.Iterator:hasNext(...)@221: {0}, {1}
    //#test_vector(void connect(Identity)): java.util.List:isEmpty(...)@216: {0}, {1}
                getServersByAddress(getServer());
        if (servers.isEmpty()) {
            new Server(getServer(), getPort(), getPassword(), isSSL(), 
    //#IrcAddress.java:217: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.Server(String, int, String, bool, Identity, List)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void connect(Identity)
    //#    unanalyzed callee: void com.dmdirc.Server(String, int, String, bool, Identity, List)
                    profile, getChannels());
        } else {
            final Server thisServer = servers.get(0);
            for (String channel : new ArrayList<String>(getChannels())) {
                thisServer.join(channel);
    //#IrcAddress.java:222: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.Server:join(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.util.IrcAddress
    //#    method: void connect(Identity)
    //#    unanalyzed callee: void com.dmdirc.Server:join(String)
            }
        }
    }
    //#IrcAddress.java:225: end of method: void com.dmdirc.util.IrcAddress.connect(Identity)
}
    //#output(com.dmdirc.util.IrcAddress__static_init): __Descendant_Table[com/dmdirc/util/IrcAddress]
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.connect()V
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.connect(Lcom/dmdirc/config/Identity;)V
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.doChannels(Ljava/lang/String;)V
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.doPass(Ljava/lang/String;)V
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.doPort(I)V
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.doServer(Ljava/lang/String;)V
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.getChannels()Ljava/util/List;
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.getPassword()Ljava/lang/String;
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.getPort()I
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.getServer()Ljava/lang/String;
    //#output(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.isSSL()Z
    //#post(com.dmdirc.util.IrcAddress__static_init): __Descendant_Table[com/dmdirc/util/IrcAddress] == &__Dispatch_Table
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.connect()V == &connect
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.connect(Lcom/dmdirc/config/Identity;)V == &connect
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.doChannels(Ljava/lang/String;)V == &doChannels
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.doPass(Ljava/lang/String;)V == &doPass
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.doPort(I)V == &doPort
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.doServer(Ljava/lang/String;)V == &doServer
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.getChannels()Ljava/util/List; == &getChannels
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.getPassword()Ljava/lang/String; == &getPassword
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.getPort()I == &getPort
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.getServer()Ljava/lang/String; == &getServer
    //#post(com.dmdirc.util.IrcAddress__static_init): __Dispatch_Table.isSSL()Z == &isSSL
    //#IrcAddress.java:: end of method: com.dmdirc.util.IrcAddress.com.dmdirc.util.IrcAddress__static_init
    //#IrcAddress.java:: end of class: com.dmdirc.util.IrcAddress
