//# 0 errors, 688 messages
//#
/*
    //#TopicPane.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$1
    //#TopicPane.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$1.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$1__static_init
    //#TopicPane.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction
    //#TopicPane.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction__static_init
    //#TopicPane.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#TopicPane.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__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.ui_swing.dialogs.channelsetting;

import com.dmdirc.Channel;
import com.dmdirc.Topic;
import com.dmdirc.logger.ErrorLevel;
import com.dmdirc.logger.Logger;
import com.dmdirc.addons.ui_swing.UIUtilities;
import com.dmdirc.addons.ui_swing.actions.NoNewlinesPasteAction;
import com.dmdirc.addons.ui_swing.components.SwingInputHandler;
import com.dmdirc.addons.ui_swing.components.TextAreaInputField;
import com.dmdirc.addons.ui_swing.components.text.TextLabel;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.swing.AbstractAction;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.KeyStroke;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import net.miginfocom.swing.MigLayout;

/** Topic panel. */
public final class TopicPane extends JPanel implements DocumentListener,
    //#TopicPane.java:57: method: ChannelSettingsDialog com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.access$100(TopicPane)
    //#input(ChannelSettingsDialog access$100(TopicPane)): x0
    //#input(ChannelSettingsDialog access$100(TopicPane)): x0.parent
    //#output(ChannelSettingsDialog access$100(TopicPane)): return_value
    //#pre[1] (ChannelSettingsDialog access$100(TopicPane)): x0 != null
    //#post(ChannelSettingsDialog access$100(TopicPane)): return_value == x0.parent
    //#post(ChannelSettingsDialog access$100(TopicPane)): init'ed(return_value)
    //#TopicPane.java:57: end of method: ChannelSettingsDialog com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.access$100(TopicPane)
        ActionListener {

    /**
     * A version number for this class. It should be changed whenever the class
     * structure is changed (or anything else that would prevent serialized
     * objects being unserialized with the new class).
     */
    private static final long serialVersionUID = 2;
    /** Parent channel. */
    private final Channel channel;
    /** Parent dialog. */
    private final ChannelSettingsDialog parent;
    /** the maximum length allowed for a topic. */
    private int topicLengthMax;
    /** label showing the number of characters left in a topic.*/
    private JLabel topicLengthLabel;
    /** Topic text entry text area. */
    private TextAreaInputField topicText;
    /** Topic who. */
    private TextLabel topicWho;
    /** Topic history. */
    private JComboBox topicHistory;

    /**
     * Creates a new instance of TopicModesPane.
     *
     * @param channel Parent channel
     * @param parent Parent dialog
     */
    public TopicPane(final Channel channel,
            final ChannelSettingsDialog parent) {
        super();
    //#TopicPane.java:89: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): " available "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): " available"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): " characters"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): " of "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): " too many characters"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): "&#10; on "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): "0 of "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): "; "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): "Set by "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): "body { font-family: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): "font-size: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): "pt; }"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): channel
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): com.dmdirc.logger.ErrorLevel.LOW
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): java.awt.Color.BLACK
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): java.awt.Color.RED
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): parent
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new JComboBox(initTopicsPanel#3) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new JLabel(initTopicsPanel#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new SimpleAttributeSet(TextLabel#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new TextAreaInputField(initTopicsPanel#2) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new TextLabel(initTopicsPanel#5) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicWho.__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicWho.sas
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.channel
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.parent
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicHistory
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicLengthLabel
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicLengthMax
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicText
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicWho
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new JComboBox(initTopicsPanel#3)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new JLabel(initTopicsPanel#1)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new SimpleAttributeSet(TextLabel#6)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new TextAreaInputField(initTopicsPanel#2)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new TextLabel(initTopicsPanel#5)
    //#pre[1] (void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): channel != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): com.dmdirc.Channel:getServer(...)@95 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): com.dmdirc.Server:getParser(...)@95 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): init'ed(com.dmdirc.logger.ErrorLevel.LOW)
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): com.dmdirc.parser.irc.IRCParser:get005(...)@95 != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.channel == channel
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.channel != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.parent == parent
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): init'ed(this.parent)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicHistory == &new JComboBox(initTopicsPanel#3)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicLengthLabel == &new JLabel(initTopicsPanel#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): init'ed(this.topicLengthMax)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicText == &new TextAreaInputField(initTopicsPanel#2)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicWho == &new TextLabel(initTopicsPanel#5)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new JComboBox(initTopicsPanel#3) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new JLabel(initTopicsPanel#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new SimpleAttributeSet(TextLabel#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new TextAreaInputField(initTopicsPanel#2) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): new TextLabel(initTopicsPanel#5) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicWho.__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): this.topicWho.sas == &new SimpleAttributeSet(TextLabel#6)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JLabel:setForeground
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.Channel:getChannelInfo
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getTopic
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JComboBox:getSelectedItem
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.Topic:getClient
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.Topic:getTime
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.util.Date
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.Topic:getTopic
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.Channel:getTopics
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.util.Collections:reverse
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.util.List:toArray
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.DefaultComboBoxModel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JComboBox
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JComboBox:setPrototypeDisplayValue
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JComboBox:getModel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.ComboBoxModel:getSize
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JComboBox:setEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setLineWrap
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setWrapStyleWord
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setRows
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setColumns
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.Channel:getFrame
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.SwingInputHandler:setTypes
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getActionMap
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.actions.NoNewlinesPasteAction
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.ActionMap:put
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getInputMap
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.KeyStroke:getKeyStroke
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.AbstractAction
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.InputMap:put
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:getCtrlDownMask
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setVisible
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:removeAll
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.text.Document:addDocumentListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): Effects-of-calling:javax.swing.JComboBox:addActionListener
    //#test_vector(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)): java.util.Map:containsKey(...)@97: {0}, {1}

        this.setOpaque(UIUtilities.getTabbedPaneOpaque());
    //#TopicPane.java:91: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.addons.ui_swing.UIUtilities:getTabbedPaneOpaque()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)
    //#    unanalyzed callee: bool com.dmdirc.addons.ui_swing.UIUtilities:getTabbedPaneOpaque()
    //#TopicPane.java:91: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setOpaque(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setOpaque(bool)
        this.channel = channel;
        this.parent = parent;

        final Map<String, String> iSupport =
    //#TopicPane.java:95: Warning: method not available - call not analyzed
    //#    call on Server com.dmdirc.Channel:getServer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)
    //#    unanalyzed callee: Server com.dmdirc.Channel:getServer()
    //#TopicPane.java:95: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#TopicPane.java:95: Warning: method not available - call not analyzed
    //#    call on Map com.dmdirc.parser.irc.IRCParser:get005()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)
    //#    unanalyzed callee: Map com.dmdirc.parser.irc.IRCParser:get005()
                channel.getServer().getParser().get005();
        if (iSupport.containsKey("TOPICLEN")) {
            try {
                topicLengthMax =
                        Integer.parseInt(iSupport.get("TOPICLEN"));
            } catch (NumberFormatException ex) {
                topicLengthMax = 0;
                Logger.userError(ErrorLevel.LOW,
    //#TopicPane.java:103: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:userError(ErrorLevel, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:userError(ErrorLevel, String)
                        "IRCD doesnt supply topic length");
            }
        }

        update();
    }
    //#TopicPane.java:109: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane(Channel, ChannelSettingsDialog)

    /** Updates the panel. */
    public void update() {
        setVisible(false);
    //#TopicPane.java:113: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.update()
    //#TopicPane.java:113: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void update()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setVisible(bool)
    //#input(void update()): " available "._tainted
    //#input(void update()): " available"._tainted
    //#input(void update()): " characters"._tainted
    //#input(void update()): " of "._tainted
    //#input(void update()): " too many characters"._tainted
    //#input(void update()): "&#10; on "._tainted
    //#input(void update()): "0 of "._tainted
    //#input(void update()): "; "._tainted
    //#input(void update()): "Set by "._tainted
    //#input(void update()): "body { font-family: "._tainted
    //#input(void update()): "font-size: "._tainted
    //#input(void update()): "pt; }"._tainted
    //#input(void update()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void update()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void update()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void update()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void update()): java.awt.Color.BLACK
    //#input(void update()): java.awt.Color.RED
    //#input(void update()): this
    //#input(void update()): this.channel
    //#input(void update()): this.topicLengthMax
    //#input(void update()): this.topicWho.__Tag
    //#output(void update()): new JComboBox(initTopicsPanel#3) num objects
    //#output(void update()): new JLabel(initTopicsPanel#1) num objects
    //#output(void update()): new SimpleAttributeSet(TextLabel#6) num objects
    //#output(void update()): new TextAreaInputField(initTopicsPanel#2) num objects
    //#output(void update()): new TextLabel(initTopicsPanel#5) num objects
    //#output(void update()): this.topicWho.__Tag
    //#output(void update()): this.topicWho.sas
    //#output(void update()): this.topicHistory
    //#output(void update()): this.topicLengthLabel
    //#output(void update()): this.topicText
    //#output(void update()): this.topicWho
    //#new obj(void update()): new JComboBox(initTopicsPanel#3)
    //#new obj(void update()): new JLabel(initTopicsPanel#1)
    //#new obj(void update()): new SimpleAttributeSet(TextLabel#6)
    //#new obj(void update()): new TextAreaInputField(initTopicsPanel#2)
    //#new obj(void update()): new TextLabel(initTopicsPanel#5)
    //#pre[2] (void update()): this.channel != null
    //#pre[3] (void update()): init'ed(this.topicLengthMax)
    //#presumption(void update()): com.dmdirc.addons.ui_swing.components.TextAreaInputField:getDocument(...)@119 != null
    //#post(void update()): this.topicHistory == &new JComboBox(initTopicsPanel#3)
    //#post(void update()): this.topicLengthLabel == &new JLabel(initTopicsPanel#1)
    //#post(void update()): this.topicText == &new TextAreaInputField(initTopicsPanel#2)
    //#post(void update()): this.topicWho == &new TextLabel(initTopicsPanel#5)
    //#post(void update()): new JComboBox(initTopicsPanel#3) num objects == 1
    //#post(void update()): new JLabel(initTopicsPanel#1) num objects == 1
    //#post(void update()): new SimpleAttributeSet(TextLabel#6) num objects == 1
    //#post(void update()): new TextAreaInputField(initTopicsPanel#2) num objects == 1
    //#post(void update()): new TextLabel(initTopicsPanel#5) num objects == 1
    //#post(void update()): this.topicWho.__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#post(void update()): this.topicWho.sas == &new SimpleAttributeSet(TextLabel#6)
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JLabel:setForeground
    //#unanalyzed(void update()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText
    //#unanalyzed(void update()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void update()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void update()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.Channel:getChannelInfo
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getTopic
    //#unanalyzed(void update()): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setLayout
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JComboBox:getSelectedItem
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void update()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.Topic:getClient
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.Topic:getTime
    //#unanalyzed(void update()): Effects-of-calling:java.util.Date
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.Topic:getTopic
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setText
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.Channel:getTopics
    //#unanalyzed(void update()): Effects-of-calling:java.util.Collections:reverse
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField
    //#unanalyzed(void update()): Effects-of-calling:java.util.List:toArray
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.DefaultComboBoxModel
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JComboBox
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JComboBox:setPrototypeDisplayValue
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void update()): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void update()): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void update()): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JComboBox:getModel
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.ComboBoxModel:getSize
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.JComboBox:setEnabled
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setLineWrap
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setWrapStyleWord
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setRows
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setColumns
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.Channel:getFrame
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.ui.interfaces.InputWindow:getCommandParser
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.SwingInputHandler:setTypes
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getActionMap
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.actions.NoNewlinesPasteAction
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.ActionMap:put
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getInputMap
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.KeyStroke:getKeyStroke
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.AbstractAction
    //#unanalyzed(void update()): Effects-of-calling:javax.swing.InputMap:put
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:getCtrlDownMask
    //#unanalyzed(void update()): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager

        removeAll();
    //#TopicPane.java:115: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:removeAll()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void update()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:removeAll()
        initTopicsPanel();
        layoutComponents();

        topicText.getDocument().addDocumentListener(this);
    //#TopicPane.java:119: Warning: method not available - call not analyzed
    //#    call on Document com.dmdirc.addons.ui_swing.components.TextAreaInputField:getDocument()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void update()
    //#    unanalyzed callee: Document com.dmdirc.addons.ui_swing.components.TextAreaInputField:getDocument()
        topicHistory.addActionListener(this);

        setVisible(true);
    //#TopicPane.java:122: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void update()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setVisible(bool)
    }
    //#TopicPane.java:123: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.update()

    /** Initialises the topic panel. */
    private void initTopicsPanel() {
        final List<Topic> topics = channel.getTopics();
    //#TopicPane.java:127: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.initTopicsPanel()
    //#TopicPane.java:127: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.Channel:getTopics()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: List com.dmdirc.Channel:getTopics()
    //#input(void initTopicsPanel()): " available "._tainted
    //#input(void initTopicsPanel()): " available"._tainted
    //#input(void initTopicsPanel()): " characters"._tainted
    //#input(void initTopicsPanel()): " of "._tainted
    //#input(void initTopicsPanel()): " too many characters"._tainted
    //#input(void initTopicsPanel()): "&#10; on "._tainted
    //#input(void initTopicsPanel()): "0 of "._tainted
    //#input(void initTopicsPanel()): "; "._tainted
    //#input(void initTopicsPanel()): "Set by "._tainted
    //#input(void initTopicsPanel()): "body { font-family: "._tainted
    //#input(void initTopicsPanel()): "font-size: "._tainted
    //#input(void initTopicsPanel()): "pt; }"._tainted
    //#input(void initTopicsPanel()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void initTopicsPanel()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void initTopicsPanel()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void initTopicsPanel()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void initTopicsPanel()): java.awt.Color.BLACK
    //#input(void initTopicsPanel()): java.awt.Color.RED
    //#input(void initTopicsPanel()): this
    //#input(void initTopicsPanel()): this.channel
    //#input(void initTopicsPanel()): this.topicLengthMax
    //#input(void initTopicsPanel()): this.topicWho.__Tag
    //#output(void initTopicsPanel()): new JComboBox(initTopicsPanel#3) num objects
    //#output(void initTopicsPanel()): new JLabel(initTopicsPanel#1) num objects
    //#output(void initTopicsPanel()): new SimpleAttributeSet(TextLabel#6) num objects
    //#output(void initTopicsPanel()): new TextAreaInputField(initTopicsPanel#2) num objects
    //#output(void initTopicsPanel()): new TextLabel(initTopicsPanel#5) num objects
    //#output(void initTopicsPanel()): this.topicWho.__Tag
    //#output(void initTopicsPanel()): this.topicWho.sas
    //#output(void initTopicsPanel()): this.topicHistory
    //#output(void initTopicsPanel()): this.topicLengthLabel
    //#output(void initTopicsPanel()): this.topicText
    //#output(void initTopicsPanel()): this.topicWho
    //#new obj(void initTopicsPanel()): new JComboBox(initTopicsPanel#3)
    //#new obj(void initTopicsPanel()): new JLabel(initTopicsPanel#1)
    //#new obj(void initTopicsPanel()): new SimpleAttributeSet(TextLabel#6)
    //#new obj(void initTopicsPanel()): new TextAreaInputField(initTopicsPanel#2)
    //#new obj(void initTopicsPanel()): new TextLabel(initTopicsPanel#5)
    //#pre[2] (void initTopicsPanel()): this.channel != null
    //#pre[3] (void initTopicsPanel()): init'ed(this.topicLengthMax)
    //#presumption(void initTopicsPanel()): com.dmdirc.Channel:getChannelInfo(...)@140 != null
    //#presumption(void initTopicsPanel()): com.dmdirc.Channel:getFrame(...)@145 != null
    //#presumption(void initTopicsPanel()): com.dmdirc.Channel:getTopics(...)@127 != null
    //#presumption(void initTopicsPanel()): com.dmdirc.addons.ui_swing.components.TextAreaInputField:getActionMap(...)@148 != null
    //#presumption(void initTopicsPanel()): com.dmdirc.addons.ui_swing.components.TextAreaInputField:getInputMap(...)@151 != null
    //#presumption(void initTopicsPanel()): com.dmdirc.addons.ui_swing.components.TextAreaInputField:getInputMap(...)@154 != null
    //#presumption(void initTopicsPanel()): javax.swing.JComboBox:getModel(...)@136 != null
    //#post(void initTopicsPanel()): this.topicHistory == &new JComboBox(initTopicsPanel#3)
    //#post(void initTopicsPanel()): this.topicLengthLabel == &new JLabel(initTopicsPanel#1)
    //#post(void initTopicsPanel()): this.topicText == &new TextAreaInputField(initTopicsPanel#2)
    //#post(void initTopicsPanel()): this.topicWho == &new TextLabel(initTopicsPanel#5)
    //#post(void initTopicsPanel()): new JComboBox(initTopicsPanel#3) num objects == 1
    //#post(void initTopicsPanel()): new JLabel(initTopicsPanel#1) num objects == 1
    //#post(void initTopicsPanel()): new SimpleAttributeSet(TextLabel#6) num objects == 1
    //#post(void initTopicsPanel()): new TextAreaInputField(initTopicsPanel#2) num objects == 1
    //#post(void initTopicsPanel()): new TextLabel(initTopicsPanel#5) num objects == 1
    //#post(void initTopicsPanel()): this.topicWho.__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#post(void initTopicsPanel()): this.topicWho.sas == &new SimpleAttributeSet(TextLabel#6)
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.JLabel:setForeground
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.JComboBox:getSelectedItem
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.Topic:getClient
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.Topic:getTime
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:java.util.Date
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.Topic:getTopic
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:setText
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void initTopicsPanel()): Effects-of-calling:javax.swing.AbstractAction
    //#test_vector(void initTopicsPanel()): javax.swing.ComboBoxModel:getSize(...)@136: {-2_147_483_648..-1, 1..4_294_967_295}, {0}
        Collections.reverse(topics);
        topicLengthLabel = new JLabel();
        topicText = new TextAreaInputField(100, 4);
    //#TopicPane.java:130: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TextAreaInputField(int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TextAreaInputField(int, int)
        topicHistory =
                new JComboBox(new DefaultComboBoxModel(topics.toArray()));
        topicHistory.setPrototypeDisplayValue("This is a substantial prototype value");
        topicWho = new TextLabel();

        if (topicHistory.getModel().getSize() == 0) {
            topicHistory.setEnabled(false);
        }

        topicText.setText(channel.getChannelInfo().getTopic());
    //#TopicPane.java:140: Warning: method not available - call not analyzed
    //#    call on ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#TopicPane.java:140: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelInfo:getTopic()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelInfo:getTopic()
    //#TopicPane.java:140: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setText(String)
        topicText.setLineWrap(true);
    //#TopicPane.java:141: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setLineWrap(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setLineWrap(bool)
        topicText.setWrapStyleWord(true);
    //#TopicPane.java:142: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setWrapStyleWord(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setWrapStyleWord(bool)
        topicText.setRows(5);
    //#TopicPane.java:143: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setRows(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setRows(int)
        topicText.setColumns(30);
    //#TopicPane.java:144: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setColumns(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setColumns(int)
        new SwingInputHandler(topicText, channel.getFrame().getCommandParser(), 
    //#TopicPane.java:145: Warning: method not available - call not analyzed
    //#    call on InputWindow com.dmdirc.Channel:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: InputWindow com.dmdirc.Channel:getFrame()
    //#TopicPane.java:145: Warning: method not available - call not analyzed
    //#    call on CommandParser com.dmdirc.ui.interfaces.InputWindow:getCommandParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: CommandParser com.dmdirc.ui.interfaces.InputWindow:getCommandParser()
    //#TopicPane.java:145: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.SwingInputHandler(InputField, CommandParser, InputWindow)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.SwingInputHandler(InputField, CommandParser, InputWindow)
    //#TopicPane.java:145: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.SwingInputHandler:setTypes(bool, bool, bool, bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.SwingInputHandler:setTypes(bool, bool, bool, bool)
                channel.getFrame()).setTypes(false, false, true, false);

        topicText.getActionMap().
    //#TopicPane.java:148: Warning: method not available - call not analyzed
    //#    call on ActionMap com.dmdirc.addons.ui_swing.components.TextAreaInputField:getActionMap()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: ActionMap com.dmdirc.addons.ui_swing.components.TextAreaInputField:getActionMap()
    //#TopicPane.java:148: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.actions.NoNewlinesPasteAction()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.actions.NoNewlinesPasteAction()
                put("paste-from-clipboard",
                new NoNewlinesPasteAction());
        topicText.getInputMap().
    //#TopicPane.java:151: Warning: method not available - call not analyzed
    //#    call on InputMap com.dmdirc.addons.ui_swing.components.TextAreaInputField:getInputMap()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: InputMap com.dmdirc.addons.ui_swing.components.TextAreaInputField:getInputMap()
                put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
                new EnterAction());
        topicText.getInputMap().
    //#TopicPane.java:154: Warning: method not available - call not analyzed
    //#    call on InputMap com.dmdirc.addons.ui_swing.components.TextAreaInputField:getInputMap()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: InputMap com.dmdirc.addons.ui_swing.components.TextAreaInputField:getInputMap()
    //#TopicPane.java:154: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.UIUtilities:getCtrlDownMask()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.UIUtilities:getCtrlDownMask()
                put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, UIUtilities.getCtrlDownMask()),
                new EnterAction());
        
        UIUtilities.addUndoManager(topicText);
    //#TopicPane.java:158: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager(JTextComponent)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void initTopicsPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager(JTextComponent)

        topicChanged();
        actionPerformed(null);
    }
    //#TopicPane.java:162: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.initTopicsPanel()

    /** Lays out the components. */
    private void layoutComponents() {
        setLayout(new MigLayout("wrap 1, fill, wmax 450"));
    //#TopicPane.java:166: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.layoutComponents()
    //#TopicPane.java:166: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#TopicPane.java:166: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setLayout(LayoutManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:setLayout(LayoutManager)
    //#input(void layoutComponents()): this
    //#input(void layoutComponents()): this.topicHistory
    //#input(void layoutComponents()): this.topicLengthLabel
    //#input(void layoutComponents()): this.topicText
    //#input(void layoutComponents()): this.topicWho
    //#pre[2] (void layoutComponents()): init'ed(this.topicHistory)
    //#pre[3] (void layoutComponents()): init'ed(this.topicLengthLabel)
    //#pre[4] (void layoutComponents()): init'ed(this.topicText)
    //#pre[5] (void layoutComponents()): init'ed(this.topicWho)

        add(topicHistory, "growx, pushx");
    //#TopicPane.java:168: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add(Component, Object)
        add(new JScrollPane(topicText), "grow, push");
    //#TopicPane.java:169: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add(Component, Object)
        add(topicLengthLabel, "pushx, growx, pushx");
    //#TopicPane.java:170: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add(Component, Object)
        add(topicWho, "growx, pushx");
    //#TopicPane.java:171: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane:add(Component, Object)
    }
    //#TopicPane.java:172: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.layoutComponents()

    /** Processes the topic and changes it if necessary. */
    protected void setChangedTopic() {
        if (!channel.getChannelInfo().getTopic().equals(topicText.getText())) {
    //#TopicPane.java:176: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.setChangedTopic()
    //#TopicPane.java:176: Warning: method not available - call not analyzed
    //#    call on ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void setChangedTopic()
    //#    unanalyzed callee: ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#TopicPane.java:176: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelInfo:getTopic()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void setChangedTopic()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelInfo:getTopic()
    //#TopicPane.java:176: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void setChangedTopic()
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText()
    //#input(void setChangedTopic()): this
    //#input(void setChangedTopic()): this.channel
    //#input(void setChangedTopic()): this.topicText
    //#pre[2] (void setChangedTopic()): this.channel != null
    //#pre[3] (void setChangedTopic()): this.topicText != null
    //#presumption(void setChangedTopic()): com.dmdirc.Channel:getChannelInfo(...)@176 != null
    //#presumption(void setChangedTopic()): com.dmdirc.parser.irc.ChannelInfo:getTopic(...)@176 != null
    //#test_vector(void setChangedTopic()): java.lang.String:equals(...)@176: {1}, {0}
            channel.setTopic(topicText.getText());
    //#TopicPane.java:177: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void setChangedTopic()
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText()
    //#TopicPane.java:177: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.Channel:setTopic(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void setChangedTopic()
    //#    unanalyzed callee: void com.dmdirc.Channel:setTopic(String)
        }
    }
    //#TopicPane.java:179: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.setChangedTopic()

    /** Handles the topic change. */
    private void topicChanged() {
        if (topicLengthMax == 0) {
    //#TopicPane.java:183: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.topicChanged()
    //#input(void topicChanged()): " available "._tainted
    //#input(void topicChanged()): " available"._tainted
    //#input(void topicChanged()): " characters"._tainted
    //#input(void topicChanged()): " of "._tainted
    //#input(void topicChanged()): " too many characters"._tainted
    //#input(void topicChanged()): "0 of "._tainted
    //#input(void topicChanged()): java.awt.Color.BLACK
    //#input(void topicChanged()): java.awt.Color.RED
    //#input(void topicChanged()): this
    //#input(void topicChanged()): this.topicLengthLabel
    //#input(void topicChanged()): this.topicLengthMax
    //#input(void topicChanged()): this.topicText
    //#pre[2] (void topicChanged()): this.topicLengthLabel != null
    //#pre[3] (void topicChanged()): init'ed(this.topicLengthMax)
    //#pre[4] (void topicChanged()): this.topicText != null
    //#presumption(void topicChanged()): com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText(...)@185 != null
    //#presumption(void topicChanged()): com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText(...)@187 != null
    //#presumption(void topicChanged()): init'ed(java.awt.Color.BLACK)
    //#presumption(void topicChanged()): init'ed(java.awt.Color.RED)
    //#presumption(void topicChanged()): java.lang.String:length(...)@187 - this.topicLengthMax in {-4_294_967_295..2_147_483_648}
    //#test_vector(void topicChanged()): this.topicLengthMax: {1..4_294_967_294}, {0}
    //#test_vector(void topicChanged()): java.lang.String:length(...)@187 - this.topicLengthMax: {1..2_147_483_648}, {-4_294_967_295..0}
            topicLengthLabel.setForeground(Color.BLACK);
            topicLengthLabel.setText(topicText.getText().length() + " characters");
    //#TopicPane.java:185: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void topicChanged()
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText()
        } else {
            final int charsLeft = topicLengthMax - topicText.getText().length();
    //#TopicPane.java:187: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void topicChanged()
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText()
            if (charsLeft >= 0) {
                topicLengthLabel.setForeground(Color.BLACK);
                topicLengthLabel.setText(charsLeft + " of " + topicLengthMax +
                        " available");
            } else {
                topicLengthLabel.setForeground(Color.RED);
                topicLengthLabel.setText(0 + " of " + topicLengthMax +
                        " available " + (-1 * charsLeft) + " too many characters");
            }
        }
    }
    //#TopicPane.java:198: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.topicChanged()

    /** {@inheritDoc}. */
    @Override
    public void insertUpdate(final DocumentEvent e) {
        topicChanged();
    //#TopicPane.java:203: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.insertUpdate(DocumentEvent)
    //#input(void insertUpdate(DocumentEvent)): " available "._tainted
    //#input(void insertUpdate(DocumentEvent)): " available"._tainted
    //#input(void insertUpdate(DocumentEvent)): " characters"._tainted
    //#input(void insertUpdate(DocumentEvent)): " of "._tainted
    //#input(void insertUpdate(DocumentEvent)): " too many characters"._tainted
    //#input(void insertUpdate(DocumentEvent)): "0 of "._tainted
    //#input(void insertUpdate(DocumentEvent)): java.awt.Color.BLACK
    //#input(void insertUpdate(DocumentEvent)): java.awt.Color.RED
    //#input(void insertUpdate(DocumentEvent)): this
    //#input(void insertUpdate(DocumentEvent)): this.topicLengthLabel
    //#input(void insertUpdate(DocumentEvent)): this.topicLengthMax
    //#input(void insertUpdate(DocumentEvent)): this.topicText
    //#pre[2] (void insertUpdate(DocumentEvent)): this.topicLengthLabel != null
    //#pre[3] (void insertUpdate(DocumentEvent)): init'ed(this.topicLengthMax)
    //#pre[4] (void insertUpdate(DocumentEvent)): this.topicText != null
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setForeground
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setText
    }
    //#TopicPane.java:204: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.insertUpdate(DocumentEvent)

    /** {@inheritDoc}. */
    @Override
    public void removeUpdate(final DocumentEvent e) {
        topicChanged();
    //#TopicPane.java:209: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.removeUpdate(DocumentEvent)
    //#input(void removeUpdate(DocumentEvent)): " available "._tainted
    //#input(void removeUpdate(DocumentEvent)): " available"._tainted
    //#input(void removeUpdate(DocumentEvent)): " characters"._tainted
    //#input(void removeUpdate(DocumentEvent)): " of "._tainted
    //#input(void removeUpdate(DocumentEvent)): " too many characters"._tainted
    //#input(void removeUpdate(DocumentEvent)): "0 of "._tainted
    //#input(void removeUpdate(DocumentEvent)): java.awt.Color.BLACK
    //#input(void removeUpdate(DocumentEvent)): java.awt.Color.RED
    //#input(void removeUpdate(DocumentEvent)): this
    //#input(void removeUpdate(DocumentEvent)): this.topicLengthLabel
    //#input(void removeUpdate(DocumentEvent)): this.topicLengthMax
    //#input(void removeUpdate(DocumentEvent)): this.topicText
    //#pre[2] (void removeUpdate(DocumentEvent)): this.topicLengthLabel != null
    //#pre[3] (void removeUpdate(DocumentEvent)): init'ed(this.topicLengthMax)
    //#pre[4] (void removeUpdate(DocumentEvent)): this.topicText != null
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setForeground
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setText
    }
    //#TopicPane.java:210: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.removeUpdate(DocumentEvent)

    /** {@inheritDoc}. */
    @Override
    public void changedUpdate(final DocumentEvent e) {
        //Ignore
    }
    //#TopicPane.java:216: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.changedUpdate(DocumentEvent)
    //#TopicPane.java:216: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.changedUpdate(DocumentEvent)

    /** 
     * {@inheritDoc}. 
     * 
     * @param e Action event
     */
    @Override
    public void actionPerformed(final ActionEvent e) {
        final Topic topic = (Topic) topicHistory.getSelectedItem();
    //#TopicPane.java:225: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): "&#10; on "._tainted
    //#input(void actionPerformed(ActionEvent)): "Set by "._tainted
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.topicHistory
    //#input(void actionPerformed(ActionEvent)): this.topicText
    //#input(void actionPerformed(ActionEvent)): this.topicWho
    //#input(void actionPerformed(ActionEvent)): this.topicWho.__Tag
    //#input(void actionPerformed(ActionEvent)): this.topicWho.sas
    //#pre[2] (void actionPerformed(ActionEvent)): this.topicHistory != null
    //#pre[4] (void actionPerformed(ActionEvent)): this.topicWho != null
    //#pre[3] (void actionPerformed(ActionEvent)): (soft) this.topicText != null
    //#pre[5] (void actionPerformed(ActionEvent)): (soft) this.topicWho.__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#pre[6] (void actionPerformed(ActionEvent)): (soft) init'ed(this.topicWho.sas)
    //#presumption(void actionPerformed(ActionEvent)): com.dmdirc.Topic:getTime(...)@229 in {-9_223_372_036_854_775..18_446_744_073_709_551}
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#test_vector(void actionPerformed(ActionEvent)): javax.swing.JComboBox:getSelectedItem(...)@225: Inverse{null}, Addr_Set{null}
        if (topic == null) {
            topicWho.setText("No topic set.");
        } else {
            topicWho.setText("Set by " + topic.getClient() + "\n on " +
    //#TopicPane.java:229: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Topic:getClient()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: String com.dmdirc.Topic:getClient()
    //#TopicPane.java:229: Warning: method not available - call not analyzed
    //#    call on long com.dmdirc.Topic:getTime()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: long com.dmdirc.Topic:getTime()
                    new Date(1000 * topic.getTime()));
            topicText.setText(topic.getTopic());
    //#TopicPane.java:231: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Topic:getTopic()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: String com.dmdirc.Topic:getTopic()
    //#TopicPane.java:231: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TextAreaInputField:setText(String)
        }
    }
    //#TopicPane.java:233: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.actionPerformed(ActionEvent)

/** Closes and saves the topic when enter is pressed. */
    private class EnterAction extends AbstractAction {
    //#TopicPane.java:236: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane)): init'ed(this.this$0)
    //#TopicPane.java:236: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane)
    //#TopicPane.java:236: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane, TopicPane$1)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane, TopicPane$1)): this
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane, TopicPane$1)): x0
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane, TopicPane$1)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane, TopicPane$1)): this.this$0 == x0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane, TopicPane$1)): init'ed(this.this$0)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane, TopicPane$1)): Effects-of-calling:javax.swing.AbstractAction
    //#TopicPane.java:236: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction(TopicPane, TopicPane$1)

        /**
         * A version number for this class. It should be changed whenever the class
         * structure is changed (or anything else that would prevent serialized
         * objects being unserialized with the new class).
         */
        private static final long serialVersionUID = 1;

        /** 
         * {@inheritDoc}
         * 
         * @param e Action event
         */
        @Override
        public void actionPerformed(final ActionEvent e) {
            parent.save();
    //#TopicPane.java:252: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/channelsetting/ChannelSettingsDialog.me
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.this$0
    //#input(void actionPerformed(ActionEvent)): this.this$0...channel
    //#input(void actionPerformed(ActionEvent)): this.this$0...topicText
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelListModesPane
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelListModesPane.channel
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelListModesPane.existingListItems
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelListModesPane.listModesArray
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelListModesPane.listModesArray.length
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelListModesPane.listModesArray[0..4_294_967_295]
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelListModesPane.listModesPanels
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelListModesPane.toggle
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelModesPane
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelModesPane.channel
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelModesPane.modeCheckBoxes
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelModesPane.modeInputs
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.channelSettingsPane
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.identity
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.tabbedPane
    //#input(void actionPerformed(ActionEvent)): this.this$0.parent.topicModesPane
    //#output(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/channelsetting/ChannelSettingsDialog.me
    //#pre[2] (void actionPerformed(ActionEvent)): init'ed(com/dmdirc/addons/ui_swing/dialogs/channelsetting/ChannelSettingsDialog.me)
    //#pre[4] (void actionPerformed(ActionEvent)): this.this$0 != null
    //#pre[7] (void actionPerformed(ActionEvent)): this.parent != null
    //#pre[8] (void actionPerformed(ActionEvent)): this.parent.channelListModesPane != null
    //#pre[9] (void actionPerformed(ActionEvent)): this.parent.channelListModesPane.channel != null
    //#pre[11] (void actionPerformed(ActionEvent)): this.parent.channelListModesPane.listModesArray != null
    //#pre[12] (void actionPerformed(ActionEvent)): this.parent.channelListModesPane.listModesArray.length <= 4_294_967_295
    //#pre[15] (void actionPerformed(ActionEvent)): this.parent.channelListModesPane.toggle != null
    //#pre[16] (void actionPerformed(ActionEvent)): this.parent.channelModesPane != null
    //#pre[17] (void actionPerformed(ActionEvent)): this.parent.channelModesPane.channel != null
    //#pre[20] (void actionPerformed(ActionEvent)): this.parent.channelSettingsPane != null
    //#pre[21] (void actionPerformed(ActionEvent)): this.parent.identity != null
    //#pre[22] (void actionPerformed(ActionEvent)): this.parent.tabbedPane != null
    //#pre[23] (void actionPerformed(ActionEvent)): this.parent.topicModesPane != null
    //#pre[5] (void actionPerformed(ActionEvent)): (soft) this...channel != null
    //#pre[6] (void actionPerformed(ActionEvent)): (soft) this...topicText != null
    //#pre[10] (void actionPerformed(ActionEvent)): (soft) this.parent.channelListModesPane.existingListItems != null
    //#pre[13] (void actionPerformed(ActionEvent)): (soft) init'ed(this.parent.channelListModesPane.listModesArray[0..4_294_967_295])
    //#pre[14] (void actionPerformed(ActionEvent)): (soft) this.parent.channelListModesPane.listModesPanels != null
    //#pre[18] (void actionPerformed(ActionEvent)): (soft) this.parent.channelModesPane.modeCheckBoxes != null
    //#pre[19] (void actionPerformed(ActionEvent)): (soft) this.parent.channelModesPane.modeInputs != null
    //#post(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/channelsetting/ChannelSettingsDialog.me == null
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TextAreaInputField:getText
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.Channel:getChannelInfo
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getTopic
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.Channel:getServer
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.Server:getParser
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getBoolChanModes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getModeStr
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getSetOnlyChanModes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getSetUnsetChanModes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:toCharArray
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:split
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:subSequence
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:contains
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:charAt
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getModeParam
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.StandardDialog:dispose
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JCheckBox:isSelected
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:alterMode
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.ParamModePanel:getState
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.ParamModePanel:getValue
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:sendModes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.Channel:setTopic
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.expandingsettings.SettingsPanel:save
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.DefaultListModel:elements
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Enumeration:hasMoreElements
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Enumeration:nextElement
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Map:remove
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.ChannelListModeItem:getItem
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.config.IdentityManager:getConfigIdentity
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.config.Identity:setOption
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JTabbedPane:getSelectedIndex
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:valueOf
        }
    //#TopicPane.java:253: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction.actionPerformed(ActionEvent)
    }
}    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/channelsetting/TopicPane$1]
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/channelsetting/TopicPane$1] == &__Dispatch_Table
    //#TopicPane.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$1.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$1__static_init
    //#TopicPane.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$1
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/channelsetting/TopicPane$EnterAction]
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/channelsetting/TopicPane$EnterAction] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#TopicPane.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction__static_init
    //#TopicPane.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane$EnterAction
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/channelsetting/TopicPane]
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.changedUpdate(Ljavax/swing/event/DocumentEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.initTopicsPanel()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.insertUpdate(Ljavax/swing/event/DocumentEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.layoutComponents()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.removeUpdate(Ljavax/swing/event/DocumentEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.setChangedTopic()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.topicChanged()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.update()V
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/channelsetting/TopicPane] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.changedUpdate(Ljavax/swing/event/DocumentEvent;)V == &changedUpdate
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.initTopicsPanel()V == &initTopicsPanel
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.insertUpdate(Ljavax/swing/event/DocumentEvent;)V == &insertUpdate
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.layoutComponents()V == &layoutComponents
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.removeUpdate(Ljavax/swing/event/DocumentEvent;)V == &removeUpdate
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.setChangedTopic()V == &setChangedTopic
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.topicChanged()V == &topicChanged
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init): __Dispatch_Table.update()V == &update
    //#TopicPane.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane.com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane__static_init
    //#TopicPane.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.TopicPane
