//# 6 errors, 410 messages
//#
/*
    //#NickColourPlugin.java:1:1: class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#NickColourPlugin.java:1:1: method: com.dmdirc.addons.nickcolours.NickColourPlugin.com.dmdirc.addons.nickcolours.NickColourPlugin__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.addons.nickcolours;

import com.dmdirc.Channel;
import com.dmdirc.ChannelClientProperty;
import com.dmdirc.actions.ActionManager;
import com.dmdirc.actions.interfaces.ActionType;
import com.dmdirc.actions.CoreActionType;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.config.prefs.PreferencesCategory;
import com.dmdirc.config.prefs.PreferencesManager;
import com.dmdirc.config.prefs.PreferencesSetting;
import com.dmdirc.config.prefs.PreferencesType;
import com.dmdirc.interfaces.ActionListener;
import com.dmdirc.parser.irc.ChannelClientInfo;
import com.dmdirc.parser.irc.ChannelInfo;
import com.dmdirc.parser.irc.ClientInfo;
import com.dmdirc.plugins.Plugin;
import com.dmdirc.ui.messages.ColourManager;

import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Provides various features related to nickname colouring.
 *
 * @author chris
 */
public final class NickColourPlugin extends Plugin implements ActionListener {
    
    /** "Random" colours to use to colour nicknames. */
    private String[] randColours = new String[] {
        "E90E7F", "8E55E9", "B30E0E", "18B33C",
        "58ADB3", "9E54B3", "B39875", "3176B3",
    };
    
    /** Creates a new instance of NickColourPlugin. */
    public NickColourPlugin() {
        super();
    //#NickColourPlugin.java:62: method: void com.dmdirc.addons.nickcolours.NickColourPlugin.com.dmdirc.addons.nickcolours.NickColourPlugin()
    //#NickColourPlugin.java:62: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.plugins.Plugin()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void com.dmdirc.addons.nickcolours.NickColourPlugin()
    //#    unanalyzed callee: void com.dmdirc.plugins.Plugin()
    //#input(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): new String[](NickColourPlugin#1) num objects
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours.length
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[0]
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[1]
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[2]
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[3]
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[4]
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[5]
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[6]
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[7]
    //#output(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours
    //#new obj(void com.dmdirc.addons.nickcolours.NickColourPlugin()): new String[](NickColourPlugin#1)
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours == &new String[](NickColourPlugin#1)
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): new String[](NickColourPlugin#1) num objects == 1
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours.length == 8
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[0] == &"E90E7F"
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[1] == &"8E55E9"
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[2] == &"B30E0E"
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[3] == &"18B33C"
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[4] == &"58ADB3"
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[5] == &"9E54B3"
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[6] == &"B39875"
    //#post(void com.dmdirc.addons.nickcolours.NickColourPlugin()): this.randColours[7] == &"3176B3"
    }
    //#NickColourPlugin.java:63: end of method: void com.dmdirc.addons.nickcolours.NickColourPlugin.com.dmdirc.addons.nickcolours.NickColourPlugin()
    
    /** {@inheritDoc} */
    @Override
    public void processEvent(final ActionType type, final StringBuffer format,
            final Object... arguments) {
        if (type.equals(CoreActionType.CHANNEL_GOTNAMES)) {
    //#NickColourPlugin.java:69: method: void com.dmdirc.addons.nickcolours.NickColourPlugin.processEvent(ActionType, StringBuffer, Object[])
    //#input(void processEvent(ActionType, StringBuffer, Object[])): "*:"._tainted
    //#input(void processEvent(ActionType, StringBuffer, Object[])): ":"._tainted
    //#input(void processEvent(ActionType, StringBuffer, Object[])): "color:"._tainted
    //#input(void processEvent(ActionType, StringBuffer, Object[])): arguments
    //#input(void processEvent(ActionType, StringBuffer, Object[])): arguments.length
    //#input(void processEvent(ActionType, StringBuffer, Object[])): arguments[0]
    //#input(void processEvent(ActionType, StringBuffer, Object[])): arguments[1]
    //#input(void processEvent(ActionType, StringBuffer, Object[])): com.dmdirc.ChannelClientProperty.NICKLIST_FOREGROUND
    //#input(void processEvent(ActionType, StringBuffer, Object[])): com.dmdirc.ChannelClientProperty.TEXT_FOREGROUND
    //#input(void processEvent(ActionType, StringBuffer, Object[])): com.dmdirc.actions.CoreActionType.CHANNEL_GOTNAMES
    //#input(void processEvent(ActionType, StringBuffer, Object[])): com.dmdirc.actions.CoreActionType.CHANNEL_JOIN
    //#input(void processEvent(ActionType, StringBuffer, Object[])): this
    //#input(void processEvent(ActionType, StringBuffer, Object[])): this.randColours
    //#input(void processEvent(ActionType, StringBuffer, Object[])): this.randColours.length
    //#input(void processEvent(ActionType, StringBuffer, Object[])): this.randColours[0..4_294_967_295]
    //#input(void processEvent(ActionType, StringBuffer, Object[])): type
    //#pre[9] (void processEvent(ActionType, StringBuffer, Object[])): type != null
    //#pre[1] (void processEvent(ActionType, StringBuffer, Object[])): (soft) arguments != null
    //#pre[2] (void processEvent(ActionType, StringBuffer, Object[])): (soft) arguments.length >= 2
    //#pre[3] (void processEvent(ActionType, StringBuffer, Object[])): (soft) arguments[0] != null
    //#pre[4] (void processEvent(ActionType, StringBuffer, Object[])): (soft) arguments[1] != null
    //#pre[6] (void processEvent(ActionType, StringBuffer, Object[])): (soft) this.randColours != null
    //#pre[7] (void processEvent(ActionType, StringBuffer, Object[])): (soft) this.randColours.length >= 1
    //#pre[8] (void processEvent(ActionType, StringBuffer, Object[])): (soft) init'ed(this.randColours[0..4_294_967_295])
    //#presumption(void processEvent(ActionType, StringBuffer, Object[])): com.dmdirc.Channel:getChannelInfo(...)@70 != null
    //#presumption(void processEvent(ActionType, StringBuffer, Object[])): com.dmdirc.Channel:getServer(...)@71 != null
    //#presumption(void processEvent(ActionType, StringBuffer, Object[])): com.dmdirc.Channel:getServer(...)@77 != null
    //#presumption(void processEvent(ActionType, StringBuffer, Object[])): init'ed(com.dmdirc.actions.CoreActionType.CHANNEL_GOTNAMES)
    //#presumption(void processEvent(ActionType, StringBuffer, Object[])): init'ed(com.dmdirc.actions.CoreActionType.CHANNEL_JOIN)
    //#presumption(void processEvent(ActionType, StringBuffer, Object[])): com.dmdirc.parser.irc.ChannelInfo:getChannelClients(...)@73 != null
    //#presumption(void processEvent(ActionType, StringBuffer, Object[])): java.util.Iterator:next(...)@73 != null
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.ui.messages.ColourManager:parseColour
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.parser.irc.ChannelClientInfo:getMap
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.parser.irc.ChannelClientInfo:getClient
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.parser.irc.ClientInfo:getParser
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMyself
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getIRCStringConverter
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.parser.irc.ChannelClientInfo:getNickname
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.parser.irc.IRCStringConverter:toLowerCase
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:java.lang.Object:equals
    //#unanalyzed(void processEvent(ActionType, StringBuffer, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#test_vector(void processEvent(ActionType, StringBuffer, Object[])): java.lang.Object:equals(...)@69: {0}, {1}
    //#test_vector(void processEvent(ActionType, StringBuffer, Object[])): java.lang.Object:equals(...)@76: {0}, {1}
            final ChannelInfo chanInfo = ((Channel) arguments[0]).getChannelInfo();
    //#NickColourPlugin.java:70: Warning: method not available - call not analyzed
    //#    call on ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void processEvent(ActionType, StringBuffer, Object[])
    //#    unanalyzed callee: ChannelInfo com.dmdirc.Channel:getChannelInfo()
            final String network = ((Channel) arguments[0]).getServer().getNetwork();
    //#NickColourPlugin.java:71: Warning: method not available - call not analyzed
    //#    call on Server com.dmdirc.Channel:getServer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void processEvent(ActionType, StringBuffer, Object[])
    //#    unanalyzed callee: Server com.dmdirc.Channel:getServer()
    //#NickColourPlugin.java:71: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Server:getNetwork()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void processEvent(ActionType, StringBuffer, Object[])
    //#    unanalyzed callee: String com.dmdirc.Server:getNetwork()
            
            for (ChannelClientInfo client : chanInfo.getChannelClients()) {
    //#NickColourPlugin.java:73: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.parser.irc.ChannelInfo:getChannelClients()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void processEvent(ActionType, StringBuffer, Object[])
    //#    unanalyzed callee: List com.dmdirc.parser.irc.ChannelInfo:getChannelClients()
                colourClient(network, client);
            }
        } else if (type.equals(CoreActionType.CHANNEL_JOIN)) {
            final String network = ((Channel) arguments[0]).getServer().getNetwork();
    //#NickColourPlugin.java:77: Warning: method not available - call not analyzed
    //#    call on Server com.dmdirc.Channel:getServer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void processEvent(ActionType, StringBuffer, Object[])
    //#    unanalyzed callee: Server com.dmdirc.Channel:getServer()
    //#NickColourPlugin.java:77: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Server:getNetwork()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void processEvent(ActionType, StringBuffer, Object[])
    //#    unanalyzed callee: String com.dmdirc.Server:getNetwork()
            
            colourClient(network, (ChannelClientInfo) arguments[1]);
        }
    }
    //#NickColourPlugin.java:81: end of method: void com.dmdirc.addons.nickcolours.NickColourPlugin.processEvent(ActionType, StringBuffer, Object[])
    
    /**
     * Colours the specified client according to the user's config.
     *
     * @param network The network to use for the colouring
     * @param client The client to be coloured
     */
    private void colourClient(final String network, final ChannelClientInfo client) {
        final Map map = client.getMap();
    //#NickColourPlugin.java:90: method: void com.dmdirc.addons.nickcolours.NickColourPlugin.colourClient(String, ChannelClientInfo)
    //#NickColourPlugin.java:90: Warning: method not available - call not analyzed
    //#    call on Map com.dmdirc.parser.irc.ChannelClientInfo:getMap()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: Map com.dmdirc.parser.irc.ChannelClientInfo:getMap()
    //#input(void colourClient(String, ChannelClientInfo)): "*:"._tainted
    //#input(void colourClient(String, ChannelClientInfo)): ":"._tainted
    //#input(void colourClient(String, ChannelClientInfo)): "color:"._tainted
    //#input(void colourClient(String, ChannelClientInfo)): client
    //#input(void colourClient(String, ChannelClientInfo)): com.dmdirc.ChannelClientProperty.NICKLIST_FOREGROUND
    //#input(void colourClient(String, ChannelClientInfo)): com.dmdirc.ChannelClientProperty.TEXT_FOREGROUND
    //#input(void colourClient(String, ChannelClientInfo)): network
    //#input(void colourClient(String, ChannelClientInfo)): network._tainted
    //#input(void colourClient(String, ChannelClientInfo)): this
    //#input(void colourClient(String, ChannelClientInfo)): this.randColours
    //#input(void colourClient(String, ChannelClientInfo)): this.randColours.length
    //#input(void colourClient(String, ChannelClientInfo)): this.randColours[0..4_294_967_295]
    //#pre[1] (void colourClient(String, ChannelClientInfo)): client != null
    //#pre[5] (void colourClient(String, ChannelClientInfo)): (soft) this.randColours != null
    //#pre[6] (void colourClient(String, ChannelClientInfo)): (soft) this.randColours.length >= 1
    //#pre[7] (void colourClient(String, ChannelClientInfo)): (soft) init'ed(this.randColours[0..4_294_967_295])
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@102 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@108 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@110 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@97 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@99 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ChannelClientInfo:getClient(...)@91 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ChannelClientInfo:getClient(...)@92 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ChannelClientInfo:getClient(...)@94 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ChannelClientInfo:getClient(...)@97 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ChannelClientInfo:getMap(...)@90 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ChannelClientInfo:getNickname(...)@103 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ChannelClientInfo:getNickname(...)@103 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ClientInfo:getParser(...)@91 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ClientInfo:getParser(...)@92 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.ClientInfo:getParser(...)@94 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.IRCParser:getIRCStringConverter(...)@92 != null
    //#presumption(void colourClient(String, ChannelClientInfo)): com.dmdirc.parser.irc.IRCParser:getIRCStringConverter(...)@94 != null
    //#unanalyzed(void colourClient(String, ChannelClientInfo)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void colourClient(String, ChannelClientInfo)): Effects-of-calling:com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain
    //#unanalyzed(void colourClient(String, ChannelClientInfo)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void colourClient(String, ChannelClientInfo)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void colourClient(String, ChannelClientInfo)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void colourClient(String, ChannelClientInfo)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void colourClient(String, ChannelClientInfo)): Effects-of-calling:com.dmdirc.ui.messages.ColourManager:parseColour
    //#unanalyzed(void colourClient(String, ChannelClientInfo)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void colourClient(String, ChannelClientInfo)): Effects-of-calling:java.lang.String:split
    //#test_vector(void colourClient(String, ChannelClientInfo)): com.dmdirc.config.ConfigManager:getOptionBool(...)@102: {0}, {1}
    //#test_vector(void colourClient(String, ChannelClientInfo)): com.dmdirc.config.ConfigManager:getOptionBool(...)@97: {0}, {1}
    //#test_vector(void colourClient(String, ChannelClientInfo)): com.dmdirc.config.ConfigManager:hasOptionString(...)@108: {0}, {1}
    //#test_vector(void colourClient(String, ChannelClientInfo)): com.dmdirc.config.ConfigManager:hasOptionString(...)@110: {0}, {1}
    //#test_vector(void colourClient(String, ChannelClientInfo)): java.lang.Object:equals(...)@97: {0}, {1}
        final ClientInfo myself = client.getClient().getParser().getMyself();
    //#NickColourPlugin.java:91: Warning: method not available - call not analyzed
    //#    call on ClientInfo com.dmdirc.parser.irc.ChannelClientInfo:getClient()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ClientInfo com.dmdirc.parser.irc.ChannelClientInfo:getClient()
    //#NickColourPlugin.java:91: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.parser.irc.ClientInfo:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: IRCParser com.dmdirc.parser.irc.ClientInfo:getParser()
    //#NickColourPlugin.java:91: Warning: method not available - call not analyzed
    //#    call on ClientInfo com.dmdirc.parser.irc.IRCParser:getMyself()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ClientInfo com.dmdirc.parser.irc.IRCParser:getMyself()
        final String nickOption1 = "color:"
    //#NickColourPlugin.java:92: Warning: method not available - call not analyzed
    //#    call on ClientInfo com.dmdirc.parser.irc.ChannelClientInfo:getClient()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ClientInfo com.dmdirc.parser.irc.ChannelClientInfo:getClient()
    //#NickColourPlugin.java:92: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.parser.irc.ClientInfo:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: IRCParser com.dmdirc.parser.irc.ClientInfo:getParser()
    //#NickColourPlugin.java:92: Warning: method not available - call not analyzed
    //#    call on IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#NickColourPlugin.java:92: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelClientInfo:getNickname()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelClientInfo:getNickname()
    //#NickColourPlugin.java:92: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
                + client.getClient().getParser().getIRCStringConverter().toLowerCase(network + ":" + client.getNickname());
        final String nickOption2 = "color:"
    //#NickColourPlugin.java:94: Warning: method not available - call not analyzed
    //#    call on ClientInfo com.dmdirc.parser.irc.ChannelClientInfo:getClient()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ClientInfo com.dmdirc.parser.irc.ChannelClientInfo:getClient()
    //#NickColourPlugin.java:94: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.parser.irc.ClientInfo:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: IRCParser com.dmdirc.parser.irc.ClientInfo:getParser()
    //#NickColourPlugin.java:94: Warning: method not available - call not analyzed
    //#    call on IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: IRCStringConverter com.dmdirc.parser.irc.IRCParser:getIRCStringConverter()
    //#NickColourPlugin.java:94: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelClientInfo:getNickname()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelClientInfo:getNickname()
    //#NickColourPlugin.java:94: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCStringConverter:toLowerCase(String)
                + client.getClient().getParser().getIRCStringConverter().toLowerCase("*:" + client.getNickname());
        
        if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "useowncolour")
    //#NickColourPlugin.java:97: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:97: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:97: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#NickColourPlugin.java:97: Warning: method not available - call not analyzed
    //#    call on ClientInfo com.dmdirc.parser.irc.ChannelClientInfo:getClient()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ClientInfo com.dmdirc.parser.irc.ChannelClientInfo:getClient()
                && client.getClient().equals(myself)) {
            final Color color = ColourManager.parseColour(
    //#NickColourPlugin.java:99: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:99: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:99: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#NickColourPlugin.java:99: Warning: method not available - call not analyzed
    //#    call on Color com.dmdirc.ui.messages.ColourManager:parseColour(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: Color com.dmdirc.ui.messages.ColourManager:parseColour(String)
                    IdentityManager.getGlobalConfig().getOption(getDomain(), "owncolour"));
            putColour(map, color, color);
        }  else if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "userandomcolour")) {
    //#NickColourPlugin.java:102: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:102: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:102: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
            putColour(map, getColour(client.getNickname()), getColour(client.getNickname()));
    //#NickColourPlugin.java:103: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelClientInfo:getNickname()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelClientInfo:getNickname()
        }
        
        String[] parts = null;
                
        if (IdentityManager.getGlobalConfig().hasOptionString(getDomain(), nickOption1)) {
    //#NickColourPlugin.java:108: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:108: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:108: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
            parts = getParts(nickOption1);
        } else if (IdentityManager.getGlobalConfig().hasOptionString(getDomain(), nickOption2)) {
    //#NickColourPlugin.java:110: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:110: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:110: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
            parts = getParts(nickOption2);
        }
        
        if (parts != null) {
            Color textColor = null;
            Color nickColor = null;
            
            if (parts[0] != null) {
    //#NickColourPlugin.java:118: Warning: test always goes same way
    //#    Test predetermined because parts[0] == null
    //#    severity: LOW
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    from bb: bb_11
    //#    live edge: bb_11-->bb_13
    //#    tested vn: parts[0] == null
    //#    tested vn values: {1}
                textColor = ColourManager.parseColour(parts[0], null);
    //#NickColourPlugin.java:119: Warning: dead code
    //#    Dead code here because parts[0] == null
    //#    severity: LOW
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    dead bb: bb_12
            }
            if (parts[1] != null) {
    //#NickColourPlugin.java:121: Warning: test always goes same way
    //#    Test predetermined because parts[1] == null
    //#    severity: LOW
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    from bb: bb_13
    //#    live edge: bb_13-->bb_15
    //#    tested vn: parts[1] == null
    //#    tested vn values: {1}
                nickColor = ColourManager.parseColour(parts[1], null);
    //#NickColourPlugin.java:122: Warning: dead code
    //#    Dead code here because parts[1] == null
    //#    severity: LOW
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void colourClient(String, ChannelClientInfo)
    //#    dead bb: bb_14
            }
            
            putColour(map, textColor, nickColor);
        }
    }
    //#NickColourPlugin.java:127: end of method: void com.dmdirc.addons.nickcolours.NickColourPlugin.colourClient(String, ChannelClientInfo)
    
    /**
     * Puts the specified colour into the given map. The keys are determined
     * by config settings.
     *
     * @param map The map to use
     * @param textColour Text colour to be inserted
     * @param nickColour Nick colour to be inserted
     */
    @SuppressWarnings("unchecked")
    private void putColour(final Map map, final Color textColour, final Color nickColour) {
        if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "settext")
    //#NickColourPlugin.java:139: method: void com.dmdirc.addons.nickcolours.NickColourPlugin.putColour(Map, Color, Color)
    //#NickColourPlugin.java:139: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void putColour(Map, Color, Color)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:139: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void putColour(Map, Color, Color)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:139: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void putColour(Map, Color, Color)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#input(void putColour(Map, Color, Color)): com.dmdirc.ChannelClientProperty.NICKLIST_FOREGROUND
    //#input(void putColour(Map, Color, Color)): com.dmdirc.ChannelClientProperty.TEXT_FOREGROUND
    //#input(void putColour(Map, Color, Color)): map
    //#input(void putColour(Map, Color, Color)): nickColour
    //#input(void putColour(Map, Color, Color)): textColour
    //#input(void putColour(Map, Color, Color)): this
    //#pre[1] (void putColour(Map, Color, Color)): (soft) map != null
    //#presumption(void putColour(Map, Color, Color)): init'ed(com.dmdirc.ChannelClientProperty.NICKLIST_FOREGROUND)
    //#presumption(void putColour(Map, Color, Color)): init'ed(com.dmdirc.ChannelClientProperty.TEXT_FOREGROUND)
    //#presumption(void putColour(Map, Color, Color)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@139 != null
    //#presumption(void putColour(Map, Color, Color)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@144 != null
    //#test_vector(void putColour(Map, Color, Color)): nickColour: Addr_Set{null}, Inverse{null}
    //#test_vector(void putColour(Map, Color, Color)): textColour: Addr_Set{null}, Inverse{null}
    //#test_vector(void putColour(Map, Color, Color)): com.dmdirc.config.ConfigManager:getOptionBool(...)@139: {0}, {1}
    //#test_vector(void putColour(Map, Color, Color)): com.dmdirc.config.ConfigManager:getOptionBool(...)@144: {0}, {1}
                && textColour != null) {
            map.put(ChannelClientProperty.TEXT_FOREGROUND, textColour);
        }
        
        if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "setnicklist")
    //#NickColourPlugin.java:144: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void putColour(Map, Color, Color)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:144: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void putColour(Map, Color, Color)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:144: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void putColour(Map, Color, Color)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                && nickColour != null) {
            map.put(ChannelClientProperty.NICKLIST_FOREGROUND, nickColour);
        }
    }
    //#NickColourPlugin.java:148: end of method: void com.dmdirc.addons.nickcolours.NickColourPlugin.putColour(Map, Color, Color)
    
    /**
     * Retrieves a pseudo-random colour for the specified nickname.
     *
     * @param nick The nickname of the client whose colour we're determining
     * @return Colour of the specified nickname
     */
    private Color getColour(final String nick) {
        int count = 0;
    //#NickColourPlugin.java:157: method: Color com.dmdirc.addons.nickcolours.NickColourPlugin.getColour(String)
    //#input(Color getColour(String)): nick
    //#input(Color getColour(String)): this
    //#input(Color getColour(String)): this.randColours
    //#input(Color getColour(String)): this.randColours.length
    //#input(Color getColour(String)): this.randColours[0..4_294_967_295]
    //#output(Color getColour(String)): return_value
    //#pre[1] (Color getColour(String)): nick != null
    //#pre[3] (Color getColour(String)): this.randColours != null
    //#pre[4] (Color getColour(String)): this.randColours.length >= 1
    //#pre[5] (Color getColour(String)): (soft) init'ed(this.randColours[0..4_294_967_295])
    //#post(Color getColour(String)): init'ed(return_value)
        
        for (int i = 0; i < nick.length(); i++) {
            count += nick.charAt(i);
    //#NickColourPlugin.java:160: ?overflow
    //#    count + java/lang/String:charAt(...) in {-2_147_483_648..4_294_967_295}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: Color getColour(String)
    //#    basic block: bb_3
    //#    assertion: count + java/lang/String:charAt(...) in {-2_147_483_648..4_294_967_295}
    //#    VN: java.lang.String:charAt(...)@160 + count
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {4_294_967_296..4_295_032_830}
    //#    Attribs:  Int  Bad > Exp
        }
        
        count = count % randColours.length;
        
        return ColourManager.parseColour(randColours[count]);
    //#NickColourPlugin.java:165: ?array index out of bounds
    //#    count >= 0
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: Color getColour(String)
    //#    basic block: bb_4
    //#    assertion: count >= 0
    //#    VN: count%this.randColours.length
    //#    Expected: {0..+Inf}
    //#    Bad: {-2_147_483_648..-1}
    //#    Attribs:  Int  Bad overlaps +/-1000  Bad < Exp
    //#NickColourPlugin.java:165: ?array index out of bounds
    //#    count < this.randColours.length
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: Color getColour(String)
    //#    basic block: bb_4
    //#    assertion: count < this.randColours.length
    //#    VN: -(count%this.randColours.length - this.randColours.length)
    //#    Expected: {1..+Inf}
    //#    Bad: {-4_294_967_294..0}
    //#    Attribs:  Int  Bad overlaps +/-1000  Bad < Exp
    //#NickColourPlugin.java:165: Warning: method not available - call not analyzed
    //#    call on Color com.dmdirc.ui.messages.ColourManager:parseColour(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: Color getColour(String)
    //#    unanalyzed callee: Color com.dmdirc.ui.messages.ColourManager:parseColour(String)
    //#NickColourPlugin.java:165: end of method: Color com.dmdirc.addons.nickcolours.NickColourPlugin.getColour(String)
    }
    
    /**
     * Reads the nick colour data from the config.
     *
     * @return A multi-dimensional array of nick colour info.
     */
    public Object[][] getData() {
        final List<Object[]> data = new ArrayList<Object[]>();
    //#NickColourPlugin.java:174: method: Object[][] com.dmdirc.addons.nickcolours.NickColourPlugin.getData()
    //#input(Object[][] getData()): this
    //#output(Object[][] getData()): new Object[](getData#3) num objects
    //#output(Object[][] getData()): new Object[](getData#3).length
    //#output(Object[][] getData()): new Object[][](getData#3) num objects
    //#output(Object[][] getData()): return_value.length
    //#output(Object[][] getData()): return_value[0..+Inf]
    //#output(Object[][] getData()): return_value
    //#new obj(Object[][] getData()): new Object[](getData#3)
    //#new obj(Object[][] getData()): new Object[][](getData#3)
    //#presumption(Object[][] getData()): com.dmdirc.config.ConfigManager:getOptions(...)@176 != null
    //#presumption(Object[][] getData()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@176 != null
    //#presumption(Object[][] getData()): java.lang.String:indexOf(...)@179 <= 4_294_967_294
    //#presumption(Object[][] getData()): java.util.Iterator:next(...)@176 != null
    //#presumption(Object[][] getData()): java.util.List:size(...)@187 >= 1
    //#presumption(Object[][] getData()): java.util.Map:keySet(...)@176 != null
    //#presumption(Object[][] getData()): parts.length >= 2
    //#post(Object[][] getData()): return_value == &new Object[][](getData#3)
    //#post(Object[][] getData()): new Object[](getData#3) num objects in {1..4_294_967_295}
    //#post(Object[][] getData()): new Object[](getData#3).length == 4
    //#post(Object[][] getData()): new Object[][](getData#3) num objects == 1
    //#post(Object[][] getData()): return_value.length in {1..4_294_967_295}
    //#post(Object[][] getData()): possibly_updated(return_value[0..+Inf])
    //#post(Object[][] getData()): new Object[](getData#3) num objects == java.util.List:size(...)@187
    //#unanalyzed(Object[][] getData()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(Object[][] getData()): Effects-of-calling:com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain
    //#unanalyzed(Object[][] getData()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(Object[][] getData()): Effects-of-calling:java.lang.String:split
    //#test_vector(Object[][] getData()): java.lang.String:startsWith(...)@177: {0}, {1}
    //#test_vector(Object[][] getData()): java.util.Iterator:hasNext(...)@176: {0}, {1}
    //#test_vector(Object[][] getData()): java.util.Iterator:hasNext(...)@190: {0}, {1}
        
        for (String key : IdentityManager.getGlobalConfig().getOptions(getDomain()).keySet()) {
    //#NickColourPlugin.java:176: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: Object[][] getData()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:176: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: Object[][] getData()
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:176: Warning: method not available - call not analyzed
    //#    call on Map com.dmdirc.config.ConfigManager:getOptions(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: Object[][] getData()
    //#    unanalyzed callee: Map com.dmdirc.config.ConfigManager:getOptions(String)
            if (key.startsWith("color:")) {
                final String network = key.substring(6, key.indexOf(':', 6));
                final String user = key.substring(1 + key.indexOf(':', 6));
                final String[] parts = getParts(key);
                
                
                data.add(new Object[]{network, user, parts[0], parts[1]});
            }
        }
        
        final Object[][] res = new Object[data.size()][4];
        
        int i = 0;
        for (Object[] row : data) {
            res[i] = row;
    //#NickColourPlugin.java:191: ?array index out of bounds
    //#    i < res.length
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: Object[][] getData()
    //#    basic block: bb_8
    //#    assertion: i < res.length
    //#    VN: -(i - java.util.List:size(...)@187)
    //#    Expected: {1..+Inf}
    //#    Bad: {0}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Bad < Exp
            
            i++;
        }
        
        return res;
    //#NickColourPlugin.java:196: end of method: Object[][] com.dmdirc.addons.nickcolours.NickColourPlugin.getData()
    }
    
    /**
     * Retrieves the config option with the specified key, and returns an
     * array of the colours that should be used for it.
     * 
     * @param key The config key to look up
     * @return The colours specified by the given key
     */
    private String[] getParts(final String key) {
        String[] parts = IdentityManager.getGlobalConfig().getOption(getDomain(), key).split(":");
    //#NickColourPlugin.java:207: method: String[] com.dmdirc.addons.nickcolours.NickColourPlugin.getParts(String)
    //#NickColourPlugin.java:207: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: String[] getParts(String)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:207: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: String[] getParts(String)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:207: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: String[] getParts(String)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#input(String[] getParts(String)): key
    //#input(String[] getParts(String)): this
    //#output(String[] getParts(String)): java.lang.String:split(...)._tainted
    //#output(String[] getParts(String)): java.lang.String:split(...).length
    //#output(String[] getParts(String)): java.lang.String:split(...)[0]
    //#output(String[] getParts(String)): new String[](getParts#1) num objects
    //#output(String[] getParts(String)): new String[](getParts#1).length
    //#output(String[] getParts(String)): new String[](getParts#1)[0]
    //#output(String[] getParts(String)): new String[](getParts#1)[1]
    //#output(String[] getParts(String)): new String[](getParts#2) num objects
    //#output(String[] getParts(String)): new String[](getParts#2).length
    //#output(String[] getParts(String)): new String[](getParts#2)[0]
    //#output(String[] getParts(String)): new String[](getParts#2)[1]
    //#output(String[] getParts(String)): return_value
    //#new obj(String[] getParts(String)): java.lang.String:split(...)
    //#new obj(String[] getParts(String)): new String[](getParts#1)
    //#new obj(String[] getParts(String)): new String[](getParts#2)
    //#presumption(String[] getParts(String)): com.dmdirc.config.ConfigManager:getOption(...)@207 != null
    //#presumption(String[] getParts(String)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@207 != null
    //#post(String[] getParts(String)): java.lang.String:split(...)._tainted == 0
    //#post(String[] getParts(String)): java.lang.String:split(...).length == undefined
    //#post(String[] getParts(String)): java.lang.String:split(...).length == 0, if init'ed
    //#post(String[] getParts(String)): java.lang.String:split(...)[0] == undefined
    //#post(String[] getParts(String)): java.lang.String:split(...)[0] == null
    //#post(String[] getParts(String)): return_value == One-of{&new String[](getParts#1), &java.lang.String:split(...), &new String[](getParts#2)}
    //#post(String[] getParts(String)): return_value in Addr_Set{&java.lang.String:split(...),&new String[](getParts#1)}
    //#post(String[] getParts(String)): new String[](getParts#1) num objects <= 1
    //#post(String[] getParts(String)): new String[](getParts#1).length == 2
    //#post(String[] getParts(String)): new String[](getParts#1)[0] == null
    //#post(String[] getParts(String)): new String[](getParts#1)[1] == null
    //#post(String[] getParts(String)): new String[](getParts#2) num objects == 0
    //#post(String[] getParts(String)): possibly_updated(new String[](getParts#2).length)
    //#post(String[] getParts(String)): possibly_updated(new String[](getParts#2)[0])
    //#post(String[] getParts(String)): possibly_updated(new String[](getParts#2)[1])
        
        if (parts.length == 0) {
    //#NickColourPlugin.java:209: ?use of default init
    //#    init'ed(parts.length)
    //#    severity: LOW
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: String[] getParts(String)
    //#    basic block: Entry_BB_1
    //#    assertion: init'ed(parts.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
            parts = new String[]{null, null};
        } else if (parts.length == 1) {
    //#NickColourPlugin.java:211: ?use of default init
    //#    init'ed(parts.length)
    //#    severity: LOW
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: String[] getParts(String)
    //#    basic block: bb_3
    //#    assertion: init'ed(parts.length)
    //#    VN: undefined
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#NickColourPlugin.java:211: Warning: test always goes same way
    //#    Test predetermined because parts.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: String[] getParts(String)
    //#    from bb: bb_3
    //#    live edge: bb_3-->bb_5
    //#    tested vn: undefined - 1
    //#    tested vn values: {-1}
            parts = new String[]{parts[0], null};
    //#NickColourPlugin.java:212: Warning: dead code
    //#    Dead code here because parts.length == 0
    //#    severity: LOW
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: String[] getParts(String)
    //#    dead bb: bb_4
        }
        
        return parts;
    //#NickColourPlugin.java:215: end of method: String[] com.dmdirc.addons.nickcolours.NickColourPlugin.getParts(String)
    }
    
    /** {@inheritDoc} */
    @Override
    public void onLoad() {
        if (IdentityManager.getGlobalConfig().hasOptionString(getDomain(), "randomcolours")) {
    //#NickColourPlugin.java:221: method: void com.dmdirc.addons.nickcolours.NickColourPlugin.onLoad()
    //#NickColourPlugin.java:221: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:221: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:221: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#input(void onLoad()): com.dmdirc.actions.CoreActionType.CHANNEL_GOTNAMES
    //#input(void onLoad()): com.dmdirc.actions.CoreActionType.CHANNEL_JOIN
    //#input(void onLoad()): this
    //#output(void onLoad()): this.randColours
    //#presumption(void onLoad()): init'ed(com.dmdirc.actions.CoreActionType.CHANNEL_GOTNAMES)
    //#presumption(void onLoad()): init'ed(com.dmdirc.actions.CoreActionType.CHANNEL_JOIN)
    //#presumption(void onLoad()): com.dmdirc.config.ConfigManager:getOptionList(...)@222 != null
    //#presumption(void onLoad()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@221 != null
    //#presumption(void onLoad()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@222 != null
    //#post(void onLoad()): possibly_updated(this.randColours)
    //#test_vector(void onLoad()): com.dmdirc.config.ConfigManager:hasOptionString(...)@221: {0}, {1}
            randColours = IdentityManager.getGlobalConfig().getOptionList(getDomain(), "randomcolours").toArray(new String[0]);
    //#NickColourPlugin.java:222: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NickColourPlugin.java:222: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:222: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.ConfigManager:getOptionList(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: List com.dmdirc.config.ConfigManager:getOptionList(String, String)
        }
        
        ActionManager.addListener(this, CoreActionType.CHANNEL_GOTNAMES,
    //#NickColourPlugin.java:225: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.actions.ActionManager:addListener(ActionListener, ActionType[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: void com.dmdirc.actions.ActionManager:addListener(ActionListener, ActionType[])
                CoreActionType.CHANNEL_JOIN);
    }
    //#NickColourPlugin.java:227: end of method: void com.dmdirc.addons.nickcolours.NickColourPlugin.onLoad()
    
    /** {@inheritDoc} */
    @Override
    public void onUnload() {
        ActionManager.removeListener(this);
    //#NickColourPlugin.java:232: method: void com.dmdirc.addons.nickcolours.NickColourPlugin.onUnload()
    //#NickColourPlugin.java:232: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.actions.ActionManager:removeListener(ActionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void onUnload()
    //#    unanalyzed callee: void com.dmdirc.actions.ActionManager:removeListener(ActionListener)
    //#input(void onUnload()): this
    }
    //#NickColourPlugin.java:233: end of method: void com.dmdirc.addons.nickcolours.NickColourPlugin.onUnload()
    
    /** {@inheritDoc} */
    @Override
    public void showConfig(final PreferencesManager manager) {
        final PreferencesCategory general = new PreferencesCategory("Nick Colours",
    //#NickColourPlugin.java:238: method: void com.dmdirc.addons.nickcolours.NickColourPlugin.showConfig(PreferencesManager)
    //#NickColourPlugin.java:238: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory(String, String)
    //#input(void showConfig(PreferencesManager)): "ins 0, fill, h "._tainted
    //#input(void showConfig(PreferencesManager)): com.dmdirc.config.prefs.PreferencesType.BOOLEAN
    //#input(void showConfig(PreferencesManager)): com.dmdirc.config.prefs.PreferencesType.COLOUR
    //#input(void showConfig(PreferencesManager)): com/dmdirc/addons/nickcolours/NickColourPanel.com.dmdirc.addons.ui_swing.dialogs.prefs.SwingPreferencesDialog.CLIENT_HEIGHT
    //#input(void showConfig(PreferencesManager)): com/dmdirc/addons/nickcolours/NickColourPanel.headers
    //#input(void showConfig(PreferencesManager)): manager
    //#input(void showConfig(PreferencesManager)): this
    //#pre[1] (void showConfig(PreferencesManager)): manager != null
    //#presumption(void showConfig(PreferencesManager)): com.dmdirc.config.prefs.PreferencesManager:getCategory(...)@266 != null
    //#presumption(void showConfig(PreferencesManager)): init'ed(com.dmdirc.config.prefs.PreferencesType.BOOLEAN)
    //#presumption(void showConfig(PreferencesManager)): init'ed(com.dmdirc.config.prefs.PreferencesType.COLOUR)
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.Map:keySet
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.String:startsWith
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.String:indexOf
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:javax.swing.table.DefaultTableModel
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:javax.swing.JTable
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:javax.swing.table.DefaultTableCellRenderer
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.addons.nickcolours.ColourRenderer:setOpaque
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:javax.swing.JTable:setFillsViewportHeight
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:javax.swing.JTable:setDefaultRenderer
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.addons.nickcolours.NickColourPanel:setLayout
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.addons.nickcolours.NickColourPanel:add
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:javax.swing.JButton:addActionListener
                "General configuration for NickColour plugin.");
        final PreferencesCategory colours = new PreferencesCategory("Colours",
    //#NickColourPlugin.java:240: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory(String, String, PreferencesInterface)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory(String, String, PreferencesInterface)
                "Set colours for specific nicknames.", new NickColourPanel(this));
        
        general.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#NickColourPlugin.java:243: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#NickColourPlugin.java:243: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
                "ui", "shownickcoloursintext", "Show colours in text" +
                "area", "Colour nicknames in main text area?"));
        general.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#NickColourPlugin.java:246: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#NickColourPlugin.java:246: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
                "ui", "shownickcoloursinnicklist", "Show colours in" +
                " nick list", "Colour nicknames in channel nick lists?"));
        general.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#NickColourPlugin.java:249: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:249: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#NickColourPlugin.java:249: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
                getDomain(), "settext", "Set colours in textarea",
                "Should the plugin set the textarea colour of nicks?"));
        general.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#NickColourPlugin.java:252: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:252: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#NickColourPlugin.java:252: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
                getDomain(), "setnicklist", "Set colours in nick list",
                "Should the plugin set the nick list colour of nicks?"));
        general.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#NickColourPlugin.java:255: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:255: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#NickColourPlugin.java:255: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
                getDomain(), "userandomcolour", "Use random colour",
                "Use a pseudo-random colour for each person?"));
        general.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#NickColourPlugin.java:258: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:258: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#NickColourPlugin.java:258: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
                getDomain(), "useowncolour", "Use colour for own nick",
                "Always use the same colour for our own nickname?"));
        general.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
    //#NickColourPlugin.java:261: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.nickcolours.NickColourPlugin:getDomain()
    //#NickColourPlugin.java:261: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#NickColourPlugin.java:261: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSetting(PreferencesSetting)
                getDomain(), "owncolour", "Colour to use for own nick",
                "Colour used for our own nickname, if above setting is enabled."));        

        general.addSubCategory(colours);
    //#NickColourPlugin.java:265: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
        manager.getCategory("Plugins").addSubCategory(general);
    //#NickColourPlugin.java:266: Warning: method not available - call not analyzed
    //#    call on PreferencesCategory com.dmdirc.config.prefs.PreferencesManager:getCategory(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: PreferencesCategory com.dmdirc.config.prefs.PreferencesManager:getCategory(String)
    //#NickColourPlugin.java:266: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nickcolours.NickColourPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.PreferencesCategory:addSubCategory(PreferencesCategory)
    }
    //#NickColourPlugin.java:267: end of method: void com.dmdirc.addons.nickcolours.NickColourPlugin.showConfig(PreferencesManager)
    
}
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Descendant_Table[com/dmdirc/addons/nickcolours/NickColourPlugin]
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.colourClient(Ljava/lang/String;Lcom/dmdirc/parser/irc/ChannelClientInfo;)V
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.getColour(Ljava/lang/String;)Ljava/awt/Color;
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.getData()[[Ljava/lang/Object;
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.getParts(Ljava/lang/String;)[Ljava/lang/String;
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.onLoad()V
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.onUnload()V
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.processEvent(Lcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.putColour(Ljava/util/Map;Ljava/awt/Color;Ljava/awt/Color;)V
    //#output(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.showConfig(Lcom/dmdirc/config/prefs/PreferencesManager;)V
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Descendant_Table[com/dmdirc/addons/nickcolours/NickColourPlugin] == &__Dispatch_Table
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.colourClient(Ljava/lang/String;Lcom/dmdirc/parser/irc/ChannelClientInfo;)V == &colourClient
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.getColour(Ljava/lang/String;)Ljava/awt/Color; == &getColour
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.getData()[[Ljava/lang/Object; == &getData
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.getParts(Ljava/lang/String;)[Ljava/lang/String; == &getParts
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.onLoad()V == &onLoad
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.onUnload()V == &onUnload
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.processEvent(Lcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &processEvent
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.putColour(Ljava/util/Map;Ljava/awt/Color;Ljava/awt/Color;)V == &putColour
    //#post(com.dmdirc.addons.nickcolours.NickColourPlugin__static_init): __Dispatch_Table.showConfig(Lcom/dmdirc/config/prefs/PreferencesManager;)V == &showConfig
    //#NickColourPlugin.java:: end of method: com.dmdirc.addons.nickcolours.NickColourPlugin.com.dmdirc.addons.nickcolours.NickColourPlugin__static_init
    //#NickColourPlugin.java:: end of class: com.dmdirc.addons.nickcolours.NickColourPlugin
