//# 0 errors, 815 messages
//#
/*
    //#WizardPanel.java:1:1: class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#WizardPanel.java:1:1: method: com.dmdirc.addons.ui_swing.wizard.WizardPanel.com.dmdirc.addons.ui_swing.wizard.WizardPanel__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.wizard;

import com.dmdirc.addons.ui_swing.components.EtchedLineBorder;
import com.dmdirc.addons.ui_swing.components.EtchedLineBorder.BorderSide;
import com.dmdirc.addons.ui_swing.components.TitlePanel;
import com.dmdirc.util.ListenerList;

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

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;

import net.miginfocom.swing.MigLayout;

/**
 * Wizard panel.
 */
public class WizardPanel extends JPanel implements ActionListener {

    /**
     * A version number for this class. It should be changed whenever the class
     * structure is changed (or anything else that would prevent serialized
     * objects being unserialized with the new class).
     */
    private static final long serialVersionUID = 2;
    /** Step panel list. */
    private final StepLayout steps;
    /** Wizard title. */
    private final String title;
    /** Wizard. */
    private final transient WizardListener wizard;
    /** Step panel. */
    private JPanel stepsPanel;
    /** Title panel. */
    private TitlePanel titleLabel;
    /** Current step. */
    private int currentStep;
    /** Prevous step button. */
    private JButton prev;
    /** Next step button. */
    private JButton next;
    /** Progress label. */
    private JLabel progressLabel;
    /** Step Listeners. */
    private final ListenerList stepListeners;

    /**
     * Creates a new instance of WizardPanel.
     *
     * @param title Title for the wizard
     * @param steps Steps for the wizard
     * @param wizard Wizard to inform of changes
     */
    public WizardPanel(final String title, final List<Step> steps,
            final WizardListener wizard) {
        super();
    //#WizardPanel.java:84: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): __Descendant_Table[com/dmdirc/addons/ui_swing/wizard/WizardPanel]
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): __Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): __Dispatch_Table.addStep(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): com.dmdirc.addons.ui_swing.components.EtchedLineBorder$BorderSide.BOTTOM
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): com.dmdirc.addons.ui_swing.components.EtchedLineBorder$BorderSide.TOP
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/Step]
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep]
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep]
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep]
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep]
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep]
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): java.awt.Color.BLACK
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): steps
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.__Tag
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): title
    //#input(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): wizard
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new ArrayList(StepLayout#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JButton(initComponents#5) num objects
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JButton(initComponents#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JLabel(initComponents#4) num objects
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JPanel(initComponents#3) num objects
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new ListenerList(WizardPanel#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new StepLayout(WizardPanel#2) num objects
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.steps.__Tag
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.steps.currentStep
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.steps.hGap
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.steps.steps
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.steps.vGap
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new TitlePanel(initComponents#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.__Tag
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.next
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.prev
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.progressLabel
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.stepListeners
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.steps
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.stepsPanel
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.title
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.titleLabel
    //#output(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.wizard
    //#new obj(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new ArrayList(StepLayout#1)
    //#new obj(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JButton(initComponents#5)
    //#new obj(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JButton(initComponents#6)
    //#new obj(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JLabel(initComponents#4)
    //#new obj(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JPanel(initComponents#3)
    //#new obj(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new ListenerList(WizardPanel#1)
    //#new obj(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new StepLayout(WizardPanel#2)
    //#new obj(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new TitlePanel(initComponents#1)
    //#pre[2] (void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): steps != null
    //#pre[1] (void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/wizard/WizardPanel
    //#presumption(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): java.util.Iterator:next(...).__Tag@95 in {com/dmdirc/addons/ui_swing/wizard/Step, com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep, com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep, com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep, com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep, com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep}
    //#presumption(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): java.util.Iterator:next(...)@95 != null
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.__Tag == com/dmdirc/addons/ui_swing/wizard/WizardPanel
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.next == &new JButton(initComponents#5)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.prev == &new JButton(initComponents#6)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.progressLabel == &new JLabel(initComponents#4)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.stepListeners == &new ListenerList(WizardPanel#1)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.steps == &new StepLayout(WizardPanel#2)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.stepsPanel == &new JPanel(initComponents#3)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.title == title
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): init'ed(this.title)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.titleLabel == &new TitlePanel(initComponents#1)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.wizard == wizard
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): init'ed(this.wizard)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new ArrayList(StepLayout#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JButton(initComponents#5) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JButton(initComponents#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JLabel(initComponents#4) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new JPanel(initComponents#3) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new ListenerList(WizardPanel#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new StepLayout(WizardPanel#2) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): new TitlePanel(initComponents#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.steps.__Tag == com/dmdirc/addons/ui_swing/wizard/StepLayout
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): init'ed(this.steps.currentStep)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): init'ed(this.steps.hGap)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): this.steps.steps == &new ArrayList(StepLayout#1)
    //#post(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): init'ed(this.steps.vGap)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.EtchedLineBorder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TitlePanel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:javax.swing.JPanel:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:javax.swing.BorderFactory:createMatteBorder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:javax.swing.JPanel:setBorder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:com.dmdirc.addons.ui_swing.wizard.WizardPanel:setLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:com.dmdirc.addons.ui_swing.wizard.WizardPanel:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:com.dmdirc.addons.ui_swing.wizard.Step:toString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): Effects-of-calling:java.util.ArrayList
    //#test_vector(void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)): java.util.Iterator:hasNext(...)@95: {0}, {1}

        stepListeners = new ListenerList();
    //#WizardPanel.java:86: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList()

        this.title = title;
        this.steps = new StepLayout();
        this.wizard = wizard;

        initComponents();
        layoutComponents();

        for (Step step : steps) {
            addStep(step);
        }
    }
    //#WizardPanel.java:98: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.com.dmdirc.addons.ui_swing.wizard.WizardPanel(String, List, WizardListener)

    /** Initialises the components. */
    private void initComponents() {
        titleLabel = new TitlePanel(new EtchedLineBorder(EtchedBorder.LOWERED,
    //#WizardPanel.java:102: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.initComponents()
    //#WizardPanel.java:102: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.EtchedLineBorder(int, EtchedLineBorder$BorderSide)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void initComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.EtchedLineBorder(int, EtchedLineBorder$BorderSide)
    //#WizardPanel.java:102: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TitlePanel(Border, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void initComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TitlePanel(Border, String)
    //#input(void initComponents()): com.dmdirc.addons.ui_swing.components.EtchedLineBorder$BorderSide.BOTTOM
    //#input(void initComponents()): this
    //#input(void initComponents()): this.steps
    //#input(void initComponents()): this.title
    //#output(void initComponents()): new JButton(initComponents#5) num objects
    //#output(void initComponents()): new JButton(initComponents#6) num objects
    //#output(void initComponents()): new JLabel(initComponents#4) num objects
    //#output(void initComponents()): new JPanel(initComponents#3) num objects
    //#output(void initComponents()): new TitlePanel(initComponents#1) num objects
    //#output(void initComponents()): this.next
    //#output(void initComponents()): this.prev
    //#output(void initComponents()): this.progressLabel
    //#output(void initComponents()): this.stepsPanel
    //#output(void initComponents()): this.titleLabel
    //#new obj(void initComponents()): new JButton(initComponents#5)
    //#new obj(void initComponents()): new JButton(initComponents#6)
    //#new obj(void initComponents()): new JLabel(initComponents#4)
    //#new obj(void initComponents()): new JPanel(initComponents#3)
    //#new obj(void initComponents()): new TitlePanel(initComponents#1)
    //#presumption(void initComponents()): init'ed(com.dmdirc.addons.ui_swing.components.EtchedLineBorder$BorderSide.BOTTOM)
    //#post(void initComponents()): this.next == &new JButton(initComponents#5)
    //#post(void initComponents()): this.prev == &new JButton(initComponents#6)
    //#post(void initComponents()): this.progressLabel == &new JLabel(initComponents#4)
    //#post(void initComponents()): this.stepsPanel == &new JPanel(initComponents#3)
    //#post(void initComponents()): this.titleLabel == &new TitlePanel(initComponents#1)
    //#post(void initComponents()): new JButton(initComponents#5) num objects == 1
    //#post(void initComponents()): new JButton(initComponents#6) num objects == 1
    //#post(void initComponents()): new JLabel(initComponents#4) num objects == 1
    //#post(void initComponents()): new JPanel(initComponents#3) num objects == 1
    //#post(void initComponents()): new TitlePanel(initComponents#1) num objects == 1
                BorderSide.BOTTOM), title);
        stepsPanel = new JPanel(steps);

        progressLabel = new JLabel();

        next = new JButton();

        prev = new JButton("\u00AB Previous");
        next.setText("Next \u00BB");

        next.addActionListener(this);
        prev.addActionListener(this);
    }
    //#WizardPanel.java:115: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.initComponents()

    /** Lays out the components. */
    private void layoutComponents() {
        final JPanel progressPanel = new JPanel(new MigLayout("fill"));
    //#WizardPanel.java:119: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.layoutComponents()
    //#WizardPanel.java:119: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#input(void layoutComponents()): com.dmdirc.addons.ui_swing.components.EtchedLineBorder$BorderSide.TOP
    //#input(void layoutComponents()): java.awt.Color.BLACK
    //#input(void layoutComponents()): this
    //#input(void layoutComponents()): this.next
    //#input(void layoutComponents()): this.prev
    //#input(void layoutComponents()): this.progressLabel
    //#input(void layoutComponents()): this.stepsPanel
    //#input(void layoutComponents()): this.titleLabel
    //#pre[2] (void layoutComponents()): init'ed(this.next)
    //#pre[3] (void layoutComponents()): init'ed(this.prev)
    //#pre[4] (void layoutComponents()): init'ed(this.progressLabel)
    //#pre[5] (void layoutComponents()): init'ed(this.stepsPanel)
    //#pre[6] (void layoutComponents()): init'ed(this.titleLabel)
    //#presumption(void layoutComponents()): init'ed(com.dmdirc.addons.ui_swing.components.EtchedLineBorder$BorderSide.TOP)
    //#presumption(void layoutComponents()): init'ed(java.awt.Color.BLACK)
        progressPanel.add(progressLabel, "growx, pushx");
        progressPanel.add(prev, "sg button");
        progressPanel.add(next, "sg button");
        progressPanel.setBorder(BorderFactory.createMatteBorder(1, 0, 0, 0,
                Color.BLACK));
        progressPanel.setBorder(new EtchedLineBorder(EtchedBorder.LOWERED,
    //#WizardPanel.java:125: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.EtchedLineBorder(int, EtchedLineBorder$BorderSide)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.EtchedLineBorder(int, EtchedLineBorder$BorderSide)
                BorderSide.TOP));

        setLayout(new MigLayout("fill, wrap 1, ins 0"));
    //#WizardPanel.java:128: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#WizardPanel.java:128: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.wizard.WizardPanel:setLayout(LayoutManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.wizard.WizardPanel:setLayout(LayoutManager)
        add(titleLabel, "growx, pushx");
    //#WizardPanel.java:129: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.wizard.WizardPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.wizard.WizardPanel:add(Component, Object)
        add(stepsPanel, "grow, push");
    //#WizardPanel.java:130: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.wizard.WizardPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.wizard.WizardPanel:add(Component, Object)
        add(progressPanel, "growx, pushx");
    //#WizardPanel.java:131: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.wizard.WizardPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.wizard.WizardPanel:add(Component, Object)
    }
    //#WizardPanel.java:132: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.layoutComponents()

    /** Displays the wizard. */
    public void display() {
        if (!steps.isEmpty()) {
    //#WizardPanel.java:136: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.display()
    //#input(void display()): " of "._tainted
    //#input(void display()): "Step "._tainted
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/Step]
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep]
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep]
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep]
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep]
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep]
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[others]
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/Step.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepLayout]
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[others]
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.first(Ljava/awt/Container;)V
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.getStep(I)Lcom/dmdirc/addons/ui_swing/wizard/Step;
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.isEmpty()Z
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.show(ILjava/awt/Container;)V
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.size()I
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void display()): com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void display()): this
    //#input(void display()): this.next
    //#input(void display()): this.prev
    //#input(void display()): this.progressLabel
    //#input(void display()): this.steps
    //#input(void display()): this.steps.__Tag
    //#input(void display()): this.steps.steps
    //#input(void display()): this.stepsPanel
    //#input(void display()): this.titleLabel
    //#output(void display()): this.currentStep
    //#output(void display()): this.steps.currentStep
    //#pre[7] (void display()): this.steps != null
    //#pre[8] (void display()): this.steps.__Tag == com/dmdirc/addons/ui_swing/wizard/StepLayout
    //#pre[9] (void display()): this.steps.steps != null
    //#pre[4] (void display()): (soft) this.next != null
    //#pre[5] (void display()): (soft) this.prev != null
    //#pre[6] (void display()): (soft) this.progressLabel != null
    //#pre[10] (void display()): (soft) this.stepsPanel != null
    //#pre[11] (void display()): (soft) this.titleLabel != null
    //#presumption(void display()): java.util.List:get(...)@126 != null
    //#presumption(void display()): java.util.List:get(...)@126.__Tag in {com/dmdirc/addons/ui_swing/wizard/Step, com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep, com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep, com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep, com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep, com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep}
    //#post(void display()): this.currentStep == One-of{old this.currentStep, 0}
    //#post(void display()): possibly_updated(this.steps.currentStep)
    //#unanalyzed(void display()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void display()): Effects-of-calling:java.util.List:size
    //#unanalyzed(void display()): Effects-of-calling:java.awt.Container:getTreeLock
    //#unanalyzed(void display()): Effects-of-calling:java.awt.Container:getComponentCount
    //#unanalyzed(void display()): Effects-of-calling:java.awt.Container:getComponent
    //#unanalyzed(void display()): Effects-of-calling:java.awt.Component:isVisible
    //#unanalyzed(void display()): Effects-of-calling:java.awt.Component:setVisible
    //#unanalyzed(void display()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void display()): Effects-of-calling:java.awt.Container:validate
    //#unanalyzed(void display()): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void display()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void display()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void display()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void display()): Effects-of-calling:javax.swing.JLabel:setText
    //#test_vector(void display()): java.util.List:isEmpty(...)@115: {1}, {0}
    //#test_vector(void display()): java.util.List:size(...)@106: {-2_147_483_648..0, 2..4_294_967_295}, {1}
            steps.first(stepsPanel);
            currentStep = 0;
            titleLabel.setText(steps.getStep(currentStep).getTitle());
    //#WizardPanel.java:139: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void display()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)

            prev.setEnabled(false);
            if (steps.size() == 1) {
                next.setText("Finish");
            }

            updateProgressLabel();
        }
    }
    //#WizardPanel.java:148: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.display()

    /**
     * {@inheritDoc}
     *
     * @param e Action event
     */
    @Override
    public void actionPerformed(final ActionEvent e) {
        if (e.getSource() == next) {
    //#WizardPanel.java:157: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): " of "._tainted
    //#input(void actionPerformed(ActionEvent)): "Step "._tainted
    //#input(void actionPerformed(ActionEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/wizard/WizardPanel]
    //#input(void actionPerformed(ActionEvent)): __Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): __Dispatch_Table.nextStep()V
    //#input(void actionPerformed(ActionEvent)): __Dispatch_Table.prevStep()V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/Step]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/Step.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepLayout]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.getStep(I)Lcom/dmdirc/addons/ui_swing/wizard/Step;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.previous(Ljava/awt/Container;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.show(ILjava/awt/Container;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.size()I
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepListener]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Dispatch_Table.stepAboutToDisplay(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Dispatch_Table.stepHidden(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void actionPerformed(ActionEvent)): e
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.__Tag
    //#input(void actionPerformed(ActionEvent)): this.currentStep
    //#input(void actionPerformed(ActionEvent)): this.next
    //#input(void actionPerformed(ActionEvent)): this.prev
    //#input(void actionPerformed(ActionEvent)): this.progressLabel
    //#input(void actionPerformed(ActionEvent)): this.stepListeners
    //#input(void actionPerformed(ActionEvent)): this.steps
    //#input(void actionPerformed(ActionEvent)): this.steps.__Tag
    //#input(void actionPerformed(ActionEvent)): this.steps.currentStep
    //#input(void actionPerformed(ActionEvent)): this.steps.steps
    //#input(void actionPerformed(ActionEvent)): this.stepsPanel
    //#input(void actionPerformed(ActionEvent)): this.titleLabel
    //#output(void actionPerformed(ActionEvent)): this.currentStep
    //#output(void actionPerformed(ActionEvent)): this.steps.currentStep
    //#pre[1] (void actionPerformed(ActionEvent)): e != null
    //#pre[2] (void actionPerformed(ActionEvent)): (soft) this.currentStep >= -2_147_483_647
    //#pre[3] (void actionPerformed(ActionEvent)): (soft) this.steps.currentStep >= -2_147_483_647
    //#pre[5] (void actionPerformed(ActionEvent)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/wizard/WizardPanel
    //#pre[6] (void actionPerformed(ActionEvent)): (soft) this.next != null
    //#pre[7] (void actionPerformed(ActionEvent)): (soft) this.prev != null
    //#pre[8] (void actionPerformed(ActionEvent)): (soft) this.progressLabel != null
    //#pre[9] (void actionPerformed(ActionEvent)): (soft) this.stepListeners != null
    //#pre[11] (void actionPerformed(ActionEvent)): (soft) this.steps != null
    //#pre[12] (void actionPerformed(ActionEvent)): (soft) this.steps.__Tag == com/dmdirc/addons/ui_swing/wizard/StepLayout
    //#pre[13] (void actionPerformed(ActionEvent)): (soft) this.steps.steps != null
    //#pre[14] (void actionPerformed(ActionEvent)): (soft) this.stepsPanel != null
    //#pre[15] (void actionPerformed(ActionEvent)): (soft) this.titleLabel != null
    //#post(void actionPerformed(ActionEvent)): this.currentStep == One-of{old this.currentStep, old this.currentStep - 1}
    //#post(void actionPerformed(ActionEvent)): init'ed(this.currentStep)
    //#post(void actionPerformed(ActionEvent)): init'ed(this.steps.currentStep)
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.awt.Container:getTreeLock
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.awt.Container:getComponentCount
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.awt.Container:getComponent
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.awt.Component:isVisible
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.awt.Component:setVisible
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.awt.Container:validate
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:getTitle
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TitlePanel:setText
    //#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:javax.swing.JLabel:setText
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:stepHidden
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:stepAboutToDisplay
            nextStep();
    //#WizardPanel.java:158: Warning: call too complex - analysis skipped
    //#    call on void nextStep()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void nextStep()
        } else if (e.getSource() == prev) {
            prevStep();
        }
    }
    //#WizardPanel.java:162: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.actionPerformed(ActionEvent)

    /**
     * Adds a step to the wizard.
     *
     * @param step Step to add
     */
    public void addStep(final Step step) {
        stepsPanel.add(step, step.toString());
    //#WizardPanel.java:170: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.addStep(Step)
    //#WizardPanel.java:170: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.wizard.Step:toString()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void addStep(Step)
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.wizard.Step:toString()
    //#input(void addStep(Step)): step
    //#input(void addStep(Step)): step._tainted
    //#input(void addStep(Step)): this
    //#input(void addStep(Step)): this.stepsPanel
    //#pre[1] (void addStep(Step)): step != null
    //#pre[4] (void addStep(Step)): this.stepsPanel != null
    }
    //#WizardPanel.java:171: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.addStep(Step)

    /**
     * Enables or disables the "next step" button.
     *
     * @param newValue boolean true to make "next" button enabled, else false
     */
    public void enableNextStep(final boolean newValue) {
        next.setEnabled(newValue);
    //#WizardPanel.java:179: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.enableNextStep(bool)
    //#input(void enableNextStep(bool)): newValue
    //#input(void enableNextStep(bool)): this
    //#input(void enableNextStep(bool)): this.next
    //#pre[3] (void enableNextStep(bool)): this.next != null
    }
    //#WizardPanel.java:180: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.enableNextStep(bool)

    /**
     * Enables or disables the "previous step" button.
     *
     * @param newValue boolean true to make "previous" button enabled, else false
     */
    public void enablePreviousStep(final boolean newValue) {
        prev.setEnabled(newValue);
    //#WizardPanel.java:188: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.enablePreviousStep(bool)
    //#input(void enablePreviousStep(bool)): newValue
    //#input(void enablePreviousStep(bool)): this
    //#input(void enablePreviousStep(bool)): this.prev
    //#pre[3] (void enablePreviousStep(bool)): this.prev != null
    }
    //#WizardPanel.java:189: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.enablePreviousStep(bool)

    /** Moves to the next step. */
    protected void nextStep() {
        if ("Next \u00BB".equals(next.getText())) {
    //#WizardPanel.java:193: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.nextStep()
    //#input(void nextStep()): " of "._tainted
    //#input(void nextStep()): "Step "._tainted
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/Step]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[others]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepLayout]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[others]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.getStep(I)Lcom/dmdirc/addons/ui_swing/wizard/Step;
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.next(Ljava/awt/Container;)V
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.show(ILjava/awt/Container;)V
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.size()I
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepListener]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[others]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepListener.__Dispatch_Table.stepAboutToDisplay(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/StepListener.__Dispatch_Table.stepHidden(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/WizardListener]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/SwingFirstRunWizard]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Descendant_Table[others]
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Dispatch_Table.wizardFinished()V
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void nextStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/SwingFirstRunWizard.__Dispatch_Table.wizardFinished()V
    //#input(void nextStep()): this
    //#input(void nextStep()): this.currentStep
    //#input(void nextStep()): this.next
    //#input(void nextStep()): this.prev
    //#input(void nextStep()): this.progressLabel
    //#input(void nextStep()): this.stepListeners
    //#input(void nextStep()): this.steps
    //#input(void nextStep()): this.steps.__Tag
    //#input(void nextStep()): this.steps.currentStep
    //#input(void nextStep()): this.steps.steps
    //#input(void nextStep()): this.stepsPanel
    //#input(void nextStep()): this.titleLabel
    //#output(void nextStep()): com/dmdirc/config/IdentityManager.config.globalConfig
    //#output(void nextStep()): com/dmdirc/config/IdentityManager.config.needSave
    //#output(void nextStep()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void nextStep()): new ArrayList(getSources#1) num objects
    //#output(void nextStep()): new ArrayList(getSources#1).__Lock
    //#output(void nextStep()): new ConfigManager(setOption#2*) num objects
    //#output(void nextStep()): new ConfigManager(setOption#2*).__Tag
    //#output(void nextStep()): new ConfigManager(setOption#2*).channel
    //#output(void nextStep()): new ConfigManager(setOption#2*).ircd
    //#output(void nextStep()): new ConfigManager(setOption#2*).listeners
    //#output(void nextStep()): new ConfigManager(setOption#2*).network
    //#output(void nextStep()): new ConfigManager(setOption#2*).server
    //#output(void nextStep()): new ConfigManager(setOption#2*).sources
    //#output(void nextStep()): new MapList(ConfigManager#1) num objects
    //#output(void nextStep()): this.currentStep
    //#output(void nextStep()): this.steps.currentStep
    //#new obj(void nextStep()): java.lang.StringBuilder:toString(...)
    //#new obj(void nextStep()): new ArrayList(getSources#1)
    //#new obj(void nextStep()): new ConfigManager(setOption#2*)
    //#new obj(void nextStep()): new MapList(ConfigManager#1)
    //#pre[13] (void nextStep()): this.next != null
    //#pre[8] (void nextStep()): (soft) init'ed(com/dmdirc/config/IdentityManager.config.globalConfig)
    //#pre[10] (void nextStep()): (soft) this.currentStep <= 4_294_967_293
    //#pre[11] (void nextStep()): (soft) this.steps.currentStep <= 4_294_967_294
    //#pre[14] (void nextStep()): (soft) this.prev != null
    //#pre[15] (void nextStep()): (soft) this.progressLabel != null
    //#pre[16] (void nextStep()): (soft) this.stepListeners != null
    //#pre[18] (void nextStep()): (soft) this.steps != null
    //#pre[19] (void nextStep()): (soft) this.steps.__Tag == com/dmdirc/addons/ui_swing/wizard/StepLayout
    //#pre[20] (void nextStep()): (soft) this.steps.steps != null
    //#pre[21] (void nextStep()): (soft) this.stepsPanel != null
    //#pre[22] (void nextStep()): (soft) this.titleLabel != null
    //#presumption(void nextStep()): java.util.List:get(...)@126 != null
    //#presumption(void nextStep()): java.util.List:get(...)@126.__Tag in {com/dmdirc/addons/ui_swing/wizard/Step, com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep, com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep, com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep, com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep, com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep}
    //#post(void nextStep()): com/dmdirc/config/IdentityManager.config.globalConfig == old com/dmdirc/config/IdentityManager.config.globalConfig
    //#post(void nextStep()): possibly_updated(com/dmdirc/config/IdentityManager.config.needSave)
    //#post(void nextStep()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void nextStep()): this.currentStep == One-of{old this.currentStep + 1, old this.currentStep}
    //#post(void nextStep()): this.currentStep <= 4_294_967_294
    //#post(void nextStep()): init'ed(this.steps.currentStep)
    //#post(void nextStep()): new ArrayList(getSources#1) num objects == 0, if init'ed
    //#post(void nextStep()): new ArrayList(getSources#1).__Lock == 0, if init'ed
    //#post(void nextStep()): new ConfigManager(setOption#2*) num objects == 0, if init'ed
    //#post(void nextStep()): new ConfigManager(setOption#2*).__Tag not init'ed, if init'ed
    //#post(void nextStep()): new ConfigManager(setOption#2*).channel == null
    //#post(void nextStep()): new ConfigManager(setOption#2*).ircd == null
    //#post(void nextStep()): new ConfigManager(setOption#2*).listeners == null
    //#post(void nextStep()): new ConfigManager(setOption#2*).network == null
    //#post(void nextStep()): new ConfigManager(setOption#2*).server == null
    //#post(void nextStep()): new ConfigManager(setOption#2*).sources == null
    //#post(void nextStep()): new MapList(ConfigManager#1) num objects == 0, if init'ed
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.List:size
    //#unanalyzed(void nextStep()): Effects-of-calling:java.awt.Container:getTreeLock
    //#unanalyzed(void nextStep()): Effects-of-calling:java.awt.Container:getComponentCount
    //#unanalyzed(void nextStep()): Effects-of-calling:java.awt.Container:getComponent
    //#unanalyzed(void nextStep()): Effects-of-calling:java.awt.Component:isVisible
    //#unanalyzed(void nextStep()): Effects-of-calling:java.awt.Component:setVisible
    //#unanalyzed(void nextStep()): Effects-of-calling:java.awt.Container:validate
    //#unanalyzed(void nextStep()): Effects-of-calling:wizardFinished
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void nextStep()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void nextStep()): Effects-of-calling:stepHidden
    //#unanalyzed(void nextStep()): Effects-of-calling:stepAboutToDisplay
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.addons.ui_swing.wizard.WizardDialog:dispose
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.resourcemanager.ResourceManager:getResourceManager
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.resourcemanager.ResourceManager:getResourcesStartingWithAsBytes
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.Main:getConfigDir
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.String:substring
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.String:lastIndexOf
    //#unanalyzed(void nextStep()): Effects-of-calling:java.io.File
    //#unanalyzed(void nextStep()): Effects-of-calling:java.io.File:exists
    //#unanalyzed(void nextStep()): Effects-of-calling:java.io.File:mkdirs
    //#unanalyzed(void nextStep()): Effects-of-calling:java.io.File:isDirectory
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.resourcemanager.ResourceManager:resourceToFile
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.logger.Logger:userError
    //#unanalyzed(void nextStep()): Effects-of-calling:getStep
    //#unanalyzed(void nextStep()): Effects-of-calling:javax.swing.JCheckBox:isSelected
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.interfaces.ConfigChangeListener:configChanged
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomains
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Map:remove
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Map:keySet
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.HashSet
    //#unanalyzed(void nextStep()): Effects-of-calling:hasOption
    //#unanalyzed(void nextStep()): Effects-of-calling:getOption
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.logging.Logger:finer
    //#unanalyzed(void nextStep()): Effects-of-calling:getSources
    //#unanalyzed(void nextStep()): Effects-of-calling:addListener
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void nextStep()): Effects-of-calling:addConfigManager
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void nextStep()): Effects-of-calling:getDomains
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void nextStep()): Effects-of-calling:getOptions
    //#unanalyzed(void nextStep()): Effects-of-calling:equals
    //#unanalyzed(void nextStep()): Effects-of-calling:removeListener
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.String:valueOf
    //#unanalyzed(void nextStep()): Effects-of-calling:setOption
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void nextStep()): Effects-of-calling:getTarget
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void nextStep()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void nextStep()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void nextStep()): Effects-of-calling:com.dmdirc.actions.ActionManager:addListener
    //#test_vector(void nextStep()): java.lang.String:equals(...)@193: {0}, {1}
    //#test_vector(void nextStep()): java.lang.String:equals(...)@204: {0}, {1}
            prev.setEnabled(true);
            fireStepAboutToBeDisplayed(steps.getStep(currentStep + 1));
            steps.next(stepsPanel);
            fireStepHidden(steps.getStep(currentStep));
            currentStep++;
            if (currentStep == steps.size() - 1) {
                next.setText("Finish");
            }
            titleLabel.setText(steps.getStep(currentStep).getTitle());
    //#WizardPanel.java:202: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void nextStep()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)
            updateProgressLabel();
        } else if ("Finish".equals(next.getText())) {
            fireWizardFinished();
        }
    }
    //#WizardPanel.java:207: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.nextStep()

    /** Moves to the previous step. */
    protected void prevStep() {
        fireStepAboutToBeDisplayed(steps.getStep(currentStep - 1));
    //#WizardPanel.java:211: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.prevStep()
    //#input(void prevStep()): " of "._tainted
    //#input(void prevStep()): "Step "._tainted
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/Step]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[others]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/Step.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepLayout]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[others]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.getStep(I)Lcom/dmdirc/addons/ui_swing/wizard/Step;
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.previous(Ljava/awt/Container;)V
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.show(ILjava/awt/Container;)V
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.size()I
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepListener]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[others]
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepListener.__Dispatch_Table.stepAboutToDisplay(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/StepListener.__Dispatch_Table.stepHidden(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void prevStep()): com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void prevStep()): this
    //#input(void prevStep()): this.currentStep
    //#input(void prevStep()): this.next
    //#input(void prevStep()): this.prev
    //#input(void prevStep()): this.progressLabel
    //#input(void prevStep()): this.stepListeners
    //#input(void prevStep()): this.steps
    //#input(void prevStep()): this.steps.__Tag
    //#input(void prevStep()): this.steps.currentStep
    //#input(void prevStep()): this.steps.steps
    //#input(void prevStep()): this.stepsPanel
    //#input(void prevStep()): this.titleLabel
    //#output(void prevStep()): this.currentStep
    //#output(void prevStep()): this.steps.currentStep
    //#pre[1] (void prevStep()): this.currentStep >= -2_147_483_647
    //#pre[2] (void prevStep()): this.steps.currentStep >= -2_147_483_647
    //#pre[4] (void prevStep()): this.next != null
    //#pre[6] (void prevStep()): this.progressLabel != null
    //#pre[7] (void prevStep()): this.stepListeners != null
    //#pre[9] (void prevStep()): this.steps != null
    //#pre[10] (void prevStep()): this.steps.__Tag == com/dmdirc/addons/ui_swing/wizard/StepLayout
    //#pre[11] (void prevStep()): this.steps.steps != null
    //#pre[12] (void prevStep()): this.stepsPanel != null
    //#pre[13] (void prevStep()): this.titleLabel != null
    //#pre[5] (void prevStep()): (soft) this.prev != null
    //#presumption(void prevStep()): java.util.List:get(...)@126 != null
    //#presumption(void prevStep()): java.util.List:get(...)@126.__Tag in {com/dmdirc/addons/ui_swing/wizard/Step, com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep, com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep, com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep, com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep, com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep}
    //#post(void prevStep()): this.currentStep == old this.currentStep - 1
    //#post(void prevStep()): this.currentStep <= 4_294_967_294
    //#post(void prevStep()): init'ed(this.steps.currentStep)
    //#unanalyzed(void prevStep()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void prevStep()): Effects-of-calling:java.util.List:get
    //#unanalyzed(void prevStep()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(void prevStep()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void prevStep()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void prevStep()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void prevStep()): Effects-of-calling:java.util.List:size
    //#unanalyzed(void prevStep()): Effects-of-calling:java.awt.Container:getTreeLock
    //#unanalyzed(void prevStep()): Effects-of-calling:java.awt.Container:getComponentCount
    //#unanalyzed(void prevStep()): Effects-of-calling:java.awt.Container:getComponent
    //#unanalyzed(void prevStep()): Effects-of-calling:java.awt.Component:isVisible
    //#unanalyzed(void prevStep()): Effects-of-calling:java.awt.Component:setVisible
    //#unanalyzed(void prevStep()): Effects-of-calling:java.awt.Container:validate
    //#unanalyzed(void prevStep()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void prevStep()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void prevStep()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void prevStep()): Effects-of-calling:javax.swing.JLabel:setText
    //#unanalyzed(void prevStep()): Effects-of-calling:stepHidden
    //#unanalyzed(void prevStep()): Effects-of-calling:stepAboutToDisplay
    //#test_vector(void prevStep()): this.currentStep: {-2_147_483_647..0, 2..4_294_967_295}, {1}
        steps.previous(stepsPanel);
        fireStepHidden(steps.getStep(currentStep));
        currentStep--;
        if (currentStep == 0) {
            prev.setEnabled(false);
        }
        next.setText("Next \u00BB");
        titleLabel.setText(steps.getStep(currentStep).getTitle());
    //#WizardPanel.java:219: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void prevStep()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TitlePanel:setText(String)
        updateProgressLabel();
    }
    //#WizardPanel.java:221: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.prevStep()

    /**
     * Returns the step at the specified index.
     *
     * @param stepNumber step number
     *
     * @return Specified step.
     */
    public Step getStep(final int stepNumber) {
        return steps.getStep(stepNumber);
    //#WizardPanel.java:231: method: Step com.dmdirc.addons.ui_swing.wizard.WizardPanel.getStep(int)
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/Step]
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/CommunicationStep]
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ExtractionStep]
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/FirstRunExtractionStep]
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/MigrationExtrationStep]
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/ProfileStep]
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/Step.__Descendant_Table[others]
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepLayout]
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[others]
    //#input(Step getStep(int)): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.getStep(I)Lcom/dmdirc/addons/ui_swing/wizard/Step;
    //#input(Step getStep(int)): stepNumber
    //#input(Step getStep(int)): this
    //#input(Step getStep(int)): this.steps
    //#input(Step getStep(int)): this.steps.__Tag
    //#input(Step getStep(int)): this.steps.steps
    //#output(Step getStep(int)): return_value
    //#pre[3] (Step getStep(int)): this.steps != null
    //#pre[4] (Step getStep(int)): this.steps.__Tag == com/dmdirc/addons/ui_swing/wizard/StepLayout
    //#pre[5] (Step getStep(int)): this.steps.steps != null
    //#post(Step getStep(int)): init'ed(return_value)
    //#unanalyzed(Step getStep(int)): Effects-of-calling:java.util.List:get
    //#WizardPanel.java:231: end of method: Step com.dmdirc.addons.ui_swing.wizard.WizardPanel.getStep(int)
    }

    /**
     * Returns the current step.
     *
     * @return Current step number
     */
    public int getCurrentStep() {
        return currentStep;
    //#WizardPanel.java:240: method: int com.dmdirc.addons.ui_swing.wizard.WizardPanel.getCurrentStep()
    //#input(int getCurrentStep()): this
    //#input(int getCurrentStep()): this.currentStep
    //#output(int getCurrentStep()): return_value
    //#pre[2] (int getCurrentStep()): init'ed(this.currentStep)
    //#post(int getCurrentStep()): return_value == this.currentStep
    //#post(int getCurrentStep()): init'ed(return_value)
    //#WizardPanel.java:240: end of method: int com.dmdirc.addons.ui_swing.wizard.WizardPanel.getCurrentStep()
    }

    /** Updates the progress label. */
    private void updateProgressLabel() {
        progressLabel.setText("Step " + (currentStep + 1) + " of " +
    //#WizardPanel.java:245: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.updateProgressLabel()
    //#input(void updateProgressLabel()): " of "._tainted
    //#input(void updateProgressLabel()): "Step "._tainted
    //#input(void updateProgressLabel()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepLayout]
    //#input(void updateProgressLabel()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Descendant_Table[others]
    //#input(void updateProgressLabel()): com/dmdirc/addons/ui_swing/wizard/StepLayout.__Dispatch_Table.size()I
    //#input(void updateProgressLabel()): this
    //#input(void updateProgressLabel()): this.currentStep
    //#input(void updateProgressLabel()): this.progressLabel
    //#input(void updateProgressLabel()): this.steps
    //#input(void updateProgressLabel()): this.steps.__Tag
    //#input(void updateProgressLabel()): this.steps.steps
    //#pre[2] (void updateProgressLabel()): this.currentStep <= 4_294_967_294
    //#pre[3] (void updateProgressLabel()): this.progressLabel != null
    //#pre[4] (void updateProgressLabel()): this.steps != null
    //#pre[5] (void updateProgressLabel()): this.steps.__Tag == com/dmdirc/addons/ui_swing/wizard/StepLayout
    //#pre[6] (void updateProgressLabel()): this.steps.steps != null
    //#unanalyzed(void updateProgressLabel()): Effects-of-calling:java.util.List:size
                steps.size());
    }
    //#WizardPanel.java:247: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.updateProgressLabel()

    /**
     * Adds a step listener to the list.
     *
     * @param listener
     */
    public void addStepListener(final StepListener listener) {
        synchronized (stepListeners) {
    //#WizardPanel.java:255: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.addStepListener(StepListener)
    //#input(void addStepListener(StepListener)): listener
    //#input(void addStepListener(StepListener)): this
    //#input(void addStepListener(StepListener)): this.stepListeners
    //#input(void addStepListener(StepListener)): this.stepListeners.__Lock
    //#pre[3] (void addStepListener(StepListener)): this.stepListeners != null
            stepListeners.add(StepListener.class, listener);
    //#WizardPanel.java:256: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList:add(Class, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void addStepListener(StepListener)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList:add(Class, Object)
        }
    }
    //#WizardPanel.java:258: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.addStepListener(StepListener)

    /**
     * Removes a step listener from the list.
     *
     * @param listener
     */
    public void removeStepListener(final StepListener listener) {
        synchronized (stepListeners) {
    //#WizardPanel.java:266: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.removeStepListener(StepListener)
    //#input(void removeStepListener(StepListener)): listener
    //#input(void removeStepListener(StepListener)): this
    //#input(void removeStepListener(StepListener)): this.stepListeners
    //#input(void removeStepListener(StepListener)): this.stepListeners.__Lock
    //#pre[3] (void removeStepListener(StepListener)): this.stepListeners != null
            stepListeners.remove(StepListener.class, listener);
    //#WizardPanel.java:267: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList:remove(Class, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void removeStepListener(StepListener)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList:remove(Class, Object)
        }
    }
    //#WizardPanel.java:269: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.removeStepListener(StepListener)

    /**
     * Adds a wizard listener to the list.
     *
     * @param listener
     */
    public void addWizardListener(final WizardListener listener) {
        synchronized (stepListeners) {
    //#WizardPanel.java:277: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.addWizardListener(WizardListener)
    //#input(void addWizardListener(WizardListener)): listener
    //#input(void addWizardListener(WizardListener)): this
    //#input(void addWizardListener(WizardListener)): this.stepListeners
    //#input(void addWizardListener(WizardListener)): this.stepListeners.__Lock
    //#pre[3] (void addWizardListener(WizardListener)): this.stepListeners != null
            stepListeners.add(WizardListener.class, listener);
    //#WizardPanel.java:278: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList:add(Class, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void addWizardListener(WizardListener)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList:add(Class, Object)
        }
    }
    //#WizardPanel.java:280: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.addWizardListener(WizardListener)

    /**
     * Removes a wizard listener from the list.
     *
     * @param listener
     */
    public void removeWizardListener(final WizardListener listener) {
        synchronized (stepListeners) {
    //#WizardPanel.java:288: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.removeWizardListener(WizardListener)
    //#input(void removeWizardListener(WizardListener)): listener
    //#input(void removeWizardListener(WizardListener)): this
    //#input(void removeWizardListener(WizardListener)): this.stepListeners
    //#input(void removeWizardListener(WizardListener)): this.stepListeners.__Lock
    //#pre[3] (void removeWizardListener(WizardListener)): this.stepListeners != null
            stepListeners.remove(WizardListener.class, listener);
    //#WizardPanel.java:289: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList:remove(Class, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void removeWizardListener(WizardListener)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList:remove(Class, Object)
        }
    }
    //#WizardPanel.java:291: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.removeWizardListener(WizardListener)

    /**
     * Fires step about to be displayed events.
     *
     * @param step Step to be displayed
     */
    private void fireStepAboutToBeDisplayed(final Step step) {
        synchronized (stepListeners) {
    //#WizardPanel.java:299: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.fireStepAboutToBeDisplayed(Step)
    //#input(void fireStepAboutToBeDisplayed(Step)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepListener]
    //#input(void fireStepAboutToBeDisplayed(Step)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[others]
    //#input(void fireStepAboutToBeDisplayed(Step)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Dispatch_Table.stepAboutToDisplay(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#input(void fireStepAboutToBeDisplayed(Step)): step
    //#input(void fireStepAboutToBeDisplayed(Step)): this
    //#input(void fireStepAboutToBeDisplayed(Step)): this.stepListeners
    //#input(void fireStepAboutToBeDisplayed(Step)): this.stepListeners.__Lock
    //#pre[3] (void fireStepAboutToBeDisplayed(Step)): this.stepListeners != null
    //#presumption(void fireStepAboutToBeDisplayed(Step)): com.dmdirc.util.ListenerList:get(...)@300 != null
    //#presumption(void fireStepAboutToBeDisplayed(Step)): java.util.Iterator:next(...).__Tag@302 == com/dmdirc/addons/ui_swing/wizard/StepListener
    //#presumption(void fireStepAboutToBeDisplayed(Step)): java.util.Iterator:next(...)@302 != null
    //#test_vector(void fireStepAboutToBeDisplayed(Step)): java.util.Iterator:hasNext(...)@302: {1}, {0}
            List<StepListener> listeners =
    //#WizardPanel.java:300: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.ListenerList:get(Class)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void fireStepAboutToBeDisplayed(Step)
    //#    unanalyzed callee: List com.dmdirc.util.ListenerList:get(Class)
                    stepListeners.get(StepListener.class);
            for (StepListener listener : listeners) {
                listener.stepAboutToDisplay(step);
    //#WizardPanel.java:303: Warning: method not available - call not analyzed
    //#    call on void stepAboutToDisplay(Step)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void fireStepAboutToBeDisplayed(Step)
    //#    unanalyzed callee: void stepAboutToDisplay(Step)
            }
        }
    }
    //#WizardPanel.java:306: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.fireStepAboutToBeDisplayed(Step)

    /**
     * Fires step hidden events.
     *
     * @param step step thats been hidden
     */
    private void fireStepHidden(final Step step) {
        synchronized (stepListeners) {
    //#WizardPanel.java:314: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.fireStepHidden(Step)
    //#input(void fireStepHidden(Step)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/StepListener]
    //#input(void fireStepHidden(Step)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Descendant_Table[others]
    //#input(void fireStepHidden(Step)): com/dmdirc/addons/ui_swing/wizard/StepListener.__Dispatch_Table.stepHidden(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#input(void fireStepHidden(Step)): step
    //#input(void fireStepHidden(Step)): this
    //#input(void fireStepHidden(Step)): this.stepListeners
    //#input(void fireStepHidden(Step)): this.stepListeners.__Lock
    //#pre[3] (void fireStepHidden(Step)): this.stepListeners != null
    //#presumption(void fireStepHidden(Step)): com.dmdirc.util.ListenerList:get(...)@315 != null
    //#presumption(void fireStepHidden(Step)): java.util.Iterator:next(...).__Tag@317 == com/dmdirc/addons/ui_swing/wizard/StepListener
    //#presumption(void fireStepHidden(Step)): java.util.Iterator:next(...)@317 != null
    //#test_vector(void fireStepHidden(Step)): java.util.Iterator:hasNext(...)@317: {1}, {0}
            List<StepListener> listeners =
    //#WizardPanel.java:315: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.ListenerList:get(Class)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void fireStepHidden(Step)
    //#    unanalyzed callee: List com.dmdirc.util.ListenerList:get(Class)
                    stepListeners.get(StepListener.class);
            for (StepListener listener : listeners) {
                listener.stepHidden(step);
    //#WizardPanel.java:318: Warning: method not available - call not analyzed
    //#    call on void stepHidden(Step)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void fireStepHidden(Step)
    //#    unanalyzed callee: void stepHidden(Step)
            }
        }
    }
    //#WizardPanel.java:321: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.fireStepHidden(Step)

    /**
     * Fires wizard finished events.
     */
    private void fireWizardFinished() {
        synchronized (stepListeners) {
    //#WizardPanel.java:327: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.fireWizardFinished()
    //#input(void fireWizardFinished()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/WizardListener]
    //#input(void fireWizardFinished()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/SwingFirstRunWizard]
    //#input(void fireWizardFinished()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Descendant_Table[others]
    //#input(void fireWizardFinished()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Dispatch_Table.wizardFinished()V
    //#input(void fireWizardFinished()): com/dmdirc/addons/ui_swing/wizard/firstrun/SwingFirstRunWizard.__Dispatch_Table.wizardFinished()V
    //#input(void fireWizardFinished()): this
    //#input(void fireWizardFinished()): this.stepListeners
    //#input(void fireWizardFinished()): this.stepListeners.__Lock
    //#output(void fireWizardFinished()): com/dmdirc/config/IdentityManager.config.globalConfig
    //#output(void fireWizardFinished()): com/dmdirc/config/IdentityManager.config.needSave
    //#output(void fireWizardFinished()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void fireWizardFinished()): new ArrayList(getSources#1) num objects
    //#output(void fireWizardFinished()): new ArrayList(getSources#1).__Lock
    //#output(void fireWizardFinished()): new ConfigManager(setOption#2*) num objects
    //#output(void fireWizardFinished()): new ConfigManager(setOption#2*).__Tag
    //#output(void fireWizardFinished()): new ConfigManager(setOption#2*).channel
    //#output(void fireWizardFinished()): new ConfigManager(setOption#2*).ircd
    //#output(void fireWizardFinished()): new ConfigManager(setOption#2*).listeners
    //#output(void fireWizardFinished()): new ConfigManager(setOption#2*).network
    //#output(void fireWizardFinished()): new ConfigManager(setOption#2*).server
    //#output(void fireWizardFinished()): new ConfigManager(setOption#2*).sources
    //#output(void fireWizardFinished()): new MapList(ConfigManager#1) num objects
    //#new obj(void fireWizardFinished()): java.lang.StringBuilder:toString(...)
    //#new obj(void fireWizardFinished()): new ArrayList(getSources#1)
    //#new obj(void fireWizardFinished()): new ConfigManager(setOption#2*)
    //#new obj(void fireWizardFinished()): new MapList(ConfigManager#1)
    //#pre[18] (void fireWizardFinished()): this.stepListeners != null
    //#pre[15] (void fireWizardFinished()): (soft) init'ed(com/dmdirc/config/IdentityManager.config.globalConfig)
    //#presumption(void fireWizardFinished()): com.dmdirc.util.ListenerList:get(...)@328 != null
    //#presumption(void fireWizardFinished()): java.util.Iterator:next(...).__Tag@330 in {com/dmdirc/addons/ui_swing/wizard/WizardListener, com/dmdirc/addons/ui_swing/wizard/firstrun/SwingFirstRunWizard}
    //#presumption(void fireWizardFinished()): java.util.Iterator:next(...)@330 != null
    //#post(void fireWizardFinished()): com/dmdirc/config/IdentityManager.config.globalConfig == old com/dmdirc/config/IdentityManager.config.globalConfig
    //#post(void fireWizardFinished()): com/dmdirc/config/IdentityManager.config.needSave == old com/dmdirc/config/IdentityManager.config.needSave
    //#post(void fireWizardFinished()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void fireWizardFinished()): new ArrayList(getSources#1) num objects == undefined
    //#post(void fireWizardFinished()): new ArrayList(getSources#1) num objects == 0, if init'ed
    //#post(void fireWizardFinished()): new ArrayList(getSources#1).__Lock == new ArrayList(getSources#1) num objects
    //#post(void fireWizardFinished()): new ConfigManager(setOption#2*) num objects == new ArrayList(getSources#1) num objects
    //#post(void fireWizardFinished()): new ConfigManager(setOption#2*).__Tag == new ArrayList(getSources#1) num objects
    //#post(void fireWizardFinished()): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void fireWizardFinished()): new ConfigManager(setOption#2*).channel == undefined
    //#post(void fireWizardFinished()): new ConfigManager(setOption#2*).channel == null
    //#post(void fireWizardFinished()): new ConfigManager(setOption#2*).ircd == new ConfigManager(setOption#2*).channel
    //#post(void fireWizardFinished()): new ConfigManager(setOption#2*).listeners == new ConfigManager(setOption#2*).channel
    //#post(void fireWizardFinished()): new ConfigManager(setOption#2*).network == new ConfigManager(setOption#2*).channel
    //#post(void fireWizardFinished()): new ConfigManager(setOption#2*).server == new ConfigManager(setOption#2*).channel
    //#post(void fireWizardFinished()): new ConfigManager(setOption#2*).sources == new ConfigManager(setOption#2*).channel
    //#test_vector(void fireWizardFinished()): java.util.Iterator:hasNext(...)@330: {1}, {0}
            List<WizardListener> listeners =
    //#WizardPanel.java:328: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.ListenerList:get(Class)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void fireWizardFinished()
    //#    unanalyzed callee: List com.dmdirc.util.ListenerList:get(Class)
                    stepListeners.get(WizardListener.class);
            for (WizardListener listener : listeners) {
                listener.wizardFinished();
    //#WizardPanel.java:331: Warning: call too complex - analysis skipped
    //#    call on void wizardFinished()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void fireWizardFinished()
    //#    unanalyzed callee: void wizardFinished()
            }
        }
    }
    //#WizardPanel.java:334: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.fireWizardFinished()

    /**
     * Fires wizard cancelled events.
     */
    protected void fireWizardCancelled() {
        synchronized (stepListeners) {
    //#WizardPanel.java:340: method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.fireWizardCancelled()
    //#input(void fireWizardCancelled()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/WizardListener]
    //#input(void fireWizardCancelled()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Descendant_Table[com/dmdirc/addons/ui_swing/wizard/firstrun/SwingFirstRunWizard]
    //#input(void fireWizardCancelled()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Descendant_Table[others]
    //#input(void fireWizardCancelled()): com/dmdirc/addons/ui_swing/wizard/WizardListener.__Dispatch_Table.wizardCancelled()V
    //#input(void fireWizardCancelled()): com/dmdirc/addons/ui_swing/wizard/firstrun/SwingFirstRunWizard.__Dispatch_Table.wizardCancelled()V
    //#input(void fireWizardCancelled()): this
    //#input(void fireWizardCancelled()): this.stepListeners
    //#input(void fireWizardCancelled()): this.stepListeners.__Lock
    //#pre[2] (void fireWizardCancelled()): this.stepListeners != null
    //#presumption(void fireWizardCancelled()): com.dmdirc.util.ListenerList:get(...)@341 != null
    //#presumption(void fireWizardCancelled()): java.util.Iterator:next(...).__Tag@343 in {com/dmdirc/addons/ui_swing/wizard/WizardListener, com/dmdirc/addons/ui_swing/wizard/firstrun/SwingFirstRunWizard}
    //#presumption(void fireWizardCancelled()): java.util.Iterator:next(...)@343 != null
    //#presumption(void fireWizardCancelled()): listener.wizardDialog@343 != null
    //#unanalyzed(void fireWizardCancelled()): Effects-of-calling:com.dmdirc.addons.ui_swing.wizard.WizardDialog:dispose
    //#test_vector(void fireWizardCancelled()): java.util.Iterator:hasNext(...)@343: {1}, {0}
            List<WizardListener> listeners =
    //#WizardPanel.java:341: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.ListenerList:get(Class)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
    //#    method: void fireWizardCancelled()
    //#    unanalyzed callee: List com.dmdirc.util.ListenerList:get(Class)
                    stepListeners.get(WizardListener.class);
            for (WizardListener listener : listeners) {
                listener.wizardCancelled();
            }
        }
    }
    //#WizardPanel.java:347: end of method: void com.dmdirc.addons.ui_swing.wizard.WizardPanel.fireWizardCancelled()
}
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/wizard/WizardPanel]
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.addStep(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.addStepListener(Lcom/dmdirc/addons/ui_swing/wizard/StepListener;)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.addWizardListener(Lcom/dmdirc/addons/ui_swing/wizard/WizardListener;)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.display()V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.enableNextStep(Z)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.enablePreviousStep(Z)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.fireStepAboutToBeDisplayed(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.fireStepHidden(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.fireWizardCancelled()V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.fireWizardFinished()V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.getCurrentStep()I
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.getStep(I)Lcom/dmdirc/addons/ui_swing/wizard/Step;
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.initComponents()V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.layoutComponents()V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.nextStep()V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.prevStep()V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.removeStepListener(Lcom/dmdirc/addons/ui_swing/wizard/StepListener;)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.removeWizardListener(Lcom/dmdirc/addons/ui_swing/wizard/WizardListener;)V
    //#output(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.updateProgressLabel()V
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/wizard/WizardPanel] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.addStep(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V == &addStep
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.addStepListener(Lcom/dmdirc/addons/ui_swing/wizard/StepListener;)V == &addStepListener
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.addWizardListener(Lcom/dmdirc/addons/ui_swing/wizard/WizardListener;)V == &addWizardListener
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.display()V == &display
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.enableNextStep(Z)V == &enableNextStep
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.enablePreviousStep(Z)V == &enablePreviousStep
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.fireStepAboutToBeDisplayed(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V == &fireStepAboutToBeDisplayed
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.fireStepHidden(Lcom/dmdirc/addons/ui_swing/wizard/Step;)V == &fireStepHidden
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.fireWizardCancelled()V == &fireWizardCancelled
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.fireWizardFinished()V == &fireWizardFinished
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.getCurrentStep()I == &getCurrentStep
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.getStep(I)Lcom/dmdirc/addons/ui_swing/wizard/Step; == &getStep
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.initComponents()V == &initComponents
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.layoutComponents()V == &layoutComponents
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.nextStep()V == &nextStep
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.prevStep()V == &prevStep
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.removeStepListener(Lcom/dmdirc/addons/ui_swing/wizard/StepListener;)V == &removeStepListener
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.removeWizardListener(Lcom/dmdirc/addons/ui_swing/wizard/WizardListener;)V == &removeWizardListener
    //#post(com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init): __Dispatch_Table.updateProgressLabel()V == &updateProgressLabel
    //#WizardPanel.java:: end of method: com.dmdirc.addons.ui_swing.wizard.WizardPanel.com.dmdirc.addons.ui_swing.wizard.WizardPanel__static_init
    //#WizardPanel.java:: end of class: com.dmdirc.addons.ui_swing.wizard.WizardPanel
