//# 4 errors, 420 messages
//#
/*
    //#WindowStatusPlugin.java:1:1: class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#WindowStatusPlugin.java:1:1: method: com.dmdirc.addons.windowstatus.WindowStatusPlugin.com.dmdirc.addons.windowstatus.WindowStatusPlugin__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.windowstatus;

import com.dmdirc.Channel;
import com.dmdirc.FrameContainer;
import com.dmdirc.Main;
import com.dmdirc.Query;
import com.dmdirc.Server;
import com.dmdirc.actions.ActionManager;
import com.dmdirc.actions.CoreActionType;
import com.dmdirc.actions.interfaces.ActionType;
import com.dmdirc.config.Identity;
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.interfaces.InputWindow;
import com.dmdirc.ui.interfaces.Window;

import java.util.Hashtable;
import java.util.Map;
import java.util.Map.Entry;

/**
 * Displays information related to the current window in the status bar.
 *
 * @author Shane 'Dataforce' McCormack
 */
public final class WindowStatusPlugin extends Plugin implements ActionListener {

	/** The panel we use in the status bar. */
	private final WindowStatusPanel panel = new WindowStatusPanel();

	/** Creates a new instance of WindowStatusPlugin. */
	public WindowStatusPlugin() {
		super();
    //#WindowStatusPlugin.java:63: method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.com.dmdirc.addons.windowstatus.WindowStatusPlugin()
    //#WindowStatusPlugin.java:63: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.plugins.Plugin()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin()
    //#    unanalyzed callee: void com.dmdirc.plugins.Plugin()
    //#input(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): this
    //#output(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): new JLabel(WindowStatusPanel#1) num objects
    //#output(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): new WindowStatusPanel(WindowStatusPlugin#1) num objects
    //#output(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): this.panel.__Tag
    //#output(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): this.panel.label
    //#output(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): this.panel
    //#new obj(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): new JLabel(WindowStatusPanel#1)
    //#new obj(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): new WindowStatusPanel(WindowStatusPlugin#1)
    //#post(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): this.panel == &new WindowStatusPanel(WindowStatusPlugin#1)
    //#post(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): new JLabel(WindowStatusPanel#1) num objects == 1
    //#post(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): new WindowStatusPanel(WindowStatusPlugin#1) num objects == 1
    //#post(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): this.panel.__Tag == com/dmdirc/addons/windowstatus/WindowStatusPanel
    //#post(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): this.panel.label == &new JLabel(WindowStatusPanel#1)
    //#unanalyzed(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): Effects-of-calling:javax.swing.BorderFactory:createEtchedBorder
    //#unanalyzed(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): Effects-of-calling:com.dmdirc.addons.windowstatus.WindowStatusPanel:setBorder
    //#unanalyzed(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): Effects-of-calling:com.dmdirc.addons.windowstatus.WindowStatusPanel:setLayout
    //#unanalyzed(void com.dmdirc.addons.windowstatus.WindowStatusPlugin()): Effects-of-calling:com.dmdirc.addons.windowstatus.WindowStatusPanel:add
	}
    //#WindowStatusPlugin.java:64: end of method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.com.dmdirc.addons.windowstatus.WindowStatusPlugin()

	/**
	 * Called when the plugin is loaded.
	 */
    @Override
	public void onLoad() {
		Main.getUI().getStatusBar().addComponent(panel);
    //#WindowStatusPlugin.java:71: method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.onLoad()
    //#WindowStatusPlugin.java:71: Warning: method not available - call not analyzed
    //#    call on UIController com.dmdirc.Main:getUI()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: UIController com.dmdirc.Main:getUI()
    //#WindowStatusPlugin.java:71: Warning: method not available - call not analyzed
    //#    call on StatusBar com.dmdirc.ui.interfaces.UIController:getStatusBar()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: StatusBar com.dmdirc.ui.interfaces.UIController:getStatusBar()
    //#WindowStatusPlugin.java:71: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.StatusBar:addComponent(StatusBarComponent)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.StatusBar:addComponent(StatusBarComponent)
    //#input(void onLoad()): com.dmdirc.actions.CoreActionType.CLIENT_FRAME_CHANGED
    //#input(void onLoad()): this
    //#input(void onLoad()): this.panel
    //#presumption(void onLoad()): com.dmdirc.Main:getUI(...)@71 != null
    //#presumption(void onLoad()): init'ed(com.dmdirc.actions.CoreActionType.CLIENT_FRAME_CHANGED)
    //#presumption(void onLoad()): com.dmdirc.ui.interfaces.UIController:getStatusBar(...)@71 != null
    //#unanalyzed(void onLoad()): Effects-of-calling:com.dmdirc.Main:getUI
    //#unanalyzed(void onLoad()): Effects-of-calling:updateStatus
    //#unanalyzed(void onLoad()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getActiveWindow
    //#unanalyzed(void onLoad()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getContainer
		updateStatus();

		ActionManager.addListener(this, CoreActionType.CLIENT_FRAME_CHANGED);
    //#WindowStatusPlugin.java:74: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.actions.ActionManager:addListener(ActionListener, ActionType[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void onLoad()
    //#    unanalyzed callee: void com.dmdirc.actions.ActionManager:addListener(ActionListener, ActionType[])
	}
    //#WindowStatusPlugin.java:75: end of method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.onLoad()

	/**
	 * Called when this plugin is unloaded.
	 */
    @Override
	public void onUnload() {
		Main.getUI().getStatusBar().removeComponent(panel);
    //#WindowStatusPlugin.java:82: method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.onUnload()
    //#WindowStatusPlugin.java:82: Warning: method not available - call not analyzed
    //#    call on UIController com.dmdirc.Main:getUI()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void onUnload()
    //#    unanalyzed callee: UIController com.dmdirc.Main:getUI()
    //#WindowStatusPlugin.java:82: Warning: method not available - call not analyzed
    //#    call on StatusBar com.dmdirc.ui.interfaces.UIController:getStatusBar()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void onUnload()
    //#    unanalyzed callee: StatusBar com.dmdirc.ui.interfaces.UIController:getStatusBar()
    //#WindowStatusPlugin.java:82: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.StatusBar:removeComponent(StatusBarComponent)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void onUnload()
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.StatusBar:removeComponent(StatusBarComponent)
    //#input(void onUnload()): this
    //#input(void onUnload()): this.panel
    //#presumption(void onUnload()): com.dmdirc.Main:getUI(...)@82 != null
    //#presumption(void onUnload()): com.dmdirc.ui.interfaces.UIController:getStatusBar(...)@82 != null
		ActionManager.removeListener(this);
    //#WindowStatusPlugin.java:83: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.actions.ActionManager:removeListener(ActionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void onUnload()
    //#    unanalyzed callee: void com.dmdirc.actions.ActionManager:removeListener(ActionListener)
	}
    //#WindowStatusPlugin.java:84: end of method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.onUnload()

	/**
	 * Process an event of the specified type.
	 *
	 * @param type The type of the event to process
	 * @param format Format of messages that are about to be sent. (May be null)
	 * @param arguments The arguments for the event
	 */
        @Override
	public void processEvent(final ActionType type, final StringBuffer format, final Object... arguments) {
		if (type.equals(CoreActionType.CLIENT_FRAME_CHANGED)) {
    //#WindowStatusPlugin.java:95: method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.processEvent(ActionType, StringBuffer, Object[])
    //#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[])): com.dmdirc.actions.CoreActionType.CLIENT_FRAME_CHANGED
    //#input(void processEvent(ActionType, StringBuffer, Object[])): this
    //#input(void processEvent(ActionType, StringBuffer, Object[])): type
    //#pre[5] (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 >= 1
    //#pre[3] (void processEvent(ActionType, StringBuffer, Object[])): (soft) init'ed(arguments[0])
    //#presumption(void processEvent(ActionType, StringBuffer, Object[])): init'ed(com.dmdirc.actions.CoreActionType.CLIENT_FRAME_CHANGED)
    //#test_vector(void processEvent(ActionType, StringBuffer, Object[])): java.lang.Object:equals(...)@95: {0}, {1}
			updateStatus((FrameContainer) arguments[0]);
    //#WindowStatusPlugin.java:96: Warning: call too complex - analysis skipped
    //#    call on void updateStatus(FrameContainer)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void processEvent(ActionType, StringBuffer, Object[])
    //#    unanalyzed callee: void updateStatus(FrameContainer)
        }
	}
    //#WindowStatusPlugin.java:98: end of method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.processEvent(ActionType, StringBuffer, Object[])

	/**
	 * Update the window status using the current active window.
	 */
	public void updateStatus() {
		final Window active = Main.getUI().getActiveWindow();
    //#WindowStatusPlugin.java:104: method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.updateStatus()
    //#WindowStatusPlugin.java:104: Warning: method not available - call not analyzed
    //#    call on UIController com.dmdirc.Main:getUI()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus()
    //#    unanalyzed callee: UIController com.dmdirc.Main:getUI()
    //#WindowStatusPlugin.java:104: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.ui.interfaces.UIController:getActiveWindow()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus()
    //#    unanalyzed callee: Window com.dmdirc.ui.interfaces.UIController:getActiveWindow()
    //#input(void updateStatus()): this
    //#presumption(void updateStatus()): com.dmdirc.Main:getUI(...)@104 != null
    //#test_vector(void updateStatus()): com.dmdirc.ui.interfaces.UIController:getActiveWindow(...)@104: Addr_Set{null}, Inverse{null}

		if (active != null) {
			updateStatus(((InputWindow) active).getContainer());
    //#WindowStatusPlugin.java:107: Warning: method not available - call not analyzed
    //#    call on WritableFrameContainer com.dmdirc.ui.interfaces.InputWindow:getContainer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus()
    //#    unanalyzed callee: WritableFrameContainer com.dmdirc.ui.interfaces.InputWindow:getContainer()
    //#WindowStatusPlugin.java:107: Warning: call too complex - analysis skipped
    //#    call on void updateStatus(FrameContainer)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus()
    //#    unanalyzed callee: void updateStatus(FrameContainer)
		}
	}
    //#WindowStatusPlugin.java:109: end of method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.updateStatus()

	/**
	 * Update the window status using a given FrameContainer as the active frame.
	 *
	 * @param current Window to use when adding status.
	 */
	public void updateStatus(final FrameContainer current) {
		if (current == null) { return; }
    //#WindowStatusPlugin.java:117: method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.updateStatus(FrameContainer)
    //#input(void updateStatus(FrameContainer)): " ("._tainted
    //#input(void updateStatus(FrameContainer)): " - "._tainted
    //#input(void updateStatus(FrameContainer)): " - Nicks: "._tainted
    //#input(void updateStatus(FrameContainer)): ""._tainted
    //#input(void updateStatus(FrameContainer)): "."._tainted
    //#input(void updateStatus(FrameContainer)): "<Unknown>"._tainted
    //#input(void updateStatus(FrameContainer)): "???"._tainted
    //#input(void updateStatus(FrameContainer)): "@"._tainted
    //#input(void updateStatus(FrameContainer)): "Config option not found: "._tainted
    //#input(void updateStatus(FrameContainer)): "channel.noneprefix"._tainted
    //#input(void updateStatus(FrameContainer)): "channel.shownone"._tainted
    //#input(void updateStatus(FrameContainer)): "client.showname"._tainted
    //#input(void updateStatus(FrameContainer)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void updateStatus(FrameContainer)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/addons/windowstatus/WindowStatusPanel.__Descendant_Table[com/dmdirc/addons/windowstatus/WindowStatusPanel]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/addons/windowstatus/WindowStatusPanel.__Descendant_Table[others]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/addons/windowstatus/WindowStatusPanel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOptionBool(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigManager.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigManager.__Dispatch_Table.hasOptionString(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigManager.stats
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigSource]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigSource.__Descendant_Table[others]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigSource.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigSource.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.globalconfig.__Lock
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.globalconfig.file
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.globalconfig.sources.__Lock
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.identities
    //#input(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.managers
    //#input(void updateStatus(FrameContainer)): current
    //#input(void updateStatus(FrameContainer)): this
    //#input(void updateStatus(FrameContainer)): this.panel
    //#input(void updateStatus(FrameContainer)): this.panel.__Tag
    //#input(void updateStatus(FrameContainer)): this.panel.label
    //#output(void updateStatus(FrameContainer)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void updateStatus(FrameContainer)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void updateStatus(FrameContainer)): new ArrayList(getSources#1) num objects
    //#output(void updateStatus(FrameContainer)): new ArrayList(getSources#1).__Lock
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1).__Lock
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1).file
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1).network
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1).server
    //#output(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void updateStatus(FrameContainer)): new MapList(ConfigManager#1) num objects
    //#new obj(void updateStatus(FrameContainer)): java.lang.StringBuilder:toString(...)
    //#new obj(void updateStatus(FrameContainer)): new ArrayList(getSources#1)
    //#new obj(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void updateStatus(FrameContainer)): new MapList(ConfigManager#1)
    //#pre[1] (void updateStatus(FrameContainer)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#pre[5] (void updateStatus(FrameContainer)): (soft) init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[7] (void updateStatus(FrameContainer)): (soft) this.panel != null
    //#pre[8] (void updateStatus(FrameContainer)): (soft) this.panel.__Tag == com/dmdirc/addons/windowstatus/WindowStatusPanel
    //#pre[9] (void updateStatus(FrameContainer)): (soft) this.panel.label != null
    //#presumption(void updateStatus(FrameContainer)): com.dmdirc.Channel:getChannelInfo(...)@126 != null
    //#presumption(void updateStatus(FrameContainer)): com.dmdirc.Query:getServer(...)@176 != null
    //#presumption(void updateStatus(FrameContainer)): com.dmdirc.Query:getServer(...)@177 != null
    //#presumption(void updateStatus(FrameContainer)): com.dmdirc.Server:getParser(...)@177 != null
    //#presumption(void updateStatus(FrameContainer)): com.dmdirc.parser.irc.ChannelClientInfo:getImportantModePrefix(...)@137 != null
    //#presumption(void updateStatus(FrameContainer)): com.dmdirc.parser.irc.ChannelInfo:getChannelClients(...)@133 != null
    //#presumption(void updateStatus(FrameContainer)): com.dmdirc.parser.irc.ClientInfo:getRealName(...)@179 != null
    //#presumption(void updateStatus(FrameContainer)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void updateStatus(FrameContainer)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void updateStatus(FrameContainer)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void updateStatus(FrameContainer)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void updateStatus(FrameContainer)): getGlobalConfig(...).sources != null
    //#presumption(void updateStatus(FrameContainer)): java.lang.Integer:intValue(...)@158 <= 4_294_967_294
    //#presumption(void updateStatus(FrameContainer)): java.util.Iterator:next(...)@133 != null
    //#presumption(void updateStatus(FrameContainer)): java.util.Iterator:next(...)@165 != null
    //#presumption(void updateStatus(FrameContainer)): java.util.Map:entrySet(...)@165 != null
    //#post(void updateStatus(FrameContainer)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#post(void updateStatus(FrameContainer)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void updateStatus(FrameContainer)): init'ed(new ArrayList(getSources#1) num objects)
    //#post(void updateStatus(FrameContainer)): new ArrayList(getSources#1) num objects == 0
    //#post(void updateStatus(FrameContainer)): new ArrayList(getSources#1) num objects <= 1
    //#post(void updateStatus(FrameContainer)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1) num objects)
    //#post(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void updateStatus(FrameContainer)): new ConfigManager(getGlobalConfig#1) num objects <= 1
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1).__Lock)
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1).file)
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void updateStatus(FrameContainer)): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void updateStatus(FrameContainer)): init'ed(new MapList(ConfigManager#1) num objects)
    //#post(void updateStatus(FrameContainer)): new MapList(ConfigManager#1) num objects == 0
    //#post(void updateStatus(FrameContainer)): new MapList(ConfigManager#1) num objects <= 1
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:hasOption
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:getOption
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:getSources
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:addListener
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:addConfigManager
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:getTarget
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.Boolean:parseBoolean
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void updateStatus(FrameContainer)): Effects-of-calling:javax.swing.JLabel:setText
    //#test_vector(void updateStatus(FrameContainer)): current: Inverse{null}, Addr_Set{null}
    //#test_vector(void updateStatus(FrameContainer)): com.dmdirc.Channel:instanceof(...)@124: {0}, {1}
    //#test_vector(void updateStatus(FrameContainer)): com.dmdirc.Query:instanceof(...)@172: {0}, {1}
    //#test_vector(void updateStatus(FrameContainer)): com.dmdirc.Server:getParser(...)@176: Addr_Set{null}, Inverse{null}
    //#test_vector(void updateStatus(FrameContainer)): com.dmdirc.Server:instanceof(...)@120: {0}, {1}
    //#test_vector(void updateStatus(FrameContainer)): com.dmdirc.parser.irc.IRCParser:getClientInfo(...)@177: Addr_Set{null}, Inverse{null}
    //#test_vector(void updateStatus(FrameContainer)): java.lang.Boolean:parseBoolean(...)@159: {0}, {1}
    //#test_vector(void updateStatus(FrameContainer)): java.lang.String:isEmpty(...)@139: {0}, {1}
    //#test_vector(void updateStatus(FrameContainer)): java.lang.String:isEmpty(...)@180: {1}, {0}
    //#test_vector(void updateStatus(FrameContainer)): java.util.Iterator:hasNext(...)@133: {0}, {1}
    //#test_vector(void updateStatus(FrameContainer)): java.util.Iterator:hasNext(...)@165: {0}, {1}
    //#test_vector(void updateStatus(FrameContainer)): java.util.Map:containsKey(...)@136: {1}, {0}
    //#test_vector(void updateStatus(FrameContainer)): java.util.Map:get(...)@153: Inverse{null}, Addr_Set{null}
		final StringBuffer textString = new StringBuffer();

		if (current instanceof Server) {
			final Server frame = (Server)current;

			textString.append(frame.getName());
    //#WindowStatusPlugin.java:123: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Server:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.Server:getName()
		} else if (current instanceof Channel) {
			final Channel frame = (Channel) current;
			final ChannelInfo chan = frame.getChannelInfo();
    //#WindowStatusPlugin.java:126: Warning: method not available - call not analyzed
    //#    call on ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: ChannelInfo com.dmdirc.Channel:getChannelInfo()
			final Map<Long, String> names = new Hashtable<Long, String>();
			final Map<Long, Integer> types = new Hashtable<Long, Integer>();

			textString.append(chan.getName());
    //#WindowStatusPlugin.java:130: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelInfo:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelInfo:getName()
			textString.append(" - Nicks: " + chan.getUserCount() + " (");
    //#WindowStatusPlugin.java:131: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.parser.irc.ChannelInfo:getUserCount()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: int com.dmdirc.parser.irc.ChannelInfo:getUserCount()

			for (ChannelClientInfo client : chan.getChannelClients()) {
    //#WindowStatusPlugin.java:133: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.parser.irc.ChannelInfo:getChannelClients()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: List com.dmdirc.parser.irc.ChannelInfo:getChannelClients()
				final Long im = client.getImportantModeValue();
    //#WindowStatusPlugin.java:134: Warning: method not available - call not analyzed
    //#    call on long com.dmdirc.parser.irc.ChannelClientInfo:getImportantModeValue()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: long com.dmdirc.parser.irc.ChannelClientInfo:getImportantModeValue()

				if (!names.containsKey(im)) {
					String mode = client.getImportantModePrefix();
    //#WindowStatusPlugin.java:137: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelClientInfo:getImportantModePrefix()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelClientInfo:getImportantModePrefix()

					if (mode.isEmpty()) {
						if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "channel.shownone")) {
    //#WindowStatusPlugin.java:140: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
							if (IdentityManager.getGlobalConfig().hasOptionString(getDomain(), "channel.noneprefix")) {
    //#WindowStatusPlugin.java:141: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
								mode = IdentityManager.getGlobalConfig().getOption(getDomain(), "channel.noneprefix");
    //#WindowStatusPlugin.java:142: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
    //#WindowStatusPlugin.java:142: ?use of default init
    //#    init'ed(getGlobalConfig(...).__Tag)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    basic block: bb_12
    //#    assertion: init'ed(getGlobalConfig(...).__Tag)
    //#    VN: getGlobalConfig(...).__Tag
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid  Uncertain
							} else {
								mode = "None:";
							}
						} else {
							continue;
						}
					}
					names.put(im, mode);
				}

				Integer count = types.get(im);

				if (count == null) {
					count = Integer.valueOf(1);
				} else {
					count++;
				}
				types.put(im, count);
			}

			boolean isFirst = true;

			for (Entry<Long, Integer> entry : types.entrySet()) {
				if (isFirst) { isFirst = false; } else { textString.append(' '); }
				textString.append(names.get(entry.getKey()));
                textString.append(entry.getValue());
			}

			textString.append(')');
		} else if (current instanceof Query) {
			final Query frame = (Query) current;

			textString.append(frame.getHost());
    //#WindowStatusPlugin.java:175: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Query:getHost()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.Query:getHost()
			if (IdentityManager.getGlobalConfig().getOptionBool(getDomain(), "client.showname") && frame.getServer().getParser() != null) {
    //#WindowStatusPlugin.java:176: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
    //#WindowStatusPlugin.java:176: Warning: method not available - call not analyzed
    //#    call on Server com.dmdirc.Query:getServer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: Server com.dmdirc.Query:getServer()
    //#WindowStatusPlugin.java:176: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
				final ClientInfo client = frame.getServer().getParser().getClientInfo(frame.getHost());
    //#WindowStatusPlugin.java:177: Warning: method not available - call not analyzed
    //#    call on Server com.dmdirc.Query:getServer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: Server com.dmdirc.Query:getServer()
    //#WindowStatusPlugin.java:177: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#WindowStatusPlugin.java:177: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Query:getHost()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.Query:getHost()
    //#WindowStatusPlugin.java:177: Warning: method not available - call not analyzed
    //#    call on ClientInfo com.dmdirc.parser.irc.IRCParser:getClientInfo(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: ClientInfo com.dmdirc.parser.irc.IRCParser:getClientInfo(String)
				if (client != null) {
					final String realname = client.getRealName();
    //#WindowStatusPlugin.java:179: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:getRealName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:getRealName()
					if (!realname.isEmpty()) {
						textString.append(" - ");
                        textString.append(client.getRealName());
    //#WindowStatusPlugin.java:182: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ClientInfo:getRealName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void updateStatus(FrameContainer)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ClientInfo:getRealName()
					}
				}
			}
		} else {
			textString.append("???");
		}
		panel.setText(textString.toString());
	}
    //#WindowStatusPlugin.java:190: end of method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.updateStatus(FrameContainer)

	/** {@inheritDoc} */
        @Override
	public void showConfig(final PreferencesManager manager) {
                final PreferencesCategory category
    //#WindowStatusPlugin.java:195: method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.showConfig(PreferencesManager)
    //#input(void showConfig(PreferencesManager)): ""._tainted
    //#input(void showConfig(PreferencesManager)): "."._tainted
    //#input(void showConfig(PreferencesManager)): "<Unknown>"._tainted
    //#input(void showConfig(PreferencesManager)): "@"._tainted
    //#input(void showConfig(PreferencesManager)): "Config option not found: "._tainted
    //#input(void showConfig(PreferencesManager)): "channel.noneprefix"._tainted
    //#input(void showConfig(PreferencesManager)): "channel.shownone"._tainted
    //#input(void showConfig(PreferencesManager)): "client.showname"._tainted
    //#input(void showConfig(PreferencesManager)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void showConfig(PreferencesManager)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigManager.stats
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/IdentityManager.identities
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/IdentityManager.managers
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSubCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.isInline()Z
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.setParent(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesManager.__Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesManager.__Descendant_Table[others]
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesManager.__Dispatch_Table.getCategory(Ljava/lang/String;)Lcom/dmdirc/config/prefs/PreferencesCategory;
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesType.BOOLEAN
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void showConfig(PreferencesManager)): com/dmdirc/config/prefs/PreferencesType.TEXT
    //#input(void showConfig(PreferencesManager)): manager
    //#input(void showConfig(PreferencesManager)): manager.__Tag
    //#input(void showConfig(PreferencesManager)): manager.categories
    //#input(void showConfig(PreferencesManager)): this
    //#output(void showConfig(PreferencesManager)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void showConfig(PreferencesManager)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void showConfig(PreferencesManager)): new ArrayList(getSources#1) num objects
    //#output(void showConfig(PreferencesManager)): new ArrayList(getSources#1).__Lock
    //#output(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).network
    //#output(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).server
    //#output(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void showConfig(PreferencesManager)): new MapList(ConfigManager#1) num objects
    //#new obj(void showConfig(PreferencesManager)): java.lang.StringBuilder:toString(...)
    //#new obj(void showConfig(PreferencesManager)): new ArrayList(getSources#1)
    //#new obj(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void showConfig(PreferencesManager)): new MapList(ConfigManager#1)
    //#pre[7] (void showConfig(PreferencesManager)): manager != null
    //#pre[8] (void showConfig(PreferencesManager)): manager.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[9] (void showConfig(PreferencesManager)): manager.categories != null
    //#pre[10] (void showConfig(PreferencesManager)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[1] (void showConfig(PreferencesManager)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void showConfig(PreferencesManager)): category.isInline@198 == 1
    //#presumption(void showConfig(PreferencesManager)): getCategory(...).subcats@208 != null
    //#post(void showConfig(PreferencesManager)): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void showConfig(PreferencesManager)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void showConfig(PreferencesManager)): new ArrayList(getSources#1) num objects == 0
    //#post(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void showConfig(PreferencesManager)): new MapList(ConfigManager#1) num objects == 0
    //#post(void showConfig(PreferencesManager)): new ArrayList(getSources#1) num objects <= 1
    //#post(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void showConfig(PreferencesManager)): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void showConfig(PreferencesManager)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void showConfig(PreferencesManager)): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void showConfig(PreferencesManager)): not_init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void showConfig(PreferencesManager)): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void showConfig(PreferencesManager)): not_init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void showConfig(PreferencesManager)): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void showConfig(PreferencesManager)): not_init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void showConfig(PreferencesManager)): not_init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void showConfig(PreferencesManager)): not_init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void showConfig(PreferencesManager)): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void showConfig(PreferencesManager)): not_init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void showConfig(PreferencesManager)): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void showConfig(PreferencesManager)): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void showConfig(PreferencesManager)): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void showConfig(PreferencesManager)): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void showConfig(PreferencesManager)): not_init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:hasOption
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:getOption
    //#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: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:getSources
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:addListener
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:addConfigManager
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:getTarget
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals
    //#unanalyzed(void showConfig(PreferencesManager)): Effects-of-calling:java.lang.String:equals
                        = new PreferencesCategory("Window status", "");

                category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#WindowStatusPlugin.java:198: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
                        getDomain(), "channel.shownone", "Show 'none' count",
                        "Should the count for users with no state be shown?"));
                category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
    //#WindowStatusPlugin.java:201: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
                        getDomain(), "channel.noneprefix", "'None' count prefix",
                        "The Prefix to use when showing the 'none' count"));
                category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#WindowStatusPlugin.java:204: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    unanalyzed callee: String com.dmdirc.addons.windowstatus.WindowStatusPlugin:getDomain()
                        getDomain(), "client.showname", "Show real name",
                        "Should the realname for clients be shown if known?"));

		manager.getCategory("Plugins").addSubCategory(category);
    //#WindowStatusPlugin.java:208: ?null dereference
    //#    getCategory(...) != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    basic block: Entry_BB_1
    //#    assertion: getCategory(...) != null
    //#    VN: getCategory(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#WindowStatusPlugin.java:208: ?use of default init
    //#    init'ed(getCategory(...).__Tag)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    basic block: Entry_BB_1
    //#    assertion: init'ed(getCategory(...).__Tag)
    //#    VN: getCategory(...).__Tag
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#WindowStatusPlugin.java:208: ?null dereference
    //#    com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[getCategory(...).__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
    //#    method: void showConfig(PreferencesManager)
    //#    basic block: Entry_BB_1
    //#    assertion: com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[getCategory(...).__Tag] != null
    //#    VN: com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[getCategory(...).__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
	}
    //#WindowStatusPlugin.java:209: end of method: void com.dmdirc.addons.windowstatus.WindowStatusPlugin.showConfig(PreferencesManager)
}
    //#output(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Descendant_Table[com/dmdirc/addons/windowstatus/WindowStatusPlugin]
    //#output(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.onLoad()V
    //#output(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.onUnload()V
    //#output(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.processEvent(Lcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.showConfig(Lcom/dmdirc/config/prefs/PreferencesManager;)V
    //#output(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.updateStatus()V
    //#output(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.updateStatus(Lcom/dmdirc/FrameContainer;)V
    //#post(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Descendant_Table[com/dmdirc/addons/windowstatus/WindowStatusPlugin] == &__Dispatch_Table
    //#post(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.onLoad()V == &onLoad
    //#post(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.onUnload()V == &onUnload
    //#post(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.processEvent(Lcom/dmdirc/actions/interfaces/ActionType;Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &processEvent
    //#post(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.showConfig(Lcom/dmdirc/config/prefs/PreferencesManager;)V == &showConfig
    //#post(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.updateStatus()V == &updateStatus
    //#post(com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init): __Dispatch_Table.updateStatus(Lcom/dmdirc/FrameContainer;)V == &updateStatus
    //#WindowStatusPlugin.java:: end of method: com.dmdirc.addons.windowstatus.WindowStatusPlugin.com.dmdirc.addons.windowstatus.WindowStatusPlugin__static_init
    //#WindowStatusPlugin.java:: end of class: com.dmdirc.addons.windowstatus.WindowStatusPlugin
