//# 0 errors, 640 messages
//#
/*
    //#ChannelListModesPane.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#ChannelListModesPane.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__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.addons.ui_swing.components.renderers.ListModeCellRenderer;
import com.dmdirc.addons.ui_swing.components.renderers.ExtendedListModeCellRenderer;
import com.dmdirc.addons.ui_swing.UIUtilities;
import com.dmdirc.Channel;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.interfaces.ConfigChangeListener;
import com.dmdirc.parser.irc.ChannelListModeItem;
import com.dmdirc.util.MapList;

import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListCellRenderer;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import net.miginfocom.swing.MigLayout;

/** List modes panel. */
public final class ChannelListModesPane extends JPanel implements ActionListener,
        ListSelectionListener, ConfigChangeListener {

    /**
     * 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 = 5;
    /** Channel. */
    private final Channel channel;
    /** Combox box used to switch between list modes. */
    private final JComboBox listModesMenu;
    /** Arraylist of jpanels containing the listmodes. */
    private final List<JList> listModesPanels;
    /** JPanel used to show listmodespanels in. */
    private final JScrollPane listModesPanel;
    /** Add list mode button. */
    private final JButton addListModeButton;
    /** Remove list mode button. */
    private final JButton removeListModeButton;
    /** list modes available on this server. */
    private final char[] listModesArray;
    /** Modes on creation. */
    private final MapList<Character, ChannelListModeItem> existingListItems;
    /** Mode count label. */
    private final JLabel modeCount;
    /** Cell renderer. */
    private ListCellRenderer renderer;
    /** Extended info toggle. */
    private final JCheckBox toggle;

    /**
     * Creates a new instance of ChannelListModePane.
     *
     * @param channel Parent channel
     */
    public ChannelListModesPane(final Channel channel) {
        super();
    //#ChannelListModesPane.java:100: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): " list"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): " mode"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): " set (maximum of "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): " set"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): ""._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): ")"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): "mode"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): "s"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): channel
    //#input(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ArrayList(ChannelListModesPane#4) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ExtendedListModeCellRenderer(ChannelListModesPane#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ExtendedListModeCellRenderer(ChannelListModesPane#1).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JButton(ChannelListModesPane#8) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JButton(ChannelListModesPane#9) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JCheckBox(ChannelListModesPane#11) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JComboBox(ChannelListModesPane#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JLabel(ChannelListModesPane#10) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JScrollPane(ChannelListModesPane#3) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ListModeCellRenderer(ChannelListModesPane#2) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ListModeCellRenderer(ChannelListModesPane#2).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new MapList(ChannelListModesPane#5) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.addListModeButton
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.channel
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.existingListItems
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.listModesArray
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.listModesMenu
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.listModesPanel
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.listModesPanels
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.modeCount
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.removeListModeButton
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.renderer
    //#output(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.toggle
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ArrayList(ChannelListModesPane#4)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ExtendedListModeCellRenderer(ChannelListModesPane#1)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JButton(ChannelListModesPane#8)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JButton(ChannelListModesPane#9)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JCheckBox(ChannelListModesPane#11)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JComboBox(ChannelListModesPane#6)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JLabel(ChannelListModesPane#10)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JScrollPane(ChannelListModesPane#3)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ListModeCellRenderer(ChannelListModesPane#2)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new MapList(ChannelListModesPane#5)
    //#pre[1] (void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): channel != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): com.dmdirc.Channel:getServer(...)@113 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): com.dmdirc.Server:getParser(...)@113 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@105 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@123 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): com.dmdirc.parser.irc.IRCParser:getListChanModes(...)@113 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.listModesArray.length@113 in {1..4_294_967_295}
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.addListModeButton == &new JButton(ChannelListModesPane#8)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.channel == channel
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.channel != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.existingListItems == &new MapList(ChannelListModesPane#5)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.listModesArray != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.listModesMenu == &new JComboBox(ChannelListModesPane#6)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.listModesPanel == &new JScrollPane(ChannelListModesPane#3)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.listModesPanels == &new ArrayList(ChannelListModesPane#4)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.modeCount == &new JLabel(ChannelListModesPane#10)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.removeListModeButton == &new JButton(ChannelListModesPane#9)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.renderer in Addr_Set{&new ExtendedListModeCellRenderer(ChannelListModesPane#1),&new ListModeCellRenderer(ChannelListModesPane#2)}
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): this.toggle == &new JCheckBox(ChannelListModesPane#11)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ArrayList(ChannelListModesPane#4) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JButton(ChannelListModesPane#8) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JButton(ChannelListModesPane#9) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JCheckBox(ChannelListModesPane#11) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JComboBox(ChannelListModesPane#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JLabel(ChannelListModesPane#10) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new JScrollPane(ChannelListModesPane#3) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new MapList(ChannelListModesPane#5) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ExtendedListModeCellRenderer(ChannelListModesPane#1) num objects <= 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): init'ed(new ExtendedListModeCellRenderer(ChannelListModesPane#1).__Tag)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): new ListModeCellRenderer(ChannelListModesPane#2) num objects <= 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): init'ed(new ListModeCellRenderer(ChannelListModesPane#2).__Tag)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JComboBox:getSelectedIndex
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.ListModel:getSize
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.Channel:getServer
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.Server:getParser
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMaxListModes
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JComboBox:setEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JComboBox:getModel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.Channel:getConfigManager
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.DefaultComboBoxModel:addElement
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.DefaultListModel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JList
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JList:setCellRenderer
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JList:setVisibleRowCount
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JList:addListSelectionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JScrollPane:setViewportView
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JScrollPane:setVisible
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JScrollPane:isVisible
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.util.MapList:clear
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.Channel:getChannelInfo
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getListModeParam
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.util.MapList:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.DefaultListModel:removeAllElements
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.DefaultListModel:addElement
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:setLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JComboBox:addActionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.JCheckBox:addActionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:com.dmdirc.config.ConfigManager:addChangeListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): Effects-of-calling:javax.swing.DefaultListCellRenderer
    //#test_vector(void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)): com.dmdirc.config.ConfigManager:getOptionBool(...)@105: {0}, {1}

        this.setOpaque(UIUtilities.getTabbedPaneOpaque());
    //#ChannelListModesPane.java:102: 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.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: bool com.dmdirc.addons.ui_swing.UIUtilities:getTabbedPaneOpaque()
    //#ChannelListModesPane.java:102: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:setOpaque(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:setOpaque(bool)
        this.channel = channel;

        if (IdentityManager.getGlobalConfig().getOptionBool("general",
    //#ChannelListModesPane.java:105: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#ChannelListModesPane.java:105: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                "extendedListModes")) {
            renderer = new ExtendedListModeCellRenderer();
        } else {
            renderer = new ListModeCellRenderer();
        }
        listModesPanel = new JScrollPane();
        listModesPanels = new ArrayList<JList>();
        listModesArray =
    //#ChannelListModesPane.java:113: Warning: method not available - call not analyzed
    //#    call on Server com.dmdirc.Channel:getServer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: Server com.dmdirc.Channel:getServer()
    //#ChannelListModesPane.java:113: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#ChannelListModesPane.java:113: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getListChanModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getListChanModes()
                channel.getServer().getParser().getListChanModes().toCharArray();
        existingListItems =
    //#ChannelListModesPane.java:115: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.MapList()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: void com.dmdirc.util.MapList()
                new MapList<Character, ChannelListModeItem>();
        listModesMenu =
                new JComboBox(new DefaultComboBoxModel());
        addListModeButton = new JButton("Add");
        removeListModeButton = new JButton("Remove");
        removeListModeButton.setEnabled(false);
        modeCount = new JLabel();
        toggle = new JCheckBox("Show extended information",
    //#ChannelListModesPane.java:123: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#ChannelListModesPane.java:123: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
                IdentityManager.getGlobalConfig().getOptionBool("general",
                "extendedListModes"));
        toggle.setOpaque(UIUtilities.getTabbedPaneOpaque());
    //#ChannelListModesPane.java:126: 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.ChannelListModesPane
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane(Channel)
    //#    unanalyzed callee: bool com.dmdirc.addons.ui_swing.UIUtilities:getTabbedPaneOpaque()
        toggle.setMargin(new Insets(0, 0, 0, 0));
        toggle.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

        initListModesPanel();
        initListeners();

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

    /** Updates the panel. */
    public void update() {
        final boolean visible = listModesPanel.isVisible();
    //#ChannelListModesPane.java:138: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.update()
    //#input(void update()): this
    //#input(void update()): this.channel
    //#input(void update()): this.existingListItems
    //#input(void update()): this.listModesArray
    //#input(void update()): this.listModesArray.length
    //#input(void update()): this.listModesArray[0..4_294_967_295]
    //#input(void update()): this.listModesPanel
    //#input(void update()): this.listModesPanels
    //#pre[3] (void update()): this.existingListItems != null
    //#pre[4] (void update()): this.listModesArray != null
    //#pre[5] (void update()): this.listModesArray.length <= 4_294_967_295
    //#pre[7] (void update()): this.listModesPanel != null
    //#pre[2] (void update()): (soft) this.channel != null
    //#pre[6] (void update()): (soft) init'ed(this.listModesArray[0..4_294_967_295])
    //#pre[8] (void update()): (soft) this.listModesPanels != null
    //#presumption(void update()): com.dmdirc.Channel:getChannelInfo(...)@149 != null
    //#presumption(void update()): com.dmdirc.Channel:getChannelInfo(...)@152 != null
    //#presumption(void update()): com.dmdirc.parser.irc.ChannelInfo:getListModeParam(...)@152 != null
    //#presumption(void update()): java.util.List:get(...)@154 != null
    //#presumption(void update()): javax.swing.JList:getModel(...)@154 != null
    //#test_vector(void update()): java.util.Iterator:hasNext(...)@158: {0}, {1}
    //#test_vector(void update()): javax.swing.JScrollPane:isVisible(...)@138: {0}, {1}

        if (visible) {
            listModesPanel.setVisible(false);
        }

        existingListItems.clear();
    //#ChannelListModesPane.java:144: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.MapList:clear()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void update()
    //#    unanalyzed callee: void com.dmdirc.util.MapList:clear()

        for (int i = 0; i < listModesArray.length;
                i++) {
            final char mode = listModesArray[i];
            existingListItems.add(mode,
    //#ChannelListModesPane.java:149: Warning: method not available - call not analyzed
    //#    call on ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void update()
    //#    unanalyzed callee: ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#ChannelListModesPane.java:149: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.parser.irc.ChannelInfo:getListModeParam(Character)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void update()
    //#    unanalyzed callee: List com.dmdirc.parser.irc.ChannelInfo:getListModeParam(Character)
    //#ChannelListModesPane.java:149: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.MapList:add(Object, Collection)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void update()
    //#    unanalyzed callee: void com.dmdirc.util.MapList:add(Object, Collection)
                    new ArrayList<ChannelListModeItem>(channel.getChannelInfo().
                    getListModeParam(mode)));
            final List<ChannelListModeItem> listItems =
    //#ChannelListModesPane.java:152: Warning: method not available - call not analyzed
    //#    call on ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void update()
    //#    unanalyzed callee: ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#ChannelListModesPane.java:152: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.parser.irc.ChannelInfo:getListModeParam(Character)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void update()
    //#    unanalyzed callee: List com.dmdirc.parser.irc.ChannelInfo:getListModeParam(Character)
                    channel.getChannelInfo().getListModeParam(mode);
            final DefaultListModel model =
                    (DefaultListModel) listModesPanels.get(i).getModel();

            model.removeAllElements();
            for (ChannelListModeItem listItem : listItems) {
                model.addElement(listItem);
            }
        }

        if (visible) {
            listModesPanel.setVisible(true);
        }
    }
    //#ChannelListModesPane.java:166: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.update()

    /** Updates the list mode menu. */
    private void updateMenu() {
        if (listModesArray.length == 0) {
    //#ChannelListModesPane.java:170: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.updateMenu()
    //#input(void updateMenu()): " list"._tainted
    //#input(void updateMenu()): " mode"._tainted
    //#input(void updateMenu()): " set (maximum of "._tainted
    //#input(void updateMenu()): " set"._tainted
    //#input(void updateMenu()): ""._tainted
    //#input(void updateMenu()): ")"._tainted
    //#input(void updateMenu()): "mode"._tainted
    //#input(void updateMenu()): "s"._tainted
    //#input(void updateMenu()): this
    //#input(void updateMenu()): this.addListModeButton
    //#input(void updateMenu()): this.channel
    //#input(void updateMenu()): this.listModesArray
    //#input(void updateMenu()): this.listModesArray.length
    //#input(void updateMenu()): this.listModesArray[0..4_294_967_295]
    //#input(void updateMenu()): this.listModesMenu
    //#input(void updateMenu()): this.listModesPanel
    //#input(void updateMenu()): this.listModesPanels
    //#input(void updateMenu()): this.modeCount
    //#input(void updateMenu()): this.renderer
    //#pre[2] (void updateMenu()): this.addListModeButton != null
    //#pre[4] (void updateMenu()): this.listModesArray != null
    //#pre[5] (void updateMenu()): this.listModesArray.length <= 4_294_967_295
    //#pre[7] (void updateMenu()): this.listModesMenu != null
    //#pre[3] (void updateMenu()): (soft) this.channel != null
    //#pre[6] (void updateMenu()): (soft) init'ed(this.listModesArray[0..4_294_967_295])
    //#pre[8] (void updateMenu()): (soft) this.listModesPanel != null
    //#pre[9] (void updateMenu()): (soft) this.listModesPanels != null
    //#pre[10] (void updateMenu()): (soft) this.modeCount != null
    //#pre[11] (void updateMenu()): (soft) init'ed(this.renderer)
    //#presumption(void updateMenu()): com.dmdirc.Channel:getConfigManager(...)@183 != null
    //#presumption(void updateMenu()): com.dmdirc.Channel:getConfigManager(...)@185 != null
    //#presumption(void updateMenu()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@183 != null
    //#presumption(void updateMenu()): javax.swing.JComboBox:getModel(...)@179 != null
    //#unanalyzed(void updateMenu()): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void updateMenu()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void updateMenu()): Effects-of-calling:javax.swing.JComboBox:getSelectedIndex
    //#unanalyzed(void updateMenu()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void updateMenu()): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void updateMenu()): Effects-of-calling:javax.swing.ListModel:getSize
    //#unanalyzed(void updateMenu()): Effects-of-calling:com.dmdirc.Channel:getServer
    //#unanalyzed(void updateMenu()): Effects-of-calling:com.dmdirc.Server:getParser
    //#unanalyzed(void updateMenu()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMaxListModes
    //#unanalyzed(void updateMenu()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void updateMenu()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void updateMenu()): Effects-of-calling:java.lang.StringBuilder:toString
    //#test_vector(void updateMenu()): this.listModesArray.length: {1..4_294_967_295}, {0}
    //#test_vector(void updateMenu()): com.dmdirc.config.ConfigManager:getOptionBool(...)@183: {0}, {1}
    //#test_vector(void updateMenu()): com.dmdirc.config.ConfigManager:hasOptionString(...)@183: {0}, {1}
    //#test_vector(void updateMenu()): java.util.List:isEmpty(...)@199: {0}, {1}
            listModesMenu.setEnabled(false);
            addListModeButton.setEnabled(false);
            return;
        } else {
            listModesMenu.setEnabled(true);
            addListModeButton.setEnabled(true);
        }

        final DefaultComboBoxModel model =
                (DefaultComboBoxModel) listModesMenu.getModel();
        for (char mode : listModesArray) {
            String modeText = mode + " list";
            if (IdentityManager.getGlobalConfig().getOptionBool("server", "friendlymodes") &&
    //#ChannelListModesPane.java:183: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void updateMenu()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#ChannelListModesPane.java:183: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void updateMenu()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#ChannelListModesPane.java:183: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.Channel:getConfigManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void updateMenu()
    //#    unanalyzed callee: ConfigManager com.dmdirc.Channel:getConfigManager()
    //#ChannelListModesPane.java:183: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void updateMenu()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
                    channel.getConfigManager().hasOptionString("server", "mode" + mode)) {
                modeText =
    //#ChannelListModesPane.java:185: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.Channel:getConfigManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void updateMenu()
    //#    unanalyzed callee: ConfigManager com.dmdirc.Channel:getConfigManager()
    //#ChannelListModesPane.java:185: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void updateMenu()
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
                        channel.getConfigManager().
                        getOption("server", "mode" + mode) + " list";
            }
            model.addElement(modeText);

            final JList list =
                    new JList(new DefaultListModel());
            list.setCellRenderer(renderer);
            list.setVisibleRowCount(8);
            list.addListSelectionListener(this);

            listModesPanels.add(list);
        }
        if (listModesPanels.isEmpty()) {
            listModesPanel.setViewportView(new JPanel());
        } else {
            listModesPanel.setViewportView(listModesPanels.get(0));
        }
        updateModeCount();
        listModesPanel.setVisible(true);
    }
    //#ChannelListModesPane.java:206: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.updateMenu()

    /** Initialises the list modes panel. */
    private void initListModesPanel() {
        updateMenu();
    //#ChannelListModesPane.java:210: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.initListModesPanel()
    //#input(void initListModesPanel()): " list"._tainted
    //#input(void initListModesPanel()): " mode"._tainted
    //#input(void initListModesPanel()): " set (maximum of "._tainted
    //#input(void initListModesPanel()): " set"._tainted
    //#input(void initListModesPanel()): ""._tainted
    //#input(void initListModesPanel()): ")"._tainted
    //#input(void initListModesPanel()): "mode"._tainted
    //#input(void initListModesPanel()): "s"._tainted
    //#input(void initListModesPanel()): this
    //#input(void initListModesPanel()): this.addListModeButton
    //#input(void initListModesPanel()): this.channel
    //#input(void initListModesPanel()): this.existingListItems
    //#input(void initListModesPanel()): this.listModesArray
    //#input(void initListModesPanel()): this.listModesArray.length
    //#input(void initListModesPanel()): this.listModesArray[0..4_294_967_295]
    //#input(void initListModesPanel()): this.listModesMenu
    //#input(void initListModesPanel()): this.listModesPanel
    //#input(void initListModesPanel()): this.listModesPanels
    //#input(void initListModesPanel()): this.modeCount
    //#input(void initListModesPanel()): this.removeListModeButton
    //#input(void initListModesPanel()): this.renderer
    //#input(void initListModesPanel()): this.toggle
    //#pre[2] (void initListModesPanel()): this.addListModeButton != null
    //#pre[4] (void initListModesPanel()): this.existingListItems != null
    //#pre[5] (void initListModesPanel()): this.listModesArray != null
    //#pre[8] (void initListModesPanel()): this.listModesMenu != null
    //#pre[3] (void initListModesPanel()): (soft) this.channel != null
    //#pre[6] (void initListModesPanel()): (soft) this.listModesArray.length in {1..4_294_967_295}
    //#pre[7] (void initListModesPanel()): (soft) init'ed(this.listModesArray[0..4_294_967_295])
    //#pre[9] (void initListModesPanel()): (soft) this.listModesPanel != null
    //#pre[10] (void initListModesPanel()): (soft) this.listModesPanels != null
    //#pre[11] (void initListModesPanel()): (soft) this.modeCount != null
    //#pre[13] (void initListModesPanel()): (soft) init'ed(this.renderer)
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JComboBox:getSelectedIndex
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.ListModel:getSize
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.Channel:getServer
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.Server:getParser
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMaxListModes
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JComboBox:setEnabled
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JComboBox:getModel
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptionBool
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.Channel:getConfigManager
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.DefaultComboBoxModel:addElement
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.DefaultListModel
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JList
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JList:setCellRenderer
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JList:setVisibleRowCount
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JList:addListSelectionListener
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JScrollPane:setViewportView
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JScrollPane:setVisible
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.JScrollPane:isVisible
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.util.MapList:clear
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.lang.Character:valueOf
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.Channel:getChannelInfo
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.parser.irc.ChannelInfo:getListModeParam
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:com.dmdirc.util.MapList:add
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.DefaultListModel:removeAllElements
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void initListModesPanel()): Effects-of-calling:javax.swing.DefaultListModel:addElement

        setLayout(new MigLayout("fill, wrap 1"));
    //#ChannelListModesPane.java:212: 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.ChannelListModesPane
    //#    method: void initListModesPanel()
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#ChannelListModesPane.java:212: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:setLayout(LayoutManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void initListModesPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:setLayout(LayoutManager)

        add(listModesMenu, "growx, pushx");
    //#ChannelListModesPane.java:214: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void initListModesPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
        add(listModesPanel, "grow, push");
    //#ChannelListModesPane.java:215: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void initListModesPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
        add(modeCount, "split 2, growx, pushx");
    //#ChannelListModesPane.java:216: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void initListModesPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
        add(toggle, "alignx center");
    //#ChannelListModesPane.java:217: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void initListModesPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
        add(addListModeButton, "split 2, growx, pushx");
    //#ChannelListModesPane.java:218: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void initListModesPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
        add(removeListModeButton, "growx, pushx");
    //#ChannelListModesPane.java:219: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void initListModesPanel()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane:add(Component, Object)

        update();
        updateModeCount();
    }
    //#ChannelListModesPane.java:223: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.initListModesPanel()

    /** Initialises listeners for this dialog. */
    private void initListeners() {
        addListModeButton.addActionListener(this);
    //#ChannelListModesPane.java:227: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.initListeners()
    //#input(void initListeners()): this
    //#input(void initListeners()): this.addListModeButton
    //#input(void initListeners()): this.listModesMenu
    //#input(void initListeners()): this.removeListModeButton
    //#input(void initListeners()): this.toggle
    //#pre[2] (void initListeners()): this.addListModeButton != null
    //#pre[3] (void initListeners()): this.listModesMenu != null
    //#pre[4] (void initListeners()): this.removeListModeButton != null
    //#pre[5] (void initListeners()): this.toggle != null
    //#presumption(void initListeners()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@231 != null
        removeListModeButton.addActionListener(this);
        listModesMenu.addActionListener(this);
        toggle.addActionListener(this);
        IdentityManager.getGlobalConfig().addChangeListener("general",
    //#ChannelListModesPane.java:231: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void initListeners()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#ChannelListModesPane.java:231: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.ConfigManager:addChangeListener(String, String, ConfigChangeListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void initListeners()
    //#    unanalyzed callee: void com.dmdirc.config.ConfigManager:addChangeListener(String, String, ConfigChangeListener)
                "extendedListModes", this);

    }
    //#ChannelListModesPane.java:234: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.initListeners()

    /** Sends the list modes to the server. */
    public void save() {
        final Map<ChannelListModeItem, Character> currentModes =
    //#ChannelListModesPane.java:238: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.save()
    //#input(void save()): this
    //#input(void save()): this.channel
    //#input(void save()): this.existingListItems
    //#input(void save()): this.listModesArray
    //#input(void save()): this.listModesArray.length
    //#input(void save()): this.listModesArray[0..4_294_967_295]
    //#input(void save()): this.listModesPanels
    //#input(void save()): this.toggle
    //#pre[2] (void save()): this.channel != null
    //#pre[4] (void save()): this.listModesArray != null
    //#pre[5] (void save()): this.listModesArray.length <= 4_294_967_295
    //#pre[8] (void save()): this.toggle != null
    //#pre[3] (void save()): (soft) this.existingListItems != null
    //#pre[6] (void save()): (soft) init'ed(this.listModesArray[0..4_294_967_295])
    //#pre[7] (void save()): (soft) this.listModesPanels != null
    //#presumption(void save()): com.dmdirc.Channel:getChannelInfo(...)@266 != null
    //#presumption(void save()): com.dmdirc.Channel:getChannelInfo(...)@273 != null
    //#presumption(void save()): com.dmdirc.Channel:getChannelInfo(...)@277 != null
    //#presumption(void save()): com.dmdirc.config.IdentityManager:getConfigIdentity(...)@279 != null
    //#presumption(void save()): com.dmdirc.util.MapList:get(...)@248 != null
    //#presumption(void save()): java.util.Iterator:next(...)@262 != null
    //#presumption(void save()): java.util.Iterator:next(...)@272 != null
    //#presumption(void save()): java.util.List:get(...)@246 != null
    //#presumption(void save()): java.util.Map:entrySet(...)@262 != null
    //#presumption(void save()): java.util.Map:entrySet(...)@272 != null
    //#presumption(void save()): java.util.Map_Entry:getKey(...)@266 != null
    //#presumption(void save()): java.util.Map_Entry:getKey(...)@273 != null
    //#presumption(void save()): javax.swing.DefaultListModel:elements(...)@246 != null
    //#presumption(void save()): javax.swing.JList:getModel(...)@246 != null
    //#test_vector(void save()): java.util.Enumeration:hasMoreElements(...)@255: {0}, {1}
    //#test_vector(void save()): java.util.Iterator:hasNext(...)@251: {0}, {1}
    //#test_vector(void save()): java.util.Iterator:hasNext(...)@262: {0}, {1}
    //#test_vector(void save()): java.util.Iterator:hasNext(...)@272: {0}, {1}
    //#test_vector(void save()): java.util.Map:containsKey(...)@263: {0}, {1}
                new HashMap<ChannelListModeItem, Character>();
        final Map<ChannelListModeItem, Character> newModes =
                new HashMap<ChannelListModeItem, Character>();

        for (int i = 0; i < listModesArray.length;
                i++) {
            final char mode = listModesArray[i];
            final Enumeration<?> values =
                    ((DefaultListModel) listModesPanels.get(i).getModel()).elements();
            final List<ChannelListModeItem> listItems =
    //#ChannelListModesPane.java:248: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.MapList:get(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: List com.dmdirc.util.MapList:get(Object)
                    existingListItems.get(mode);

            for (ChannelListModeItem listItem : listItems) {
                currentModes.put(listItem, mode);
            }

            while (values.hasMoreElements()) {
                final ChannelListModeItem value =
                        (ChannelListModeItem) values.nextElement();
                newModes.put(value, mode);
            }
        }

        for (Entry<ChannelListModeItem, Character> entry : newModes.entrySet()) {
            if (currentModes.containsKey(entry.getKey())) {
                currentModes.remove(entry.getKey());
            } else {
                channel.getChannelInfo().
    //#ChannelListModesPane.java:266: Warning: method not available - call not analyzed
    //#    call on ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#ChannelListModesPane.java:266: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelListModeItem:getItem()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelListModeItem:getItem()
    //#ChannelListModesPane.java:266: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ChannelInfo:alterMode(bool, Character, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ChannelInfo:alterMode(bool, Character, String)
                        alterMode(true, entry.getValue(),
                        entry.getKey().getItem());
            }
        }

        for (Entry<ChannelListModeItem, Character> entry : currentModes.entrySet()) {
            channel.getChannelInfo().
    //#ChannelListModesPane.java:273: Warning: method not available - call not analyzed
    //#    call on ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#ChannelListModesPane.java:273: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.ChannelListModeItem:getItem()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.ChannelListModeItem:getItem()
    //#ChannelListModesPane.java:273: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ChannelInfo:alterMode(bool, Character, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ChannelInfo:alterMode(bool, Character, String)
                    alterMode(false, entry.getValue(), entry.getKey().getItem());
        }

        channel.getChannelInfo().sendModes();
    //#ChannelListModesPane.java:277: Warning: method not available - call not analyzed
    //#    call on ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: ChannelInfo com.dmdirc.Channel:getChannelInfo()
    //#ChannelListModesPane.java:277: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ChannelInfo:sendModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ChannelInfo:sendModes()

        IdentityManager.getConfigIdentity().setOption("general",
    //#ChannelListModesPane.java:279: Warning: method not available - call not analyzed
    //#    call on Identity com.dmdirc.config.IdentityManager:getConfigIdentity()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: Identity com.dmdirc.config.IdentityManager:getConfigIdentity()
    //#ChannelListModesPane.java:279: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.Identity:setOption(String, String, bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void save()
    //#    unanalyzed callee: void com.dmdirc.config.Identity:setOption(String, String, bool)
                "extendedListModes", toggle.isSelected());
    }
    //#ChannelListModesPane.java:281: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.save()

    /** Adds a list mode. */
    private void addListMode() {
        final int selectedIndex = listModesMenu.getSelectedIndex();
    //#ChannelListModesPane.java:285: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.addListMode()
    //#input(void addListMode()): " mode"._tainted
    //#input(void addListMode()): " set (maximum of "._tainted
    //#input(void addListMode()): " set"._tainted
    //#input(void addListMode()): ""._tainted
    //#input(void addListMode()): ")"._tainted
    //#input(void addListMode()): "Please enter the hostmask for the new "._tainted
    //#input(void addListMode()): "mode"._tainted
    //#input(void addListMode()): "s"._tainted
    //#input(void addListMode()): this
    //#input(void addListMode()): this.channel
    //#input(void addListMode()): this.listModesArray
    //#input(void addListMode()): this.listModesArray.length
    //#input(void addListMode()): this.listModesArray[0..4_294_967_295]
    //#input(void addListMode()): this.listModesMenu
    //#input(void addListMode()): this.listModesPanel
    //#input(void addListMode()): this.listModesPanels
    //#input(void addListMode()): this.modeCount
    //#pre[2] (void addListMode()): this.channel != null
    //#pre[3] (void addListMode()): this.listModesArray != null
    //#pre[4] (void addListMode()): this.listModesArray.length >= 1
    //#pre[6] (void addListMode()): this.listModesMenu != null
    //#pre[8] (void addListMode()): this.listModesPanels != null
    //#pre[9] (void addListMode()): this.modeCount != null
    //#pre[5] (void addListMode()): (soft) init'ed(this.listModesArray[0..4_294_967_295])
    //#presumption(void addListMode()): com.dmdirc.Channel:getConfigManager(...)@288 != null
    //#presumption(void addListMode()): com.dmdirc.Channel:getConfigManager(...)@290 != null
    //#presumption(void addListMode()): java.util.List:get(...)@296 != null
    //#presumption(void addListMode()): javax.swing.JComboBox:getSelectedIndex(...)@285 >= 0
    //#presumption(void addListMode()): javax.swing.JComboBox:getSelectedIndex(...)@285 < this.listModesArray.length
    //#presumption(void addListMode()): javax.swing.JList:getModel(...)@296 != null
    //#unanalyzed(void addListMode()): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void addListMode()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void addListMode()): Effects-of-calling:javax.swing.JComboBox:getSelectedIndex
    //#unanalyzed(void addListMode()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void addListMode()): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void addListMode()): Effects-of-calling:javax.swing.ListModel:getSize
    //#unanalyzed(void addListMode()): Effects-of-calling:com.dmdirc.Channel:getServer
    //#unanalyzed(void addListMode()): Effects-of-calling:com.dmdirc.Server:getParser
    //#unanalyzed(void addListMode()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMaxListModes
    //#unanalyzed(void addListMode()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addListMode()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addListMode()): Effects-of-calling:java.lang.StringBuilder:toString
    //#test_vector(void addListMode()): com.dmdirc.config.ConfigManager:hasOptionString(...)@288: {0}, {1}
    //#test_vector(void addListMode()): java.lang.String:isEmpty(...)@295: {0}, {1}
    //#test_vector(void addListMode()): java.lang.String:isEmpty(...)@295: {1}, {0}
    //#test_vector(void addListMode()): javax.swing.JOptionPane:showInputDialog(...)@293: Addr_Set{null}, Inverse{null}
        String modeText = String.valueOf(listModesArray[selectedIndex]);
        String modeMask;
        if (channel.getConfigManager().hasOptionString("server", "mode"
    //#ChannelListModesPane.java:288: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.Channel:getConfigManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void addListMode()
    //#    unanalyzed callee: ConfigManager com.dmdirc.Channel:getConfigManager()
    //#ChannelListModesPane.java:288: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void addListMode()
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:hasOptionString(String, String)
                + listModesArray[selectedIndex])) {
            modeText = channel.getConfigManager().
    //#ChannelListModesPane.java:290: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.Channel:getConfigManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void addListMode()
    //#    unanalyzed callee: ConfigManager com.dmdirc.Channel:getConfigManager()
    //#ChannelListModesPane.java:290: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void addListMode()
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
                    getOption("server", "mode" + listModesArray[selectedIndex]);
        }
        modeMask = JOptionPane.showInputDialog(listModesPanel,
                "Please enter the hostmask for the new " + modeText);
        if (modeMask != null && (!modeMask.isEmpty() || !modeMask.isEmpty())) {
            final DefaultListModel model =
                    (DefaultListModel) listModesPanels.get(selectedIndex).
                    getModel();
            model.addElement(new ChannelListModeItem(modeMask, "",
    //#ChannelListModesPane.java:299: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.parser.irc.ChannelListModeItem(String, String, long)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void addListMode()
    //#    unanalyzed callee: void com.dmdirc.parser.irc.ChannelListModeItem(String, String, long)
                    System.currentTimeMillis() / 1000));
        }
        updateModeCount();
    }
    //#ChannelListModesPane.java:303: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.addListMode()

    /** Removes a list mode. */
    private void removeListMode() {
        final int selectedIndex = listModesMenu.getSelectedIndex();
    //#ChannelListModesPane.java:307: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.removeListMode()
    //#input(void removeListMode()): " mode"._tainted
    //#input(void removeListMode()): " set (maximum of "._tainted
    //#input(void removeListMode()): " set"._tainted
    //#input(void removeListMode()): ""._tainted
    //#input(void removeListMode()): ")"._tainted
    //#input(void removeListMode()): "s"._tainted
    //#input(void removeListMode()): this
    //#input(void removeListMode()): this.channel
    //#input(void removeListMode()): this.listModesArray
    //#input(void removeListMode()): this.listModesArray.length
    //#input(void removeListMode()): this.listModesArray[0..4_294_967_295]
    //#input(void removeListMode()): this.listModesMenu
    //#input(void removeListMode()): this.listModesPanels
    //#input(void removeListMode()): this.modeCount
    //#pre[6] (void removeListMode()): this.listModesMenu != null
    //#pre[7] (void removeListMode()): this.listModesPanels != null
    //#pre[8] (void removeListMode()): this.modeCount != null
    //#pre[2] (void removeListMode()): (soft) this.channel != null
    //#pre[3] (void removeListMode()): (soft) this.listModesArray != null
    //#pre[4] (void removeListMode()): (soft) this.listModesArray.length >= 1
    //#pre[5] (void removeListMode()): (soft) init'ed(this.listModesArray[0..4_294_967_295])
    //#presumption(void removeListMode()): arr$.length@309 <= 4_294_967_295
    //#presumption(void removeListMode()): java.util.List:get(...)@308 != null
    //#presumption(void removeListMode()): javax.swing.JList:getModel(...)@310 != null
    //#presumption(void removeListMode()): javax.swing.JList:getSelectedValues(...)@309 != null
    //#unanalyzed(void removeListMode()): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void removeListMode()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void removeListMode()): Effects-of-calling:javax.swing.JComboBox:getSelectedIndex
    //#unanalyzed(void removeListMode()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void removeListMode()): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void removeListMode()): Effects-of-calling:javax.swing.ListModel:getSize
    //#unanalyzed(void removeListMode()): Effects-of-calling:com.dmdirc.Channel:getServer
    //#unanalyzed(void removeListMode()): Effects-of-calling:com.dmdirc.Server:getParser
    //#unanalyzed(void removeListMode()): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getMaxListModes
    //#unanalyzed(void removeListMode()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void removeListMode()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void removeListMode()): Effects-of-calling:java.lang.StringBuilder:toString
        final JList list = listModesPanels.get(selectedIndex);
        for (Object mode : list.getSelectedValues()) {
            ((DefaultListModel) list.getModel()).removeElement(mode);
        }
        updateModeCount();
    }
    //#ChannelListModesPane.java:313: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.removeListMode()

    /** 
     * {@inheritDoc}
     * 
     * @param event Action event
     */
    @Override
    public void actionPerformed(final ActionEvent event) {
        if (listModesMenu.equals(event.getSource())) {
    //#ChannelListModesPane.java:322: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): " mode"._tainted
    //#input(void actionPerformed(ActionEvent)): " set (maximum of "._tainted
    //#input(void actionPerformed(ActionEvent)): " set"._tainted
    //#input(void actionPerformed(ActionEvent)): ""._tainted
    //#input(void actionPerformed(ActionEvent)): ")"._tainted
    //#input(void actionPerformed(ActionEvent)): "Please enter the hostmask for the new "._tainted
    //#input(void actionPerformed(ActionEvent)): "mode"._tainted
    //#input(void actionPerformed(ActionEvent)): "s"._tainted
    //#input(void actionPerformed(ActionEvent)): event
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.addListModeButton
    //#input(void actionPerformed(ActionEvent)): this.channel
    //#input(void actionPerformed(ActionEvent)): this.listModesArray
    //#input(void actionPerformed(ActionEvent)): this.listModesArray.length
    //#input(void actionPerformed(ActionEvent)): this.listModesArray[0..4_294_967_295]
    //#input(void actionPerformed(ActionEvent)): this.listModesMenu
    //#input(void actionPerformed(ActionEvent)): this.listModesPanel
    //#input(void actionPerformed(ActionEvent)): this.listModesPanels
    //#input(void actionPerformed(ActionEvent)): this.modeCount
    //#input(void actionPerformed(ActionEvent)): this.removeListModeButton
    //#input(void actionPerformed(ActionEvent)): this.toggle
    //#output(void actionPerformed(ActionEvent)): new ExtendedListModeCellRenderer(actionPerformed#1) num objects
    //#output(void actionPerformed(ActionEvent)): new ExtendedListModeCellRenderer(actionPerformed#1).__Tag
    //#output(void actionPerformed(ActionEvent)): new ListModeCellRenderer(actionPerformed#2) num objects
    //#output(void actionPerformed(ActionEvent)): new ListModeCellRenderer(actionPerformed#2).__Tag
    //#output(void actionPerformed(ActionEvent)): this.renderer
    //#new obj(void actionPerformed(ActionEvent)): new ExtendedListModeCellRenderer(actionPerformed#1)
    //#new obj(void actionPerformed(ActionEvent)): new ListModeCellRenderer(actionPerformed#2)
    //#pre[1] (void actionPerformed(ActionEvent)): event != null
    //#pre[9] (void actionPerformed(ActionEvent)): this.listModesMenu != null
    //#pre[4] (void actionPerformed(ActionEvent)): (soft) this.addListModeButton != null
    //#pre[5] (void actionPerformed(ActionEvent)): (soft) this.channel != null
    //#pre[6] (void actionPerformed(ActionEvent)): (soft) this.listModesArray != null
    //#pre[7] (void actionPerformed(ActionEvent)): (soft) this.listModesArray.length >= 1
    //#pre[8] (void actionPerformed(ActionEvent)): (soft) init'ed(this.listModesArray[0..4_294_967_295])
    //#pre[10] (void actionPerformed(ActionEvent)): (soft) this.listModesPanel != null
    //#pre[11] (void actionPerformed(ActionEvent)): (soft) this.listModesPanels != null
    //#pre[12] (void actionPerformed(ActionEvent)): (soft) this.modeCount != null
    //#pre[13] (void actionPerformed(ActionEvent)): (soft) this.removeListModeButton != null
    //#pre[14] (void actionPerformed(ActionEvent)): (soft) this.toggle != null
    //#presumption(void actionPerformed(ActionEvent)): java.util.Iterator:next(...)@337 != null
    //#post(void actionPerformed(ActionEvent)): this.renderer == One-of{old this.renderer, &new ExtendedListModeCellRenderer(actionPerformed#1), &new ListModeCellRenderer(actionPerformed#2)}
    //#post(void actionPerformed(ActionEvent)): new ExtendedListModeCellRenderer(actionPerformed#1) num objects <= 1
    //#post(void actionPerformed(ActionEvent)): init'ed(new ExtendedListModeCellRenderer(actionPerformed#1).__Tag)
    //#post(void actionPerformed(ActionEvent)): new ListModeCellRenderer(actionPerformed#2) num objects <= 1
    //#post(void actionPerformed(ActionEvent)): init'ed(new ListModeCellRenderer(actionPerformed#2).__Tag)
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JComboBox:getSelectedIndex
    //#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:javax.swing.ListModel:getSize
    //#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:getMaxListModes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.Channel:getConfigManager
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.config.ConfigManager:hasOptionString
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.DefaultListModel:addElement
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.DefaultListCellRenderer
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JOptionPane:showInputDialog
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.System:currentTimeMillis
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.ChannelListModeItem
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JList:getSelectedValues
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.DefaultListModel:removeElement
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.Object:equals(...)@322: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.Object:equals(...)@327: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.Object:equals(...)@329: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.Object:equals(...)@331: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.util.Iterator:hasNext(...)@337: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): javax.swing.JCheckBox:isSelected(...)@332: {0}, {1}
            final int selectedIndex = listModesMenu.getSelectedIndex();
            listModesPanel.setVisible(false);
            listModesPanel.setViewportView(listModesPanels.get(selectedIndex));
            listModesPanel.setVisible(true);
        } else if (addListModeButton.equals(event.getSource())) {
            addListMode();
        } else if (removeListModeButton.equals(event.getSource())) {
            removeListMode();
        } else if (toggle.equals(event.getSource())) {
            if (toggle.isSelected()) {
                renderer = new ExtendedListModeCellRenderer();
            } else {
                renderer = new ListModeCellRenderer();
            }
            for (JList list : listModesPanels) {
                list.setCellRenderer(renderer);
            }
        }
    }
    //#ChannelListModesPane.java:341: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.actionPerformed(ActionEvent)

    /** 
     * {@inheritDoc}
     * 
     * @param event List selection event
     */
    @Override
    public void valueChanged(final ListSelectionEvent event) {
        if (!event.getValueIsAdjusting()) {
    //#ChannelListModesPane.java:350: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.valueChanged(ListSelectionEvent)
    //#input(void valueChanged(ListSelectionEvent)): event
    //#input(void valueChanged(ListSelectionEvent)): this
    //#input(void valueChanged(ListSelectionEvent)): this.removeListModeButton
    //#pre[1] (void valueChanged(ListSelectionEvent)): event != null
    //#pre[3] (void valueChanged(ListSelectionEvent)): (soft) this.removeListModeButton != null
    //#presumption(void valueChanged(ListSelectionEvent)): javax.swing.event.ListSelectionEvent:getSource(...)@351 != null
    //#test_vector(void valueChanged(ListSelectionEvent)): javax.swing.JList:getSelectedIndex(...)@351: {-2_147_483_648..-2, 0..4_294_967_295}, {-1}
    //#test_vector(void valueChanged(ListSelectionEvent)): javax.swing.event.ListSelectionEvent:getValueIsAdjusting(...)@350: {1}, {0}
            final int selected =
                    ((JList) event.getSource()).getSelectedIndex();
            if (selected == -1) {
                removeListModeButton.setEnabled(false);
            } else {
                removeListModeButton.setEnabled(true);
            }
        }
    }
    //#ChannelListModesPane.java:359: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.valueChanged(ListSelectionEvent)

    /** Updates the mode count label. */
    private void updateModeCount() {
        if (listModesPanels.isEmpty()) {
    //#ChannelListModesPane.java:363: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.updateModeCount()
    //#input(void updateModeCount()): " mode"._tainted
    //#input(void updateModeCount()): " set (maximum of "._tainted
    //#input(void updateModeCount()): " set"._tainted
    //#input(void updateModeCount()): ""._tainted
    //#input(void updateModeCount()): ")"._tainted
    //#input(void updateModeCount()): "s"._tainted
    //#input(void updateModeCount()): this
    //#input(void updateModeCount()): this.channel
    //#input(void updateModeCount()): this.listModesArray
    //#input(void updateModeCount()): this.listModesArray.length
    //#input(void updateModeCount()): this.listModesArray[0..4_294_967_295]
    //#input(void updateModeCount()): this.listModesMenu
    //#input(void updateModeCount()): this.listModesPanels
    //#input(void updateModeCount()): this.modeCount
    //#pre[7] (void updateModeCount()): this.listModesPanels != null
    //#pre[8] (void updateModeCount()): this.modeCount != null
    //#pre[2] (void updateModeCount()): (soft) this.channel != null
    //#pre[3] (void updateModeCount()): (soft) this.listModesArray != null
    //#pre[4] (void updateModeCount()): (soft) this.listModesArray.length >= 1
    //#pre[5] (void updateModeCount()): (soft) init'ed(this.listModesArray[0..4_294_967_295])
    //#pre[6] (void updateModeCount()): (soft) this.listModesMenu != null
    //#presumption(void updateModeCount()): com.dmdirc.Channel:getServer(...)@370 != null
    //#presumption(void updateModeCount()): com.dmdirc.Server:getParser(...)@370 != null
    //#presumption(void updateModeCount()): java.util.List:get(...)@369 != null
    //#presumption(void updateModeCount()): javax.swing.JComboBox:getSelectedIndex(...)@368 >= 0
    //#presumption(void updateModeCount()): javax.swing.JComboBox:getSelectedIndex(...)@368 < this.listModesArray.length
    //#presumption(void updateModeCount()): javax.swing.JList:getModel(...)@369 != null
    //#test_vector(void updateModeCount()): com.dmdirc.parser.irc.IRCParser:getMaxListModes(...)@370: {-2_147_483_648..-2, 0..4_294_967_295}, {-1}
    //#test_vector(void updateModeCount()): java.util.List:isEmpty(...)@363: {0}, {1}
            modeCount.setText(null);
            return;
        }
        
        final int selected = listModesMenu.getSelectedIndex();
        final int current = listModesPanels.get(selected).getModel().getSize();
        final int maxModes = channel.getServer().getParser().
    //#ChannelListModesPane.java:370: Warning: method not available - call not analyzed
    //#    call on Server com.dmdirc.Channel:getServer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void updateModeCount()
    //#    unanalyzed callee: Server com.dmdirc.Channel:getServer()
    //#ChannelListModesPane.java:370: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void updateModeCount()
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#ChannelListModesPane.java:370: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.parser.irc.IRCParser:getMaxListModes(char)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void updateModeCount()
    //#    unanalyzed callee: int com.dmdirc.parser.irc.IRCParser:getMaxListModes(char)
                getMaxListModes(listModesArray[selected]);
        
        if (maxModes == -1) {
            modeCount.setText(current + " mode" + (current == 1 ? "" : "s") + " set");
        } else {
            modeCount.setText(current + " mode" + (current == 1 ? "" : "s")
                    + " set (maximum of " + maxModes + ")");
        }
    }
    //#ChannelListModesPane.java:379: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.updateModeCount()

    /** {@inheritDoc} */
    @Override
    public void configChanged(final String domain, final String key) {
        if (IdentityManager.getGlobalConfig().getOptionBool("general",
    //#ChannelListModesPane.java:384: method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.configChanged(String, String)
    //#ChannelListModesPane.java:384: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void configChanged(String, String)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#ChannelListModesPane.java:384: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
    //#    method: void configChanged(String, String)
    //#    unanalyzed callee: bool com.dmdirc.config.ConfigManager:getOptionBool(String, String)
    //#input(void configChanged(String, String)): this
    //#input(void configChanged(String, String)): this.listModesPanels
    //#output(void configChanged(String, String)): new ExtendedListModeCellRenderer(configChanged#2) num objects
    //#output(void configChanged(String, String)): new ExtendedListModeCellRenderer(configChanged#2).__Tag
    //#output(void configChanged(String, String)): new ListModeCellRenderer(configChanged#1) num objects
    //#output(void configChanged(String, String)): new ListModeCellRenderer(configChanged#1).__Tag
    //#output(void configChanged(String, String)): this.renderer
    //#new obj(void configChanged(String, String)): new ExtendedListModeCellRenderer(configChanged#2)
    //#new obj(void configChanged(String, String)): new ListModeCellRenderer(configChanged#1)
    //#pre[2] (void configChanged(String, String)): this.listModesPanels != null
    //#presumption(void configChanged(String, String)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@384 != null
    //#presumption(void configChanged(String, String)): java.util.Iterator:next(...)@390 != null
    //#post(void configChanged(String, String)): this.renderer in Addr_Set{&new ExtendedListModeCellRenderer(configChanged#2),&new ListModeCellRenderer(configChanged#1)}
    //#post(void configChanged(String, String)): new ExtendedListModeCellRenderer(configChanged#2) num objects <= 1
    //#post(void configChanged(String, String)): new ExtendedListModeCellRenderer(configChanged#2).__Tag == com/dmdirc/addons/ui_swing/components/renderers/ExtendedListModeCellRenderer
    //#post(void configChanged(String, String)): new ListModeCellRenderer(configChanged#1) num objects <= 1
    //#post(void configChanged(String, String)): new ListModeCellRenderer(configChanged#1).__Tag == com/dmdirc/addons/ui_swing/components/renderers/ListModeCellRenderer
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:javax.swing.DefaultListCellRenderer
    //#test_vector(void configChanged(String, String)): com.dmdirc.config.ConfigManager:getOptionBool(...)@384: {0}, {1}
    //#test_vector(void configChanged(String, String)): java.util.Iterator:hasNext(...)@390: {0}, {1}
                "extendedListModes")) {
            renderer = new ListModeCellRenderer();
        } else {
            renderer = new ExtendedListModeCellRenderer();
        }
        for (JList list : listModesPanels) {
            list.setCellRenderer(renderer);
        }
    }
    //#ChannelListModesPane.java:393: end of method: void com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.configChanged(String, String)
}
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/channelsetting/ChannelListModesPane]
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.addListMode()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.configChanged(Ljava/lang/String;Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.initListModesPanel()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.initListeners()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.removeListMode()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.save()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.update()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.updateMenu()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.updateModeCount()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.valueChanged(Ljavax/swing/event/ListSelectionEvent;)V
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/channelsetting/ChannelListModesPane] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.addListMode()V == &addListMode
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.configChanged(Ljava/lang/String;Ljava/lang/String;)V == &configChanged
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.initListModesPanel()V == &initListModesPanel
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.initListeners()V == &initListeners
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.removeListMode()V == &removeListMode
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.save()V == &save
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.update()V == &update
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.updateMenu()V == &updateMenu
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.updateModeCount()V == &updateModeCount
    //#post(com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init): __Dispatch_Table.valueChanged(Ljavax/swing/event/ListSelectionEvent;)V == &valueChanged
    //#ChannelListModesPane.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane.com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane__static_init
    //#ChannelListModesPane.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.channelsetting.ChannelListModesPane
