//# 0 errors, 365 messages
//#
/*
    //#PluginPanel.java:1:1: class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1
    //#PluginPanel.java:1:1: method: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1.com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1__static_init
    //#PluginPanel.java:1:1: class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#PluginPanel.java:1:1: method: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__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.components.pluginpanel;

import com.dmdirc.config.prefs.PreferencesInterface;
import com.dmdirc.plugins.PluginInfo;
import com.dmdirc.plugins.PluginManager;
import com.dmdirc.addons.ui_swing.components.LoggingSwingWorker;
import com.dmdirc.addons.ui_swing.components.text.TextLabel;
import com.dmdirc.addons.ui_swing.components.renderers.AddonCellRenderer;
import com.dmdirc.addons.ui_swing.dialogs.prefs.SwingPreferencesDialog;
import com.dmdirc.util.URLHandler;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collections;
import java.util.List;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import net.miginfocom.swing.MigLayout;

/**
 * Plugin manager dialog. Allows the user to manage their plugins.
 */
public final class PluginPanel extends JPanel implements
    //#PluginPanel.java:53: method: JList com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.access$000(PluginPanel)
    //#input(JList access$000(PluginPanel)): x0
    //#input(JList access$000(PluginPanel)): x0.pluginList
    //#output(JList access$000(PluginPanel)): return_value
    //#pre[1] (JList access$000(PluginPanel)): x0 != null
    //#pre[2] (JList access$000(PluginPanel)): x0.pluginList != null
    //#post(JList access$000(PluginPanel)): return_value == x0.pluginList
    //#post(JList access$000(PluginPanel)): return_value != null
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:com.dmdirc.plugins.PluginManager:getPluginManager
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:com.dmdirc.plugins.PluginManager:getPossiblePluginInfos
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:javax.swing.DefaultListModel:clear
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:javax.swing.DefaultListModel:addElement
    //#unanalyzed(JList access$000(PluginPanel)): Effects-of-calling:javax.swing.JList:repaint
    //#PluginPanel.java:53: end of method: JList com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.access$000(PluginPanel)
    //#PluginPanel.java:53: method: JList com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.access$100(PluginPanel)
    //#input(JList access$100(PluginPanel)): x0
    //#input(JList access$100(PluginPanel)): x0.pluginList
    //#output(JList access$100(PluginPanel)): return_value
    //#pre[1] (JList access$100(PluginPanel)): x0 != null
    //#pre[2] (JList access$100(PluginPanel)): init'ed(x0.pluginList)
    //#post(JList access$100(PluginPanel)): return_value == x0.pluginList
    //#post(JList access$100(PluginPanel)): init'ed(return_value)
    //#PluginPanel.java:53: end of method: JList com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.access$100(PluginPanel)
    //#PluginPanel.java:53: method: JScrollPane com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.access$200(PluginPanel)
    //#input(JScrollPane access$200(PluginPanel)): x0
    //#input(JScrollPane access$200(PluginPanel)): x0.scrollPane
    //#output(JScrollPane access$200(PluginPanel)): return_value
    //#pre[1] (JScrollPane access$200(PluginPanel)): x0 != null
    //#pre[2] (JScrollPane access$200(PluginPanel)): init'ed(x0.scrollPane)
    //#post(JScrollPane access$200(PluginPanel)): return_value == x0.scrollPane
    //#post(JScrollPane access$200(PluginPanel)): init'ed(return_value)
    //#PluginPanel.java:53: end of method: JScrollPane com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.access$200(PluginPanel)
        ActionListener, ListSelectionListener, PreferencesInterface {

    /**
     * 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 = 3;
    /** List of plugins. */
    private JList pluginList;
    /** plugin list scroll pane. */
    private JScrollPane scrollPane;
    /** Button to enable/disable plugin. */
    private JButton toggleButton;
    /** Currently selected plugin. */
    private int selectedPlugin;
    /** Blurb label. */
    private TextLabel blurbLabel;

    /** Creates a new instance of PluginDialog. */
    public PluginPanel() {
        super();
    //#PluginPanel.java:75: method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): "; "._tainted
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): "body { font-family: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): "font-size: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): "ins 0, fill, h "._tainted
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): "pt; }"._tainted
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): com/dmdirc/addons/ui_swing/dialogs/prefs/SwingPreferencesDialog.CLIENT_HEIGHT
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new JButton(initComponents#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new JList(initComponents#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new JScrollPane(initComponents#4) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new SimpleAttributeSet(TextLabel#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new TextLabel(initComponents#7) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new TextLabel(initComponents#7).__Tag
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new TextLabel(initComponents#7).sas
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.blurbLabel
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.pluginList
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.scrollPane
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.selectedPlugin
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.toggleButton
    //#new obj(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new JButton(initComponents#6)
    //#new obj(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new JList(initComponents#1)
    //#new obj(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new JScrollPane(initComponents#4)
    //#new obj(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new SimpleAttributeSet(TextLabel#6)
    //#new obj(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new TextLabel(initComponents#7)
    //#pre[1] (void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): init'ed(com/dmdirc/addons/ui_swing/dialogs/prefs/SwingPreferencesDialog.CLIENT_HEIGHT)
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.blurbLabel == &new TextLabel(initComponents#7)
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.pluginList == &new JList(initComponents#1)
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.scrollPane == &new JScrollPane(initComponents#4)
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.selectedPlugin == 0
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): this.toggleButton == &new JButton(initComponents#6)
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new JButton(initComponents#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new JList(initComponents#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new JScrollPane(initComponents#4) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new SimpleAttributeSet(TextLabel#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new TextLabel(initComponents#7) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new TextLabel(initComponents#7).__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): new TextLabel(initComponents#7).sas == &new SimpleAttributeSet(TextLabel#6)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.DefaultListModel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JList
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JList:setCellRenderer
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JScrollPane:setHorizontalScrollBarPolicy
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JScrollPane:setVerticalScrollBarPolicy
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.LoggingSwingWorker
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1:execute
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:javax.swing.JList:addListSelectionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:setLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:add

        initComponents();
        addListeners();
        layoutComponents();

        pluginList.setSelectedIndex(0);
        selectedPlugin = 0;
    }
    //#PluginPanel.java:83: end of method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel()

    /** Initialises the components. */
    private void initComponents() {
        pluginList = new JList(new DefaultListModel());
    //#PluginPanel.java:87: method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.initComponents()
    //#input(void initComponents()): "; "._tainted
    //#input(void initComponents()): "body { font-family: "._tainted
    //#input(void initComponents()): "font-size: "._tainted
    //#input(void initComponents()): "pt; }"._tainted
    //#input(void initComponents()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void initComponents()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void initComponents()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void initComponents()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void initComponents()): this
    //#output(void initComponents()): new JButton(initComponents#6) num objects
    //#output(void initComponents()): new JList(initComponents#1) num objects
    //#output(void initComponents()): new JScrollPane(initComponents#4) num objects
    //#output(void initComponents()): new SimpleAttributeSet(TextLabel#6) num objects
    //#output(void initComponents()): new TextLabel(initComponents#7) num objects
    //#output(void initComponents()): this.blurbLabel.__Tag
    //#output(void initComponents()): this.blurbLabel.sas
    //#output(void initComponents()): this.blurbLabel
    //#output(void initComponents()): this.pluginList
    //#output(void initComponents()): this.scrollPane
    //#output(void initComponents()): this.toggleButton
    //#new obj(void initComponents()): new JButton(initComponents#6)
    //#new obj(void initComponents()): new JList(initComponents#1)
    //#new obj(void initComponents()): new JScrollPane(initComponents#4)
    //#new obj(void initComponents()): new SimpleAttributeSet(TextLabel#6)
    //#new obj(void initComponents()): new TextLabel(initComponents#7)
    //#post(void initComponents()): this.blurbLabel == &new TextLabel(initComponents#7)
    //#post(void initComponents()): this.pluginList == &new JList(initComponents#1)
    //#post(void initComponents()): this.scrollPane == &new JScrollPane(initComponents#4)
    //#post(void initComponents()): this.toggleButton == &new JButton(initComponents#6)
    //#post(void initComponents()): new JButton(initComponents#6) num objects == 1
    //#post(void initComponents()): new JList(initComponents#1) num objects == 1
    //#post(void initComponents()): new JScrollPane(initComponents#4) num objects == 1
    //#post(void initComponents()): new SimpleAttributeSet(TextLabel#6) num objects == 1
    //#post(void initComponents()): new TextLabel(initComponents#7) num objects == 1
    //#post(void initComponents()): this.blurbLabel.__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#post(void initComponents()): this.blurbLabel.sas == &new SimpleAttributeSet(TextLabel#6)
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void initComponents()): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void initComponents()): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void initComponents()): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.LoggingSwingWorker
        pluginList.setCellRenderer(new AddonCellRenderer());

        scrollPane = new JScrollPane(new JLabel("Loading plugins..."));
        scrollPane.setHorizontalScrollBarPolicy(
                JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

        toggleButton = new JButton("Enable");
        toggleButton.setEnabled(false);

        blurbLabel = new TextLabel(
                "Plugins allow you to extend the functionality of DMDirc.");

        /** {@inheritDoc}. */
        new LoggingSwingWorker() {
    //#PluginPanel.java:103: method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1.com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1(PluginPanel)
    //#PluginPanel.java:103: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.LoggingSwingWorker()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1
    //#    method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1(PluginPanel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.LoggingSwingWorker()
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1(PluginPanel)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1(PluginPanel)): this
    //#output(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1(PluginPanel)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1(PluginPanel)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1(PluginPanel)): init'ed(this.this$0)
    //#PluginPanel.java:103: end of method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1.com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1(PluginPanel)
    //#PluginPanel.java:103: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1:execute()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void initComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1:execute()

            /** {@inheritDoc}. */
            @Override
            protected Object doInBackground() {
                return populateList();
    //#PluginPanel.java:108: method: Object com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1.doInBackground()
    //#input(Object doInBackground()): this
    //#input(Object doInBackground()): this.this$0
    //#input(Object doInBackground()): this.this$0.pluginList
    //#output(Object doInBackground()): return_value
    //#pre[2] (Object doInBackground()): this.this$0 != null
    //#pre[3] (Object doInBackground()): this.pluginList != null
    //#post(Object doInBackground()): return_value == this.pluginList
    //#post(Object doInBackground()): return_value != null
    //#unanalyzed(Object doInBackground()): Effects-of-calling:com.dmdirc.plugins.PluginManager:getPluginManager
    //#unanalyzed(Object doInBackground()): Effects-of-calling:com.dmdirc.plugins.PluginManager:getPossiblePluginInfos
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(Object doInBackground()): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(Object doInBackground()): Effects-of-calling:javax.swing.DefaultListModel:clear
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(Object doInBackground()): Effects-of-calling:javax.swing.DefaultListModel:addElement
    //#unanalyzed(Object doInBackground()): Effects-of-calling:javax.swing.JList:repaint
    //#PluginPanel.java:108: end of method: Object com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1.doInBackground()
            }

            /** {@inheritDoc}. */
            @Override
            protected void done() {
                super.done();
    //#PluginPanel.java:114: method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1.done()
    //#PluginPanel.java:114: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.LoggingSwingWorker:done()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1
    //#    method: void done()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.LoggingSwingWorker:done()
    //#input(void done()): this
    //#input(void done()): this.this$0
    //#input(void done()): this.this$0.pluginList
    //#input(void done()): this.this$0.scrollPane
    //#pre[2] (void done()): this.this$0 != null
    //#pre[3] (void done()): init'ed(this.pluginList)
    //#pre[4] (void done()): this.scrollPane != null
                scrollPane.setViewportView(pluginList);
            }
    //#PluginPanel.java:116: end of method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1.done()
        }.execute();
    }
    //#PluginPanel.java:118: end of method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.initComponents()

    /** Lays out the dialog. */
    private void layoutComponents() {
        setLayout(new MigLayout("ins 0, fill, h " +
    //#PluginPanel.java:122: method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.layoutComponents()
    //#PluginPanel.java:122: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#PluginPanel.java:122: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:setLayout(LayoutManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:setLayout(LayoutManager)
    //#input(void layoutComponents()): "ins 0, fill, h "._tainted
    //#input(void layoutComponents()): com/dmdirc/addons/ui_swing/dialogs/prefs/SwingPreferencesDialog.CLIENT_HEIGHT
    //#input(void layoutComponents()): this
    //#input(void layoutComponents()): this.blurbLabel
    //#input(void layoutComponents()): this.scrollPane
    //#input(void layoutComponents()): this.toggleButton
    //#pre[1] (void layoutComponents()): init'ed(com/dmdirc/addons/ui_swing/dialogs/prefs/SwingPreferencesDialog.CLIENT_HEIGHT)
    //#pre[3] (void layoutComponents()): init'ed(this.blurbLabel)
    //#pre[4] (void layoutComponents()): init'ed(this.scrollPane)
    //#pre[5] (void layoutComponents()): init'ed(this.toggleButton)
                SwingPreferencesDialog.CLIENT_HEIGHT));

        add(blurbLabel, "wrap 10, growx, pushx");
    //#PluginPanel.java:125: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:add(Component, Object)

        add(scrollPane, "wrap 5, grow, push");
    //#PluginPanel.java:127: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:add(Component, Object)

        add(toggleButton, "split 2, growx, pushx, sg button");
    //#PluginPanel.java:129: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:add(Component, Object)

        final JButton button = new JButton("Get more plugins");
        button.addActionListener(this);
        add(button, "growx, pushx, sg button");
    //#PluginPanel.java:133: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel:add(Component, Object)
    }
    //#PluginPanel.java:134: end of method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.layoutComponents()

    /** 
     * Populates the plugins list with plugins from the plugin manager.
     * 
     * @return Populated list
     */
    private JList populateList() {
        final List<PluginInfo> list =
    //#PluginPanel.java:142: method: JList com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.populateList()
    //#PluginPanel.java:142: Warning: method not available - call not analyzed
    //#    call on PluginManager com.dmdirc.plugins.PluginManager:getPluginManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: JList populateList()
    //#    unanalyzed callee: PluginManager com.dmdirc.plugins.PluginManager:getPluginManager()
    //#PluginPanel.java:142: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.plugins.PluginManager:getPossiblePluginInfos(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: JList populateList()
    //#    unanalyzed callee: List com.dmdirc.plugins.PluginManager:getPossiblePluginInfos(bool)
    //#input(JList populateList()): this
    //#input(JList populateList()): this.pluginList
    //#output(JList populateList()): return_value
    //#pre[2] (JList populateList()): this.pluginList != null
    //#presumption(JList populateList()): com.dmdirc.plugins.PluginManager:getPluginManager(...)@142 != null
    //#presumption(JList populateList()): com.dmdirc.plugins.PluginManager:getPossiblePluginInfos(...)@142 != null
    //#presumption(JList populateList()): javax.swing.JList:getModel(...)@146 != null
    //#presumption(JList populateList()): javax.swing.JList:getModel(...)@148 != null
    //#post(JList populateList()): return_value == this.pluginList
    //#post(JList populateList()): return_value != null
    //#test_vector(JList populateList()): java.util.Iterator:hasNext(...)@147: {0}, {1}
                PluginManager.getPluginManager().getPossiblePluginInfos(true);
        Collections.sort(list);

        ((DefaultListModel) pluginList.getModel()).clear();
        for (PluginInfo plugin : list) {
            ((DefaultListModel) pluginList.getModel()).addElement(new PluginInfoToggle(
                    plugin));
        }
        pluginList.repaint();
        return pluginList;
    //#PluginPanel.java:152: end of method: JList com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.populateList()
    }

    /** Adds listeners to components. */
    private void addListeners() {
        toggleButton.addActionListener(this);
    //#PluginPanel.java:157: method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.addListeners()
    //#input(void addListeners()): this
    //#input(void addListeners()): this.pluginList
    //#input(void addListeners()): this.toggleButton
    //#pre[2] (void addListeners()): this.pluginList != null
    //#pre[3] (void addListeners()): this.toggleButton != null
        pluginList.addListSelectionListener(this);
    }
    //#PluginPanel.java:159: end of method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.addListeners()

    /**
     * Invoked when an action occurs.
     * 
     * @param e The event related to this action.
     */
    @Override
    public void actionPerformed(final ActionEvent e) {
        if (e.getSource() == toggleButton && selectedPlugin >= 0) {
    //#PluginPanel.java:168: method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Descendant_Table[com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Dispatch_Table.getState()Z
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Dispatch_Table.toggle()V
    //#input(void actionPerformed(ActionEvent)): e
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.pluginList
    //#input(void actionPerformed(ActionEvent)): this.selectedPlugin
    //#input(void actionPerformed(ActionEvent)): this.toggleButton
    //#pre[1] (void actionPerformed(ActionEvent)): e != null
    //#pre[3] (void actionPerformed(ActionEvent)): (soft) this.pluginList != null
    //#pre[4] (void actionPerformed(ActionEvent)): (soft) init'ed(this.selectedPlugin)
    //#pre[5] (void actionPerformed(ActionEvent)): (soft) this.toggleButton != null
    //#presumption(void actionPerformed(ActionEvent)): com.dmdirc.util.URLHandler:getURLHander(...)@182 != null
    //#presumption(void actionPerformed(ActionEvent)): javax.swing.JList:getSelectedValue(...).__Tag@169 == com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle
    //#presumption(void actionPerformed(ActionEvent)): javax.swing.JList:getSelectedValue(...)@169 != null
    //#presumption(void actionPerformed(ActionEvent)): pluginInfo.pi@169 != null
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.plugins.PluginInfo:isLoaded
    //#test_vector(void actionPerformed(ActionEvent)): this.selectedPlugin: {-2_147_483_648..-1}, {0..4_294_967_295}
            final PluginInfoToggle pluginInfo = (PluginInfoToggle) pluginList.
                    getSelectedValue();

            pluginInfo.toggle();

            if (pluginInfo.getState()) {
                toggleButton.setText("Disable");
            } else {
                toggleButton.setText("Enable");
            }

            pluginList.repaint();
        } else if (e.getSource() != toggleButton) {
            URLHandler.getURLHander().launchApp("http://addons.dmdirc.com/");
    //#PluginPanel.java:182: Warning: method not available - call not analyzed
    //#    call on URLHandler com.dmdirc.util.URLHandler:getURLHander()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: URLHandler com.dmdirc.util.URLHandler:getURLHander()
    //#PluginPanel.java:182: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.URLHandler:launchApp(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.util.URLHandler:launchApp(String)
        }
    }
    //#PluginPanel.java:184: end of method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.actionPerformed(ActionEvent)

    /** {@inheritDoc}. */
    @Override
    public void valueChanged(final ListSelectionEvent e) {
        if (!e.getValueIsAdjusting()) {
    //#PluginPanel.java:189: method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.valueChanged(ListSelectionEvent)
    //#input(void valueChanged(ListSelectionEvent)): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Descendant_Table[com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle]
    //#input(void valueChanged(ListSelectionEvent)): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Descendant_Table[others]
    //#input(void valueChanged(ListSelectionEvent)): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Dispatch_Table.getPluginInfo()Lcom/dmdirc/plugins/PluginInfo;
    //#input(void valueChanged(ListSelectionEvent)): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Dispatch_Table.getState()Z
    //#input(void valueChanged(ListSelectionEvent)): e
    //#input(void valueChanged(ListSelectionEvent)): this
    //#input(void valueChanged(ListSelectionEvent)): this.toggleButton
    //#output(void valueChanged(ListSelectionEvent)): this.selectedPlugin
    //#pre[1] (void valueChanged(ListSelectionEvent)): e != null
    //#pre[4] (void valueChanged(ListSelectionEvent)): (soft) this.toggleButton != null
    //#presumption(void valueChanged(ListSelectionEvent)): javax.swing.JList:getSelectedValue(...).__Tag@192 == com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle
    //#presumption(void valueChanged(ListSelectionEvent)): javax.swing.JList:getSelectedValue(...)@192 != null
    //#presumption(void valueChanged(ListSelectionEvent)): javax.swing.event.ListSelectionEvent:getSource(...)@190 != null
    //#presumption(void valueChanged(ListSelectionEvent)): javax.swing.event.ListSelectionEvent:getSource(...)@192 != null
    //#presumption(void valueChanged(ListSelectionEvent)): pluginInfo.pi@192 != null
    //#post(void valueChanged(ListSelectionEvent)): possibly_updated(this.selectedPlugin)
    //#unanalyzed(void valueChanged(ListSelectionEvent)): Effects-of-calling:com.dmdirc.plugins.PluginInfo:isLoaded
    //#test_vector(void valueChanged(ListSelectionEvent)): javax.swing.JList:getSelectedIndex(...)@190: {-2_147_483_648..-1}, {0..4_294_967_295}
    //#test_vector(void valueChanged(ListSelectionEvent)): javax.swing.event.ListSelectionEvent:getValueIsAdjusting(...)@189: {1}, {0}
    //#test_vector(void valueChanged(ListSelectionEvent)): pluginInfo.toggle@192 ^ com.dmdirc.plugins.PluginInfo:isLoaded(...)@65: {0}, {1}
            final int selected = ((JList) e.getSource()).getSelectedIndex();
            if (selected >= 0) {
                final PluginInfoToggle pluginInfo =
                        (PluginInfoToggle) ((JList) e.getSource()).
                        getSelectedValue();
                toggleButton.setEnabled(true);

                if (pluginInfo.getState()) {
                    toggleButton.setEnabled(pluginInfo.getPluginInfo().isUnloadable());
    //#PluginPanel.java:198: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.plugins.PluginInfo:isUnloadable()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
    //#    method: void valueChanged(ListSelectionEvent)
    //#    unanalyzed callee: bool com.dmdirc.plugins.PluginInfo:isUnloadable()
                    toggleButton.setText("Disable");
                } else {
                    toggleButton.setText("Enable");
                }
            }
            selectedPlugin = selected;
        }
    }
    //#PluginPanel.java:206: end of method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.valueChanged(ListSelectionEvent)

    /** {@inheritDoc} */
    @Override
    public void save() {
        for (Object pit : ((DefaultListModel) pluginList.getModel()).toArray()) {
    //#PluginPanel.java:211: method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.save()
    //#input(void save()): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Descendant_Table[com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle]
    //#input(void save()): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Descendant_Table[others]
    //#input(void save()): com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle.__Dispatch_Table.apply()V
    //#input(void save()): this
    //#input(void save()): this.pluginList
    //#pre[2] (void save()): this.pluginList != null
    //#presumption(void save()): arr$.length@211 <= 4_294_967_295
    //#presumption(void save()): arr$[i$]@211 != null
    //#presumption(void save()): javax.swing.DefaultListModel:toArray(...)@211 != null
    //#presumption(void save()): javax.swing.JList:getModel(...)@211 != null
    //#presumption(void save()): pit.__Tag@211 == com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle
    //#presumption(void save()): pit.__Tag@211 == com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle
    //#presumption(void save()): pit.__Tag@211 == com/dmdirc/addons/ui_swing/components/pluginpanel/PluginInfoToggle
    //#presumption(void save()): pit.pi@211 != null
    //#unanalyzed(void save()): Effects-of-calling:com.dmdirc.plugins.PluginInfo:isLoaded
    //#unanalyzed(void save()): Effects-of-calling:com.dmdirc.plugins.PluginInfo:unloadPlugin
    //#unanalyzed(void save()): Effects-of-calling:com.dmdirc.plugins.PluginInfo:loadPlugin
    //#unanalyzed(void save()): Effects-of-calling:com.dmdirc.plugins.PluginManager:getPluginManager
    //#unanalyzed(void save()): Effects-of-calling:com.dmdirc.plugins.PluginManager:updateAutoLoad
            ((PluginInfoToggle) pit).apply();
        }
    }
    //#PluginPanel.java:214: end of method: void com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.save()
}
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/pluginpanel/PluginPanel$1]
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object;
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1__static_init): __Dispatch_Table.done()V
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/pluginpanel/PluginPanel$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object; == &doInBackground
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1__static_init): __Dispatch_Table.done()V == &done
    //#PluginPanel.java:: end of method: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1.com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1__static_init
    //#PluginPanel.java:: end of class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel$1
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/pluginpanel/PluginPanel]
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.addListeners()V
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.initComponents()V
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.layoutComponents()V
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.populateList()Ljavax/swing/JList;
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.save()V
    //#output(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.valueChanged(Ljavax/swing/event/ListSelectionEvent;)V
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/pluginpanel/PluginPanel] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.addListeners()V == &addListeners
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.initComponents()V == &initComponents
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.layoutComponents()V == &layoutComponents
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.populateList()Ljavax/swing/JList; == &populateList
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.save()V == &save
    //#post(com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init): __Dispatch_Table.valueChanged(Ljavax/swing/event/ListSelectionEvent;)V == &valueChanged
    //#PluginPanel.java:: end of method: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel.com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel__static_init
    //#PluginPanel.java:: end of class: com.dmdirc.addons.ui_swing.components.pluginpanel.PluginPanel
