//# 0 errors, 466 messages
//#
/*
    //#DCCFrame.java:1:1: class: com.dmdirc.addons.dcc.DCCFrame$EmptyFrame
    //#DCCFrame.java:1:1: method: com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init
    //#DCCFrame.java:1:1: class: com.dmdirc.addons.dcc.DCCFrame$1
    //#DCCFrame.java:1:1: method: com.dmdirc.addons.dcc.DCCFrame$1.com.dmdirc.addons.dcc.DCCFrame$1__static_init
    //#DCCFrame.java:1:1: class: com.dmdirc.addons.dcc.DCCFrame
    //#DCCFrame.java:1:1: method: com.dmdirc.addons.dcc.DCCFrame.com.dmdirc.addons.dcc.DCCFrame__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.dcc;

import com.dmdirc.Main;
import com.dmdirc.Server;
import com.dmdirc.WritableFrameContainer;
import com.dmdirc.addons.ui_swing.components.frames.InputTextFrame;
import com.dmdirc.addons.ui_swing.components.frames.TextFrame;
import com.dmdirc.addons.ui_swing.SwingController;
import com.dmdirc.addons.ui_swing.UIUtilities;
import com.dmdirc.commandparser.PopupType;
import com.dmdirc.commandparser.parsers.CommandParser;
import com.dmdirc.commandparser.parsers.GlobalCommandParser;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.ui.WindowManager;
import com.dmdirc.ui.interfaces.InputWindow;

import com.dmdirc.util.ReturnableThread;
import java.awt.Container;

import javax.swing.JPopupMenu;

/**
 * This class links DCC objects to a window.
 *
 * @author Shane 'Dataforce' McCormack
 */
public abstract class DCCFrame extends WritableFrameContainer {
    //#DCCFrame.java:49: method: Window com.dmdirc.addons.dcc.DCCFrame.getFrame()
    //#DCCFrame.java:49: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCFrame
    //#    method: Window getFrame()
    //#    suspicious precondition index: [2]
    //#input(Window getFrame()): __Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(Window getFrame()): __Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(Window getFrame()): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(Window getFrame()): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(Window getFrame()): __Descendant_Table[others]
    //#input(Window getFrame()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(Window getFrame()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(Window getFrame()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(Window getFrame()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(Window getFrame()): this
    //#input(Window getFrame()): this.__Tag
    //#input(Window getFrame()): this.myWindow
    //#output(Window getFrame()): return_value
    //#pre[2] (Window getFrame()): this.__Tag in {com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[3] (Window getFrame()): init'ed(this.myWindow)
    //#post(Window getFrame()): return_value == this.myWindow
    //#post(Window getFrame()): init'ed(return_value)
    //#DCCFrame.java:49: end of method: Window com.dmdirc.addons.dcc.DCCFrame.getFrame()
	/**
	 * Empty Frame.
	 */
	private class EmptyFrame extends InputTextFrame {
			/** A version number for this class. */
			private static final long serialVersionUID = 200711271;
			
			/**
			 * Creates a new instance of EmptyFrame.
			 *
			 * @param owner The frame container that owns this frame
			 */
			public EmptyFrame(final WritableFrameContainer owner) {
    //#DCCFrame.java:62: method: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)
    //#input(void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)): Param_1
    //#input(void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)): com/dmdirc/Main.controller
    //#input(void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)): owner
    //#input(void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)): this
    //#output(void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)): this.this$0
    //#pre[2] (void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)): init'ed(com/dmdirc/Main.controller)
    //#post(void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)): init'ed(this.this$0)
				super(owner, (SwingController) Main.getUI());
    //#DCCFrame.java:63: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.frames.InputTextFrame(WritableFrameContainer, SwingController)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame$EmptyFrame
    //#    method: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.frames.InputTextFrame(WritableFrameContainer, SwingController)
				setTextPane(null);
    //#DCCFrame.java:64: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame:setTextPane(TextPane)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame$EmptyFrame
    //#    method: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame:setTextPane(TextPane)
				pack();
    //#DCCFrame.java:65: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame:pack()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame$EmptyFrame
    //#    method: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame:pack()
			}
    //#DCCFrame.java:66: end of method: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.com.dmdirc.addons.dcc.DCCFrame$EmptyFrame(DCCFrame, WritableFrameContainer)
			
			/**
			 * Retrieves the command Parser for this input window.
			 *
			 * @return This window's command parser
			 */
            @Override
			public final CommandParser getCommandParser() {
				return GlobalCommandParser.getGlobalCommandParser();
    //#DCCFrame.java:75: method: CommandParser com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getCommandParser()
    //#DCCFrame.java:75: Warning: method not available - call not analyzed
    //#    call on GlobalCommandParser com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame$EmptyFrame
    //#    method: CommandParser getCommandParser()
    //#    unanalyzed callee: GlobalCommandParser com.dmdirc.commandparser.parsers.GlobalCommandParser:getGlobalCommandParser()
    //#output(CommandParser getCommandParser()): return_value
    //#post(CommandParser getCommandParser()): init'ed(return_value)
    //#DCCFrame.java:75: end of method: CommandParser com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getCommandParser()
			}
            
			/** {@inheritDoc} */
			@Override
			public PopupType getNicknamePopupType() {
				return null;
    //#DCCFrame.java:81: method: PopupType com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getNicknamePopupType()
    //#output(PopupType getNicknamePopupType()): return_value
    //#post(PopupType getNicknamePopupType()): return_value == null
    //#DCCFrame.java:81: end of method: PopupType com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getNicknamePopupType()
			}

			/** {@inheritDoc} */
			@Override
			public PopupType getChannelPopupType() {
				return null;
    //#DCCFrame.java:87: method: PopupType com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getChannelPopupType()
    //#output(PopupType getChannelPopupType()): return_value
    //#post(PopupType getChannelPopupType()): return_value == null
    //#DCCFrame.java:87: end of method: PopupType com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getChannelPopupType()
			}

			/** {@inheritDoc} */
			@Override
			public PopupType getHyperlinkPopupType() {
				return null;
    //#DCCFrame.java:93: method: PopupType com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getHyperlinkPopupType()
    //#output(PopupType getHyperlinkPopupType()): return_value
    //#post(PopupType getHyperlinkPopupType()): return_value == null
    //#DCCFrame.java:93: end of method: PopupType com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getHyperlinkPopupType()
			}
			
			/** {@inheritDoc} */
			@Override
			public PopupType getNormalPopupType() {
				return null;
    //#DCCFrame.java:99: method: PopupType com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getNormalPopupType()
    //#output(PopupType getNormalPopupType()): return_value
    //#post(PopupType getNormalPopupType()): return_value == null
    //#DCCFrame.java:99: end of method: PopupType com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.getNormalPopupType()
			}

			/** {@inheritDoc} */
			@Override
			public void addCustomPopupItems(final JPopupMenu popupMenu) {
				//Add no custom popup items
			}
    //#DCCFrame.java:106: method: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.addCustomPopupItems(JPopupMenu)
    //#DCCFrame.java:106: end of method: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.addCustomPopupItems(JPopupMenu)
	}

	/** The window title. */
	protected final String title;
	/** The Window we're using. */
	protected InputWindow myWindow = null;
	/** The dcc plugin that owns this frame */
	protected final DCCPlugin plugin;
	/** The Window we're using. */
	private boolean windowClosing = false;
	
	/**
	 * Creates a new instance of DCCFrame with an empty window.
	 *
	 * @param plugin The DCCPlugin that owns this frame
	 * @param title The title of this window
	 * @param icon The icon to use
	 */
	public DCCFrame(final DCCPlugin plugin, final String title, final String icon) {
		this(plugin, title, icon, true);
    //#DCCFrame.java:126: method: void com.dmdirc.addons.dcc.DCCFrame.com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)
    //#DCCFrame.java:126: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCFrame
    //#    method: void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)
    //#    suspicious precondition index: [2]
    //#    Attribs:  Soft
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): icon
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): plugin
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.__Tag
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): title
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new ListenerList(FrameContainer#1) num objects
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new ListenerList(FrameContainer#1).__Lock
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.__Tag
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.changer
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.config
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.icon
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.listeners
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.myWindow
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.notification
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.plugin
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.title
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.windowClosing
    //#new obj(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new ListenerList(FrameContainer#1)
    //#pre[2] (void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): (soft) this.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#presumption(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@138 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): init'ed(com/dmdirc/FrameContainer.java.awt.Color.BLACK)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.__Tag == old this.__Tag
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.config != null
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.icon == icon
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): init'ed(this.icon)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.listeners == &new ListenerList(FrameContainer#1)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): init'ed(this.myWindow)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): init'ed(this.notification)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.plugin == plugin
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): init'ed(this.plugin)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.title == title
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): init'ed(this.title)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): this.windowClosing == 0
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new ListenerList(FrameContainer#1) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).__Tag == com/dmdirc/FrameContainer$IconChanger
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == this
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): new FrameContainer$IconChanger(FrameContainer#2).this$0 != null
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:getFrame
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)): Effects-of-calling:com.dmdirc.util.ListenerList
	}
    //#DCCFrame.java:127: end of method: void com.dmdirc.addons.dcc.DCCFrame.com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String)
	
	/**
	 * Creates a new instance of DCCFrame.
	 *
	 * @param plugin The DCCPlugin that owns this frame
	 * @param title The title of this window
	 * @param defaultWindow Create default (empty) window. (non-default = chat frame)
	 * @param icon The icon to use
	 */
	public DCCFrame(final DCCPlugin plugin, final String title, final String icon ,final boolean defaultWindow) {
		super(icon, IdentityManager.getGlobalConfig());
    //#DCCFrame.java:138: method: void com.dmdirc.addons.dcc.DCCFrame.com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)
    //#DCCFrame.java:138: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame
    //#    method: void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#DCCFrame.java:138: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCFrame
    //#    method: void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)
    //#    suspicious precondition index: [3]
    //#    Attribs:  Soft
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/Channel.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/CustomWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/GlobalWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/MessageTarget.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/Query.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/Raw.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/Server.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): defaultWindow
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): icon
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): plugin
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.__Tag
    //#input(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): title
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new FrameContainer$IconChanger(FrameContainer#2) num objects
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new FrameContainer$IconChanger(FrameContainer#2).__Tag
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new FrameContainer$IconChanger(FrameContainer#2).this$0
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new ListenerList(FrameContainer#1) num objects
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new ListenerList(FrameContainer#1).__Lock
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.__Tag
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.changer
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.config
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.icon
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.listeners
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.myWindow
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.notification
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.plugin
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.title
    //#output(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.windowClosing
    //#new obj(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new FrameContainer$IconChanger(FrameContainer#2)
    //#new obj(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new ListenerList(FrameContainer#1)
    //#pre[3] (void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): (soft) this.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#presumption(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@138 != null
    //#presumption(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): init'ed(com/dmdirc/FrameContainer.java.awt.Color.BLACK)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.__Tag == old this.__Tag
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.changer == &new FrameContainer$IconChanger(FrameContainer#2)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.config != null
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.icon == icon
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): init'ed(this.icon)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.listeners == &new ListenerList(FrameContainer#1)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): init'ed(this.myWindow)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.notification == com/dmdirc/FrameContainer.java.awt.Color.BLACK
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): init'ed(this.notification)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.plugin == plugin
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): init'ed(this.plugin)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.title == title
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): init'ed(this.title)
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): this.windowClosing == 0
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new FrameContainer$IconChanger(FrameContainer#2) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new ListenerList(FrameContainer#1) num objects == 1
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new FrameContainer$IconChanger(FrameContainer#2).__Tag == com/dmdirc/FrameContainer$IconChanger
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new FrameContainer$IconChanger(FrameContainer#2).this$0 == this
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): new FrameContainer$IconChanger(FrameContainer#2).this$0 != null
    //#post(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): init'ed(new ListenerList(FrameContainer#1).__Lock)
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:com.dmdirc.FrameContainer
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:com.dmdirc.util.ReturnableThread
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:getFrame
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:com.dmdirc.interfaces.IconChangeListener:iconChanged
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:com.dmdirc.config.ConfigManager:removeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#test_vector(void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)): defaultWindow: {0}, {1}
		this.title = title;
		this.plugin = plugin;

		if (defaultWindow) {
            myWindow = UIUtilities.invokeAndWait(new ReturnableThread<EmptyFrame>() {
    //#DCCFrame.java:143: method: void com.dmdirc.addons.dcc.DCCFrame$1.com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)
    //#DCCFrame.java:143: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ReturnableThread()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame$1
    //#    method: void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)
    //#    unanalyzed callee: void com.dmdirc.util.ReturnableThread()
    //#input(void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)): Param_1
    //#input(void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)): Param_2
    //#input(void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)): this
    //#output(void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)): this.this$0
    //#output(void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)): this.val$title
    //#post(void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)): this.val$title == Param_2
    //#post(void com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)): init'ed(this.val$title)
    //#DCCFrame.java:143: end of method: void com.dmdirc.addons.dcc.DCCFrame$1.com.dmdirc.addons.dcc.DCCFrame$1(DCCFrame, String)
    //#DCCFrame.java:143: Warning: method not available - call not analyzed
    //#    call on Object com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait(ReturnableThread)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame
    //#    method: void com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)
    //#    unanalyzed callee: Object com.dmdirc.addons.ui_swing.UIUtilities:invokeAndWait(ReturnableThread)
                /** {@inheritDoc} */
                @Override
                public void run() {
                    final EmptyFrame frame = new EmptyFrame(DCCFrame.this);
    //#DCCFrame.java:147: method: void com.dmdirc.addons.dcc.DCCFrame$1.run()
    //#input(void run()): com/dmdirc/Main.controller
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.val$title
    //#pre[1] (void run()): init'ed(com/dmdirc/Main.controller)
    //#unanalyzed(void run()): Effects-of-calling:getUI
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.InputTextFrame
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame$EmptyFrame:setTextPane
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame$EmptyFrame:pack
                    frame.setTitle(title);
    //#DCCFrame.java:148: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame:setTitle(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame$1
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCFrame$EmptyFrame:setTitle(String)
                    setObject(frame);
    //#DCCFrame.java:149: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.dcc.DCCFrame$1:setObject(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame$1
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.dcc.DCCFrame$1:setObject(Object)
                }
    //#DCCFrame.java:150: end of method: void com.dmdirc.addons.dcc.DCCFrame$1.run()
            });
		}
	}
    //#DCCFrame.java:153: end of method: void com.dmdirc.addons.dcc.DCCFrame.com.dmdirc.addons.dcc.DCCFrame(DCCPlugin, String, String, bool)
	
	/**
	 * Sends a line of text to this container's source.
	 *
	 * @param line The line to be sent
	 */
	@Override
	public void sendLine(final String line) {
		
	}
    //#DCCFrame.java:163: method: void com.dmdirc.addons.dcc.DCCFrame.sendLine(String)
    //#DCCFrame.java:163: end of method: void com.dmdirc.addons.dcc.DCCFrame.sendLine(String)
	
	/**
	 * Returns the maximum length that a line passed to sendLine() should be,
	 * in order to prevent it being truncated or causing protocol violations.
	 *
	 * @return The maximum line length for this container
	 */
	@Override
	public int getMaxLineLength() {
		return 512;
    //#DCCFrame.java:173: method: int com.dmdirc.addons.dcc.DCCFrame.getMaxLineLength()
    //#output(int getMaxLineLength()): return_value
    //#post(int getMaxLineLength()): return_value == 512
    //#DCCFrame.java:173: end of method: int com.dmdirc.addons.dcc.DCCFrame.getMaxLineLength()
	}
	
	/**
	 * Returns the internal frame associated with this object.
	 *
	 * @return The internal frame associated with this object
	 */
	@Override
	public InputWindow getFrame() {
		return myWindow;
    //#DCCFrame.java:183: method: InputWindow com.dmdirc.addons.dcc.DCCFrame.getFrame()
    //#input(InputWindow getFrame()): this
    //#input(InputWindow getFrame()): this.myWindow
    //#output(InputWindow getFrame()): return_value
    //#pre[2] (InputWindow getFrame()): init'ed(this.myWindow)
    //#post(InputWindow getFrame()): return_value == this.myWindow
    //#post(InputWindow getFrame()): init'ed(return_value)
    //#DCCFrame.java:183: end of method: InputWindow com.dmdirc.addons.dcc.DCCFrame.getFrame()
	}
	
	/**
	 * Returns the content pane of the internal frame associated with this object.
	 *
	 * @return The content pane of the internal frame associated with this object
	 */
	public Container getContentPane() {
		return ((TextFrame)getFrame()).getContentPane();
    //#DCCFrame.java:192: method: Container com.dmdirc.addons.dcc.DCCFrame.getContentPane()
    //#DCCFrame.java:192: Warning: method not available - call not analyzed
    //#    call on Container com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame
    //#    method: Container getContentPane()
    //#    unanalyzed callee: Container com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContentPane()
    //#DCCFrame.java:192: Warning: suspicious precondition
    //#    The precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.dcc.DCCFrame
    //#    method: Container getContentPane()
    //#    suspicious precondition index: [2]
    //#input(Container getContentPane()): __Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(Container getContentPane()): __Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(Container getContentPane()): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(Container getContentPane()): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(Container getContentPane()): __Descendant_Table[others]
    //#input(Container getContentPane()): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(Container getContentPane()): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(Container getContentPane()): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(Container getContentPane()): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#input(Container getContentPane()): this
    //#input(Container getContentPane()): this.__Tag
    //#input(Container getContentPane()): this.myWindow
    //#output(Container getContentPane()): return_value
    //#pre[2] (Container getContentPane()): this.__Tag in {com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[3] (Container getContentPane()): this.myWindow != null
    //#post(Container getContentPane()): init'ed(return_value)
    //#DCCFrame.java:192: end of method: Container com.dmdirc.addons.dcc.DCCFrame.getContentPane()
	}
	
	/**
	 * Returns a string identifier for this object/its frame.
	 *
	 * @return String identifier
	 */
	@Override
	public String toString() {
		return title;
    //#DCCFrame.java:202: method: String com.dmdirc.addons.dcc.DCCFrame.toString()
    //#input(String toString()): this
    //#input(String toString()): this.title
    //#output(String toString()): return_value
    //#post(String toString()): return_value == this.title
    //#post(String toString()): init'ed(return_value)
    //#DCCFrame.java:202: end of method: String com.dmdirc.addons.dcc.DCCFrame.toString()
	}
	
	/**
	 * Returns the server instance associated with this container.
	 *
	 * @return the associated server connection
	 */
	@Override
	public Server getServer() {
		return null;
    //#DCCFrame.java:212: method: Server com.dmdirc.addons.dcc.DCCFrame.getServer()
    //#output(Server getServer()): return_value
    //#post(Server getServer()): return_value == null
    //#DCCFrame.java:212: end of method: Server com.dmdirc.addons.dcc.DCCFrame.getServer()
	}
	
	/**
	 * Is the window closing?
	 *
	 * @return True if windowClosing has been called.
	 */
	public final boolean isWindowClosing() {
		return windowClosing;
    //#DCCFrame.java:221: method: bool com.dmdirc.addons.dcc.DCCFrame.isWindowClosing()
    //#input(bool isWindowClosing()): this
    //#input(bool isWindowClosing()): this.windowClosing
    //#output(bool isWindowClosing()): return_value
    //#pre[2] (bool isWindowClosing()): init'ed(this.windowClosing)
    //#post(bool isWindowClosing()): return_value == this.windowClosing
    //#post(bool isWindowClosing()): init'ed(return_value)
    //#DCCFrame.java:221: end of method: bool com.dmdirc.addons.dcc.DCCFrame.isWindowClosing()
	}
	
	/** {@inheritDoc} */
	@Override
	public void windowClosing() {
		windowClosing = true;
    //#DCCFrame.java:227: method: void com.dmdirc.addons.dcc.DCCFrame.windowClosing()
    //#input(void windowClosing()): __Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(void windowClosing()): __Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(void windowClosing()): __Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(void windowClosing()): __Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(void windowClosing()): __Descendant_Table[others]
    //#input(void windowClosing()): this
    //#input(void windowClosing()): this.myWindow
    //#input(void windowClosing()): this.plugin
    //#input(void windowClosing()): this.plugin.childFrames
    //#input(void windowClosing()): this.plugin.container
    //#output(void windowClosing()): this.myWindow
    //#output(void windowClosing()): this.plugin.container
    //#output(void windowClosing()): this.windowClosing
    //#pre[3] (void windowClosing()): this.myWindow != null
    //#pre[4] (void windowClosing()): init'ed(this.plugin.container)
    //#pre[7] (void windowClosing()): this.plugin != null
    //#pre[9] (void windowClosing()): (soft) this.plugin.childFrames != null
    //#post(void windowClosing()): this.myWindow == null
    //#post(void windowClosing()): this.plugin.container == One-of{old this.plugin.container, null}
    //#post(void windowClosing()): init'ed(this.plugin.container)
    //#post(void windowClosing()): this.windowClosing == 1
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void windowClosing()): Effects-of-calling:com.dmdirc.addons.dcc.DCCFrame:close
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:clear
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void windowClosing()): Effects-of-calling:java.util.List:isEmpty
		
		// 1: Make the window non-visible
		myWindow.setVisible(false);
    //#DCCFrame.java:230: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputWindow:setVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame
    //#    method: void windowClosing()
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputWindow:setVisible(bool)
		
		// 2: Remove any callbacks or listeners
		// 3: Trigger any actions neccessary
		// 4: Trigger action for the window closing
		
		// 5: Inform any parents that the window is closing
		plugin.delWindow(this);

		// 6: Remove the window from the window manager
		WindowManager.removeWindow(myWindow);
    //#DCCFrame.java:240: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.WindowManager:removeWindow(Window)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.dcc.DCCFrame
    //#    method: void windowClosing()
    //#    unanalyzed callee: void com.dmdirc.ui.WindowManager:removeWindow(Window)

		// 7: Remove any references to the window and parents
		myWindow = null; // NOPMD
	}   
    //#DCCFrame.java:244: end of method: void com.dmdirc.addons.dcc.DCCFrame.windowClosing()
}
    //#output(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCFrame$EmptyFrame]
    //#output(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.addCustomPopupItems(Ljavax/swing/JPopupMenu;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getChannelPopupType()Lcom/dmdirc/commandparser/PopupType;
    //#output(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getCommandParser()Lcom/dmdirc/commandparser/parsers/CommandParser;
    //#output(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getHyperlinkPopupType()Lcom/dmdirc/commandparser/PopupType;
    //#output(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getNicknamePopupType()Lcom/dmdirc/commandparser/PopupType;
    //#output(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getNormalPopupType()Lcom/dmdirc/commandparser/PopupType;
    //#post(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCFrame$EmptyFrame] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.addCustomPopupItems(Ljavax/swing/JPopupMenu;)V == &addCustomPopupItems
    //#post(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getChannelPopupType()Lcom/dmdirc/commandparser/PopupType; == &getChannelPopupType
    //#post(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getCommandParser()Lcom/dmdirc/commandparser/parsers/CommandParser; == &getCommandParser
    //#post(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getHyperlinkPopupType()Lcom/dmdirc/commandparser/PopupType; == &getHyperlinkPopupType
    //#post(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getNicknamePopupType()Lcom/dmdirc/commandparser/PopupType; == &getNicknamePopupType
    //#post(com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init): __Dispatch_Table.getNormalPopupType()Lcom/dmdirc/commandparser/PopupType; == &getNormalPopupType
    //#DCCFrame.java:: end of method: com.dmdirc.addons.dcc.DCCFrame$EmptyFrame.com.dmdirc.addons.dcc.DCCFrame$EmptyFrame__static_init
    //#DCCFrame.java:: end of class: com.dmdirc.addons.dcc.DCCFrame$EmptyFrame
    //#output(com.dmdirc.addons.dcc.DCCFrame$1__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCFrame$1]
    //#output(com.dmdirc.addons.dcc.DCCFrame$1__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.dcc.DCCFrame$1__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCFrame$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCFrame$1__static_init): __Dispatch_Table.run()V == &run
    //#DCCFrame.java:: end of method: com.dmdirc.addons.dcc.DCCFrame$1.com.dmdirc.addons.dcc.DCCFrame$1__static_init
    //#DCCFrame.java:: end of class: com.dmdirc.addons.dcc.DCCFrame$1
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.activateFrame()V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.clearNotification()V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.close()V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.doNotification(Ljava/lang/String;Lcom/dmdirc/actions/interfaces/ActionType;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager;
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getContentPane()Ljava/awt/Container;
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow;
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window;
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon;
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getMaxLineLength()I
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color;
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.iconUpdated()V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.isWindowClosing()Z
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List;
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowActivated()V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowClosed()V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowClosing()V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowDeactivated()V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowOpened()V
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#output(com.dmdirc.addons.dcc.DCCFrame__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Descendant_Table[com/dmdirc/addons/dcc/DCCFrame] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): com/dmdirc/WritableFrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame] == &__Dispatch_Table
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.activateFrame()V == &com/dmdirc/FrameContainer.activateFrame
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.addIconChangeListener
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addLine(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addLine(Ljava/lang/StringBuffer;[Ljava/lang/Object;)V == &com/dmdirc/FrameContainer.addLine
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.addNotificationListener
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.addSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.addSelectionListener
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.clearNotification()V == &com/dmdirc/FrameContainer.clearNotification
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.close()V == &com/dmdirc/FrameContainer.close
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.despatchNotification(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.despatchNotification
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.doNotification(Ljava/lang/String;Lcom/dmdirc/actions/interfaces/ActionType;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.doNotification
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getConfigManager()Lcom/dmdirc/config/ConfigManager; == &com/dmdirc/FrameContainer.getConfigManager
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getContentPane()Ljava/awt/Container; == &getContentPane
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/InputWindow; == &getFrame
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getFrame()Lcom/dmdirc/ui/interfaces/Window; == &getFrame
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getIcon()Ljavax/swing/Icon; == &com/dmdirc/FrameContainer.getIcon
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getMaxLineLength()I == &getMaxLineLength
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getNotification()Ljava/awt/Color; == &com/dmdirc/FrameContainer.getNotification
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getNumLines(Ljava/lang/String;)I == &com/dmdirc/WritableFrameContainer.getNumLines
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.getServer()Lcom/dmdirc/Server; == &getServer
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.handleNotification(Ljava/lang/String;[Ljava/lang/Object;)V == &com/dmdirc/WritableFrameContainer.handleNotification
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.iconUpdated()V == &com/dmdirc/FrameContainer.iconUpdated
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.isWindowClosing()Z == &isWindowClosing
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.modifyNotificationArgs(Ljava/util/List;Ljava/util/List;)V == &com/dmdirc/WritableFrameContainer.modifyNotificationArgs
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.ownsFrame(Lcom/dmdirc/ui/interfaces/Window;)Z == &com/dmdirc/FrameContainer.ownsFrame
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.processNotificationArg(Ljava/lang/Object;Ljava/util/List;)Z == &com/dmdirc/WritableFrameContainer.processNotificationArg
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.removeIconChangeListener(Lcom/dmdirc/interfaces/IconChangeListener;)V == &com/dmdirc/FrameContainer.removeIconChangeListener
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.removeNotificationListener(Lcom/dmdirc/interfaces/NotificationListener;)V == &com/dmdirc/FrameContainer.removeNotificationListener
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.removeSelectionListener(Lcom/dmdirc/interfaces/SelectionListener;)V == &com/dmdirc/FrameContainer.removeSelectionListener
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.sendLine(Ljava/lang/String;)V == &sendLine
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.sendNotification(Ljava/awt/Color;)V == &com/dmdirc/FrameContainer.sendNotification
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.setIcon(Ljava/lang/String;)V == &com/dmdirc/FrameContainer.setIcon
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.splitLine(Ljava/lang/String;)Ljava/util/List; == &com/dmdirc/WritableFrameContainer.splitLine
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowActivated()V == &com/dmdirc/FrameContainer.windowActivated
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowClosed()V == &com/dmdirc/FrameContainer.windowClosed
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowClosing()V == &windowClosing
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowDeactivated()V == &com/dmdirc/FrameContainer.windowDeactivated
    //#post(com.dmdirc.addons.dcc.DCCFrame__static_init): __Dispatch_Table.windowOpened()V == &com/dmdirc/FrameContainer.windowOpened
    //#DCCFrame.java:: end of method: com.dmdirc.addons.dcc.DCCFrame.com.dmdirc.addons.dcc.DCCFrame__static_init
    //#DCCFrame.java:: end of class: com.dmdirc.addons.dcc.DCCFrame
