//# 0 errors, 1,145 messages
//#
/*
    //#ProfileDetailPanel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2
    //#ProfileDetailPanel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2__static_init
    //#ProfileDetailPanel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1
    //#ProfileDetailPanel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1__static_init
    //#ProfileDetailPanel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator
    //#ProfileDetailPanel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator__static_init
    //#ProfileDetailPanel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#ProfileDetailPanel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init
 * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.dmdirc.addons.ui_swing.dialogs.profiles;

import com.dmdirc.addons.ui_swing.MainFrame;
import com.dmdirc.config.prefs.validator.FileNameValidator;
import com.dmdirc.config.prefs.validator.IdentValidator;
import com.dmdirc.config.prefs.validator.NicknameValidator;
import com.dmdirc.config.prefs.validator.NotEmptyValidator;
import com.dmdirc.config.prefs.validator.ValidationResponse;
import com.dmdirc.addons.ui_swing.components.StandardInputDialog;
import com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList;
import com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField;

import com.dmdirc.config.prefs.validator.ValidatorChain;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Enumeration;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import net.miginfocom.swing.MigLayout;

/** Profile detail panel. */
public final class ProfileDetailPanel extends JPanel implements ActionListener,
    //#ProfileDetailPanel.java:56: method: ReorderableJList com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.access$100(ProfileDetailPanel)
    //#input(ReorderableJList access$100(ProfileDetailPanel)): x0
    //#input(ReorderableJList access$100(ProfileDetailPanel)): x0.nicknames
    //#output(ReorderableJList access$100(ProfileDetailPanel)): return_value
    //#pre[1] (ReorderableJList access$100(ProfileDetailPanel)): x0 != null
    //#pre[2] (ReorderableJList access$100(ProfileDetailPanel)): init'ed(x0.nicknames)
    //#post(ReorderableJList access$100(ProfileDetailPanel)): return_value == x0.nicknames
    //#post(ReorderableJList access$100(ProfileDetailPanel)): init'ed(return_value)
    //#ProfileDetailPanel.java:56: end of method: ReorderableJList com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.access$100(ProfileDetailPanel)
    //#ProfileDetailPanel.java:56: method: ProfileListModel com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.access$200(ProfileDetailPanel)
    //#input(ProfileListModel access$200(ProfileDetailPanel)): x0
    //#input(ProfileListModel access$200(ProfileDetailPanel)): x0.model
    //#output(ProfileListModel access$200(ProfileDetailPanel)): return_value
    //#pre[1] (ProfileListModel access$200(ProfileDetailPanel)): x0 != null
    //#post(ProfileListModel access$200(ProfileDetailPanel)): return_value == x0.model
    //#post(ProfileListModel access$200(ProfileDetailPanel)): init'ed(return_value)
    //#ProfileDetailPanel.java:56: end of method: ProfileListModel com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.access$200(ProfileDetailPanel)
    //#ProfileDetailPanel.java:56: method: Profile com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.access$300(ProfileDetailPanel)
    //#input(Profile access$300(ProfileDetailPanel)): x0
    //#input(Profile access$300(ProfileDetailPanel)): x0.profile
    //#output(Profile access$300(ProfileDetailPanel)): return_value
    //#pre[1] (Profile access$300(ProfileDetailPanel)): x0 != null
    //#pre[2] (Profile access$300(ProfileDetailPanel)): init'ed(x0.profile)
    //#post(Profile access$300(ProfileDetailPanel)): return_value == x0.profile
    //#post(Profile access$300(ProfileDetailPanel)): init'ed(return_value)
    //#ProfileDetailPanel.java:56: end of method: Profile com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.access$300(ProfileDetailPanel)
        ListSelectionListener, ListDataListener {

    /**
     * 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;
    /** Displayed profile. */
    private Profile profile;
    /** The profile list model. */
    private final ProfileListModel model;
    /** The nickname list model. */
    private final DefaultListModel nicknameModel;
    /** Duplicate nickname validator. */
    private final ValidatorChain<String> validator;
    /** Name text field. */
    private ValidatingJTextField name;
    /** Realname text field. */
    private ValidatingJTextField realname;
    /** Ident text field. */
    private ValidatingJTextField ident;
    /** Nicknames list. */
    private ReorderableJList nicknames;
    /** Add button. */
    private JButton addButton;
    /** Delete button. */
    private JButton delButton;
    /** Edit button. */
    private JButton editButton;
    /** Main frame. */
    private MainFrame mainFrame;

    /**
     * Creates a new profile detail panel.
     * 
     * @param model The list model to use to validate names
     * @param mainFrame Main frame
     */
    @SuppressWarnings("unchecked")
    public ProfileDetailPanel(final ProfileListModel model,
            final MainFrame mainFrame) {
        super();
    //#ProfileDetailPanel.java:99: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): "unable to create data flavor: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): com/dmdirc/addons/ui_swing/components/reorderablelist/ArrayListTransferHandler.com.dmdirc.logger.ErrorLevel.LOW
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): com/dmdirc/addons/ui_swing/components/reorderablelist/ReorderableJList.com.dmdirc.logger.ErrorLevel.LOW
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.checkError()V
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.setEnabled(Z)V
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): mainFrame
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): model
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new DataFlavor(ReorderableJList#4) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new DefaultListModel(ProfileDetailPanel#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new DropTarget(ReorderableJList#3) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new IdentValidator(initMainComponents#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JButton(initMainComponents#10) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JButton(initMainComponents#8) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JButton(initMainComponents#9) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JLabel(ValidatingJTextField#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JTextField(ValidatingJTextField#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new NotEmptyValidator(initMainComponents#4) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2).this$0
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).dataFlavor
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).dragSource
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).draggedIndex
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).dropTarget
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1).errorIcon
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1).textField
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1).validator
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3).errorIcon
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3).textField
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3).validator
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5).errorIcon
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5).textField
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5).validator
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatorChain(ProfileDetailPanel#2) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.addButton
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.delButton
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.editButton
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.ident
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.mainFrame
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.model
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.nicknameModel
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.nicknames
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.realname
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.validator
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new DataFlavor(ReorderableJList#4)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new DefaultListModel(ProfileDetailPanel#1)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new DropTarget(ReorderableJList#3)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new IdentValidator(initMainComponents#6)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JButton(initMainComponents#10)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JButton(initMainComponents#8)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JButton(initMainComponents#9)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JLabel(ValidatingJTextField#1)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JTextField(ValidatingJTextField#1)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new NotEmptyValidator(initMainComponents#4)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatorChain(ProfileDetailPanel#2)
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): java.awt.dnd.DragSource:getDefaultDragSource(...)@99 != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.addButton == &new JButton(initMainComponents#8)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.delButton == &new JButton(initMainComponents#9)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.editButton == &new JButton(initMainComponents#10)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.ident == &new ValidatingJTextField(initMainComponents#5)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.mainFrame == mainFrame
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): init'ed(this.mainFrame)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.model == model
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): init'ed(this.model)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.name == &new ValidatingJTextField(initMainComponents#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.nicknameModel == &new DefaultListModel(ProfileDetailPanel#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.nicknames == &new ReorderableJList(initMainComponents#7)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.realname == &new ValidatingJTextField(initMainComponents#3)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): this.validator == &new ValidatorChain(ProfileDetailPanel#2)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new DataFlavor(ReorderableJList#4) num objects <= 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new DefaultListModel(ProfileDetailPanel#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new DropTarget(ReorderableJList#3) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new IdentValidator(initMainComponents#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JButton(initMainComponents#10) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JButton(initMainComponents#8) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JButton(initMainComponents#9) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JLabel(ValidatingJTextField#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new JTextField(ValidatingJTextField#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new NotEmptyValidator(initMainComponents#4) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatorChain(ProfileDetailPanel#2) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2).__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$ProfileNameValidator
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2).this$0 == this
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2).this$0 != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).__Tag == com/dmdirc/addons/ui_swing/components/reorderablelist/ReorderableJList
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).dataFlavor == One-of{&new DataFlavor(ReorderableJList#4), null}
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).dataFlavor in Addr_Set{null,&new DataFlavor(ReorderableJList#4)}
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).dragSource != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): init'ed(new ReorderableJList(initMainComponents#7).draggedIndex)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ReorderableJList(initMainComponents#7).dropTarget == &new DropTarget(ReorderableJList#3)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1).__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3).__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5).__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1).errorIcon == &new JLabel(ValidatingJTextField#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3).errorIcon == &new JLabel(ValidatingJTextField#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5).errorIcon == &new JLabel(ValidatingJTextField#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1).textField == &new JTextField(ValidatingJTextField#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3).textField == &new JTextField(ValidatingJTextField#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5).textField == &new JTextField(ValidatingJTextField#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#1).validator == &new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#3).validator == &new NotEmptyValidator(initMainComponents#4)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): new ValidatingJTextField(initMainComponents#5).validator == &new IdentValidator(initMainComponents#6)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.config.prefs.validator.FileNameValidator
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JLabel:setVisible
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JTextField:getDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JComponent
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:setLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.text.Document:addDocumentListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JTextField
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.config.prefs.validator.NotEmptyValidator
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.config.prefs.validator.IdentValidator
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JList
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.renderers.ReorderableJListCellRenderer
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setCellRenderer
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setSelectionMode
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.TransferHandler
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:java.awt.datatransfer.DataFlavor
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:java.lang.ClassNotFoundException:getMessage
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.logger.Logger:userError
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setTransferHandler
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:java.awt.dnd.DragSource:getDefaultDragSource
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:java.awt.dnd.DropTarget
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:java.awt.dnd.DragSource:createDefaultDragGestureRecognizer
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setVisibleRowCount
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:addListSelectionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.DefaultListModel:addListDataListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:setLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JTextField:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.DefaultListModel:clear
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:javax.swing.JTextField:setEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setEnabled
        this.mainFrame = mainFrame;

        this.model = model;
        this.nicknameModel = new DefaultListModel();

        validator = new ValidatorChain(new NoDuplicatesInListValidator(
    //#ProfileDetailPanel.java:105: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.validator.NicknameValidator()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.validator.NicknameValidator()
    //#ProfileDetailPanel.java:105: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.validator.ValidatorChain(Validator[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.validator.ValidatorChain(Validator[])
                nicknameModel), new NicknameValidator());
        initMainComponents();
        layoutComponents();

        clearProfile();
    }
    //#ProfileDetailPanel.java:111: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel(ProfileListModel, MainFrame)

    /** Initialises the components in the main panel. */
    private void initMainComponents() {
        name = new ValidatingJTextField(new ProfileNameValidator());
    //#ProfileDetailPanel.java:115: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.initMainComponents()
    //#input(void initMainComponents()): "unable to create data flavor: "._tainted
    //#input(void initMainComponents()): com/dmdirc/addons/ui_swing/components/reorderablelist/ArrayListTransferHandler.com.dmdirc.logger.ErrorLevel.LOW
    //#input(void initMainComponents()): com/dmdirc/addons/ui_swing/components/reorderablelist/ReorderableJList.com.dmdirc.logger.ErrorLevel.LOW
    //#input(void initMainComponents()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void initMainComponents()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(void initMainComponents()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.checkError()V
    //#input(void initMainComponents()): this
    //#input(void initMainComponents()): this.nicknameModel
    //#output(void initMainComponents()): new DataFlavor(ReorderableJList#4) num objects
    //#output(void initMainComponents()): new DropTarget(ReorderableJList#3) num objects
    //#output(void initMainComponents()): new IdentValidator(initMainComponents#6) num objects
    //#output(void initMainComponents()): new JButton(initMainComponents#10) num objects
    //#output(void initMainComponents()): new JButton(initMainComponents#8) num objects
    //#output(void initMainComponents()): new JButton(initMainComponents#9) num objects
    //#output(void initMainComponents()): new JLabel(ValidatingJTextField#1) num objects
    //#output(void initMainComponents()): new JTextField(ValidatingJTextField#1) num objects
    //#output(void initMainComponents()): new NotEmptyValidator(initMainComponents#4) num objects
    //#output(void initMainComponents()): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2) num objects
    //#output(void initMainComponents()): this.name.validator.__Tag
    //#output(void initMainComponents()): this.name.validator.this$0
    //#output(void initMainComponents()): new ReorderableJList(initMainComponents#7) num objects
    //#output(void initMainComponents()): this.nicknames.__Tag
    //#output(void initMainComponents()): this.nicknames.dataFlavor
    //#output(void initMainComponents()): this.nicknames.dragSource
    //#output(void initMainComponents()): this.nicknames.draggedIndex
    //#output(void initMainComponents()): this.nicknames.dropTarget
    //#output(void initMainComponents()): new ValidatingJTextField(initMainComponents#1) num objects
    //#output(void initMainComponents()): this.name.__Tag
    //#output(void initMainComponents()): this.name.errorIcon
    //#output(void initMainComponents()): this.name.textField
    //#output(void initMainComponents()): this.name.validator
    //#output(void initMainComponents()): new ValidatingJTextField(initMainComponents#3) num objects
    //#output(void initMainComponents()): this.realname.__Tag
    //#output(void initMainComponents()): this.realname.errorIcon
    //#output(void initMainComponents()): this.realname.textField
    //#output(void initMainComponents()): this.realname.validator
    //#output(void initMainComponents()): new ValidatingJTextField(initMainComponents#5) num objects
    //#output(void initMainComponents()): this.ident.__Tag
    //#output(void initMainComponents()): this.ident.errorIcon
    //#output(void initMainComponents()): this.ident.textField
    //#output(void initMainComponents()): this.ident.validator
    //#output(void initMainComponents()): this.addButton
    //#output(void initMainComponents()): this.delButton
    //#output(void initMainComponents()): this.editButton
    //#output(void initMainComponents()): this.ident
    //#output(void initMainComponents()): this.name
    //#output(void initMainComponents()): this.nicknames
    //#output(void initMainComponents()): this.realname
    //#new obj(void initMainComponents()): new DataFlavor(ReorderableJList#4)
    //#new obj(void initMainComponents()): new DropTarget(ReorderableJList#3)
    //#new obj(void initMainComponents()): new IdentValidator(initMainComponents#6)
    //#new obj(void initMainComponents()): new JButton(initMainComponents#10)
    //#new obj(void initMainComponents()): new JButton(initMainComponents#8)
    //#new obj(void initMainComponents()): new JButton(initMainComponents#9)
    //#new obj(void initMainComponents()): new JLabel(ValidatingJTextField#1)
    //#new obj(void initMainComponents()): new JTextField(ValidatingJTextField#1)
    //#new obj(void initMainComponents()): new NotEmptyValidator(initMainComponents#4)
    //#new obj(void initMainComponents()): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2)
    //#new obj(void initMainComponents()): new ReorderableJList(initMainComponents#7)
    //#new obj(void initMainComponents()): new ValidatingJTextField(initMainComponents#1)
    //#new obj(void initMainComponents()): new ValidatingJTextField(initMainComponents#3)
    //#new obj(void initMainComponents()): new ValidatingJTextField(initMainComponents#5)
    //#presumption(void initMainComponents()): java.awt.dnd.DragSource:getDefaultDragSource(...)@99 != null
    //#presumption(void initMainComponents()): javax.swing.JList:getModel(...)@118 != null
    //#post(void initMainComponents()): this.addButton == &new JButton(initMainComponents#8)
    //#post(void initMainComponents()): this.delButton == &new JButton(initMainComponents#9)
    //#post(void initMainComponents()): this.editButton == &new JButton(initMainComponents#10)
    //#post(void initMainComponents()): this.ident == &new ValidatingJTextField(initMainComponents#5)
    //#post(void initMainComponents()): this.name == &new ValidatingJTextField(initMainComponents#1)
    //#post(void initMainComponents()): this.nicknames == &new ReorderableJList(initMainComponents#7)
    //#post(void initMainComponents()): this.realname == &new ValidatingJTextField(initMainComponents#3)
    //#post(void initMainComponents()): new DataFlavor(ReorderableJList#4) num objects <= 1
    //#post(void initMainComponents()): new DropTarget(ReorderableJList#3) num objects == 1
    //#post(void initMainComponents()): new IdentValidator(initMainComponents#6) num objects == 1
    //#post(void initMainComponents()): new JButton(initMainComponents#10) num objects == 1
    //#post(void initMainComponents()): new JButton(initMainComponents#8) num objects == 1
    //#post(void initMainComponents()): new JButton(initMainComponents#9) num objects == 1
    //#post(void initMainComponents()): new JLabel(ValidatingJTextField#1) num objects == 1
    //#post(void initMainComponents()): new JTextField(ValidatingJTextField#1) num objects == 1
    //#post(void initMainComponents()): new NotEmptyValidator(initMainComponents#4) num objects == 1
    //#post(void initMainComponents()): new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2) num objects == 1
    //#post(void initMainComponents()): new ReorderableJList(initMainComponents#7) num objects == 1
    //#post(void initMainComponents()): new ValidatingJTextField(initMainComponents#1) num objects == 1
    //#post(void initMainComponents()): new ValidatingJTextField(initMainComponents#3) num objects == 1
    //#post(void initMainComponents()): new ValidatingJTextField(initMainComponents#5) num objects == 1
    //#post(void initMainComponents()): this.name.validator.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$ProfileNameValidator
    //#post(void initMainComponents()): this.name.validator.this$0 == this
    //#post(void initMainComponents()): this.name.validator.this$0 != null
    //#post(void initMainComponents()): this.nicknames.__Tag == com/dmdirc/addons/ui_swing/components/reorderablelist/ReorderableJList
    //#post(void initMainComponents()): this.nicknames.dataFlavor == One-of{&new DataFlavor(ReorderableJList#4), null}
    //#post(void initMainComponents()): this.nicknames.dataFlavor in Addr_Set{null,&new DataFlavor(ReorderableJList#4)}
    //#post(void initMainComponents()): this.nicknames.dragSource != null
    //#post(void initMainComponents()): init'ed(this.nicknames.draggedIndex)
    //#post(void initMainComponents()): this.nicknames.dropTarget == &new DropTarget(ReorderableJList#3)
    //#post(void initMainComponents()): this.name.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#post(void initMainComponents()): this.realname.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#post(void initMainComponents()): this.ident.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#post(void initMainComponents()): this.name.errorIcon == &new JLabel(ValidatingJTextField#1)
    //#post(void initMainComponents()): this.name.textField == &new JTextField(ValidatingJTextField#1)
    //#post(void initMainComponents()): this.name.validator == &new ProfileDetailPanel$ProfileNameValidator(initMainComponents#2)
    //#post(void initMainComponents()): this.realname.errorIcon == &new JLabel(ValidatingJTextField#1)
    //#post(void initMainComponents()): this.realname.textField == &new JTextField(ValidatingJTextField#1)
    //#post(void initMainComponents()): this.realname.validator == &new NotEmptyValidator(initMainComponents#4)
    //#post(void initMainComponents()): this.ident.errorIcon == &new JLabel(ValidatingJTextField#1)
    //#post(void initMainComponents()): this.ident.textField == &new JTextField(ValidatingJTextField#1)
    //#post(void initMainComponents()): this.ident.validator == &new IdentValidator(initMainComponents#6)
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.config.prefs.validator.FileNameValidator
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JLabel:setVisible
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JTextField:getDocument
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JComponent
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void initMainComponents()): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:setLayout
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:add
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.text.Document:addDocumentListener
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JTextField
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JList
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.renderers.ReorderableJListCellRenderer
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setCellRenderer
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setSelectionMode
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.TransferHandler
    //#unanalyzed(void initMainComponents()): Effects-of-calling:java.awt.datatransfer.DataFlavor
    //#unanalyzed(void initMainComponents()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void initMainComponents()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void initMainComponents()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void initMainComponents()): Effects-of-calling:java.lang.ClassNotFoundException:getMessage
    //#unanalyzed(void initMainComponents()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.logger.Logger:userError
    //#unanalyzed(void initMainComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setTransferHandler
    //#unanalyzed(void initMainComponents()): Effects-of-calling:java.awt.dnd.DragSource:getDefaultDragSource
    //#unanalyzed(void initMainComponents()): Effects-of-calling:java.awt.dnd.DropTarget
    //#unanalyzed(void initMainComponents()): Effects-of-calling:java.awt.dnd.DragSource:createDefaultDragGestureRecognizer
    //#unanalyzed(void initMainComponents()): Effects-of-calling:javax.swing.JList:getModel
        realname = new ValidatingJTextField(new NotEmptyValidator());
    //#ProfileDetailPanel.java:116: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.validator.NotEmptyValidator()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void initMainComponents()
    //#    unanalyzed callee: void com.dmdirc.config.prefs.validator.NotEmptyValidator()
        ident = new ValidatingJTextField(new IdentValidator());
    //#ProfileDetailPanel.java:117: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.validator.IdentValidator()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void initMainComponents()
    //#    unanalyzed callee: void com.dmdirc.config.prefs.validator.IdentValidator()
        nicknames = new ReorderableJList(nicknameModel);

        addButton = new JButton("Add");
        delButton = new JButton("Delete");
        editButton = new JButton("Edit");

        nicknames.setVisibleRowCount(4);
    //#ProfileDetailPanel.java:124: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setVisibleRowCount(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void initMainComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setVisibleRowCount(int)

        nicknames.addListSelectionListener(this);
    //#ProfileDetailPanel.java:126: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:addListSelectionListener(ListSelectionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void initMainComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:addListSelectionListener(ListSelectionListener)
        nicknames.getModel().addListDataListener(this);

        addButton.addActionListener(this);
        delButton.addActionListener(this);
        editButton.addActionListener(this);
    }
    //#ProfileDetailPanel.java:132: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.initMainComponents()

    /** Lays out the components in the panel. */
    private void layoutComponents() {
        setLayout(new MigLayout("fillx"));
    //#ProfileDetailPanel.java:136: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.layoutComponents()
    //#ProfileDetailPanel.java:136: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#ProfileDetailPanel.java:136: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:setLayout(LayoutManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:setLayout(LayoutManager)
    //#input(void layoutComponents()): this
    //#input(void layoutComponents()): this.addButton
    //#input(void layoutComponents()): this.delButton
    //#input(void layoutComponents()): this.editButton
    //#input(void layoutComponents()): this.ident
    //#input(void layoutComponents()): this.name
    //#input(void layoutComponents()): this.nicknames
    //#input(void layoutComponents()): this.realname
    //#pre[2] (void layoutComponents()): init'ed(this.addButton)
    //#pre[3] (void layoutComponents()): init'ed(this.delButton)
    //#pre[4] (void layoutComponents()): init'ed(this.editButton)
    //#pre[5] (void layoutComponents()): init'ed(this.ident)
    //#pre[6] (void layoutComponents()): init'ed(this.name)
    //#pre[7] (void layoutComponents()): init'ed(this.nicknames)
    //#pre[8] (void layoutComponents()): init'ed(this.realname)

        add(new JLabel("Name:"));
    //#ProfileDetailPanel.java:138: Warning: method not available - call not analyzed
    //#    call on Component com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: Component com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component)
        add(name, "growx, pushx, wrap");
    //#ProfileDetailPanel.java:139: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)

        add(new JLabel("Nicknames:"));
    //#ProfileDetailPanel.java:141: Warning: method not available - call not analyzed
    //#    call on Component com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: Component com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component)
        add(new JScrollPane(nicknames), "grow, pushx, wrap");
    //#ProfileDetailPanel.java:142: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
        add(addButton, "skip 1, split 3, sg button, growx");
    //#ProfileDetailPanel.java:143: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
        add(editButton, "sg button, growx");
    //#ProfileDetailPanel.java:144: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
        add(delButton, "sg button, growx, wrap");
    //#ProfileDetailPanel.java:145: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)

        add(new JLabel("Realname:"));
    //#ProfileDetailPanel.java:147: Warning: method not available - call not analyzed
    //#    call on Component com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: Component com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component)
        add(realname, "growx, pushx, wrap");
    //#ProfileDetailPanel.java:148: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)

        add(new JLabel("Ident:"));
    //#ProfileDetailPanel.java:150: Warning: method not available - call not analyzed
    //#    call on Component com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: Component com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component)
        add(ident, "growx, pushx, wrap");
    //#ProfileDetailPanel.java:151: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel:add(Component, Object)
    }
    //#ProfileDetailPanel.java:152: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.layoutComponents()

    /**
     * Sets the profile for the detail panel.
     *
     * @param profile new Profile for the detail panel
     */
    public void setProfile(final Profile profile) {
            this.profile = profile;
    //#ProfileDetailPanel.java:160: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.setProfile(Profile)
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.checkError()V
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.setEnabled(Z)V
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[others]
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getIdent()Ljava/lang/String;
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getNicknames()Ljava/util/List;
    //#input(void setProfile(Profile)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getRealname()Ljava/lang/String;
    //#input(void setProfile(Profile)): profile
    //#input(void setProfile(Profile)): profile.__Tag
    //#input(void setProfile(Profile)): profile.ident
    //#input(void setProfile(Profile)): profile.name
    //#input(void setProfile(Profile)): profile.nicknames
    //#input(void setProfile(Profile)): profile.realname
    //#input(void setProfile(Profile)): this
    //#input(void setProfile(Profile)): this.addButton
    //#input(void setProfile(Profile)): this.delButton
    //#input(void setProfile(Profile)): this.editButton
    //#input(void setProfile(Profile)): this.ident
    //#input(void setProfile(Profile)): this.ident.__Tag
    //#input(void setProfile(Profile)): this.ident.errorIcon
    //#input(void setProfile(Profile)): this.ident.textField
    //#input(void setProfile(Profile)): this.ident.validator
    //#input(void setProfile(Profile)): this.name
    //#input(void setProfile(Profile)): this.name.__Tag
    //#input(void setProfile(Profile)): this.name.errorIcon
    //#input(void setProfile(Profile)): this.name.textField
    //#input(void setProfile(Profile)): this.name.validator
    //#input(void setProfile(Profile)): this.nicknames
    //#input(void setProfile(Profile)): this.profile.__Tag
    //#input(void setProfile(Profile)): this.realname
    //#input(void setProfile(Profile)): this.realname.__Tag
    //#input(void setProfile(Profile)): this.realname.errorIcon
    //#input(void setProfile(Profile)): this.realname.textField
    //#input(void setProfile(Profile)): this.realname.validator
    //#output(void setProfile(Profile)): this.profile
    //#pre[2] (void setProfile(Profile)): (soft) profile.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#pre[3] (void setProfile(Profile)): (soft) init'ed(profile.ident)
    //#pre[4] (void setProfile(Profile)): (soft) init'ed(profile.name)
    //#pre[5] (void setProfile(Profile)): (soft) profile.nicknames != null
    //#pre[6] (void setProfile(Profile)): (soft) init'ed(profile.realname)
    //#pre[8] (void setProfile(Profile)): (soft) this.addButton != null
    //#pre[9] (void setProfile(Profile)): (soft) this.delButton != null
    //#pre[10] (void setProfile(Profile)): (soft) this.editButton != null
    //#pre[11] (void setProfile(Profile)): (soft) this.ident != null
    //#pre[12] (void setProfile(Profile)): (soft) this.ident.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[13] (void setProfile(Profile)): (soft) this.ident.errorIcon != null
    //#pre[14] (void setProfile(Profile)): (soft) this.ident.textField != null
    //#pre[15] (void setProfile(Profile)): (soft) this.ident.validator != null
    //#pre[16] (void setProfile(Profile)): (soft) this.name != null
    //#pre[17] (void setProfile(Profile)): (soft) this.name.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[18] (void setProfile(Profile)): (soft) this.name.errorIcon != null
    //#pre[19] (void setProfile(Profile)): (soft) this.name.textField != null
    //#pre[20] (void setProfile(Profile)): (soft) this.name.validator != null
    //#pre[21] (void setProfile(Profile)): (soft) this.nicknames != null
    //#pre[27] (void setProfile(Profile)): (soft) this.realname != null
    //#pre[28] (void setProfile(Profile)): (soft) this.realname.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[29] (void setProfile(Profile)): (soft) this.realname.errorIcon != null
    //#pre[30] (void setProfile(Profile)): (soft) this.realname.textField != null
    //#pre[31] (void setProfile(Profile)): (soft) this.realname.validator != null
    //#post(void setProfile(Profile)): this.profile == profile
    //#post(void setProfile(Profile)): init'ed(this.profile)
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.JLabel:setVisible
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:clearProfile
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.JTextField:setText
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.DefaultListModel:clear
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.DefaultListModel:addElement
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:javax.swing.JTextField:setEnabled
    //#unanalyzed(void setProfile(Profile)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setEnabled
            updateProfile();
    }
    //#ProfileDetailPanel.java:162: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.setProfile(Profile)

    /** Updates this detail panel. */
    public void updateProfile() {
        if (profile == null) {
    //#ProfileDetailPanel.java:166: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.updateProfile()
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.checkError()V
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.setEnabled(Z)V
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[others]
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getIdent()Ljava/lang/String;
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getNicknames()Ljava/util/List;
    //#input(void updateProfile()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getRealname()Ljava/lang/String;
    //#input(void updateProfile()): this
    //#input(void updateProfile()): this.addButton
    //#input(void updateProfile()): this.delButton
    //#input(void updateProfile()): this.editButton
    //#input(void updateProfile()): this.ident
    //#input(void updateProfile()): this.ident.__Tag
    //#input(void updateProfile()): this.ident.errorIcon
    //#input(void updateProfile()): this.ident.textField
    //#input(void updateProfile()): this.ident.validator
    //#input(void updateProfile()): this.name
    //#input(void updateProfile()): this.name.__Tag
    //#input(void updateProfile()): this.name.errorIcon
    //#input(void updateProfile()): this.name.textField
    //#input(void updateProfile()): this.name.validator
    //#input(void updateProfile()): this.nicknames
    //#input(void updateProfile()): this.profile
    //#input(void updateProfile()): this.profile.__Tag
    //#input(void updateProfile()): this.profile.ident
    //#input(void updateProfile()): this.profile.name
    //#input(void updateProfile()): this.profile.nicknames
    //#input(void updateProfile()): this.profile.realname
    //#input(void updateProfile()): this.realname
    //#input(void updateProfile()): this.realname.__Tag
    //#input(void updateProfile()): this.realname.errorIcon
    //#input(void updateProfile()): this.realname.textField
    //#input(void updateProfile()): this.realname.validator
    //#pre[16] (void updateProfile()): init'ed(this.profile)
    //#pre[2] (void updateProfile()): (soft) this.addButton != null
    //#pre[3] (void updateProfile()): (soft) this.delButton != null
    //#pre[4] (void updateProfile()): (soft) this.editButton != null
    //#pre[5] (void updateProfile()): (soft) this.ident != null
    //#pre[6] (void updateProfile()): (soft) this.ident.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[7] (void updateProfile()): (soft) this.ident.errorIcon != null
    //#pre[8] (void updateProfile()): (soft) this.ident.textField != null
    //#pre[9] (void updateProfile()): (soft) this.ident.validator != null
    //#pre[10] (void updateProfile()): (soft) this.name != null
    //#pre[11] (void updateProfile()): (soft) this.name.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[12] (void updateProfile()): (soft) this.name.errorIcon != null
    //#pre[13] (void updateProfile()): (soft) this.name.textField != null
    //#pre[14] (void updateProfile()): (soft) this.name.validator != null
    //#pre[15] (void updateProfile()): (soft) this.nicknames != null
    //#pre[17] (void updateProfile()): (soft) this.profile.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#pre[18] (void updateProfile()): (soft) init'ed(this.profile.ident)
    //#pre[19] (void updateProfile()): (soft) init'ed(this.profile.name)
    //#pre[20] (void updateProfile()): (soft) this.profile.nicknames != null
    //#pre[21] (void updateProfile()): (soft) init'ed(this.profile.realname)
    //#pre[22] (void updateProfile()): (soft) this.realname != null
    //#pre[23] (void updateProfile()): (soft) this.realname.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[24] (void updateProfile()): (soft) this.realname.errorIcon != null
    //#pre[25] (void updateProfile()): (soft) this.realname.textField != null
    //#pre[26] (void updateProfile()): (soft) this.realname.validator != null
    //#presumption(void updateProfile()): javax.swing.JList:getModel(...)@118 != null
    //#presumption(void updateProfile()): javax.swing.JList:getModel(...)@118 != null
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void updateProfile()): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void updateProfile()): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void updateProfile()): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void updateProfile()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.JLabel:setVisible
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.JTextField:setText
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.DefaultListModel:clear
    //#unanalyzed(void updateProfile()): Effects-of-calling:javax.swing.JTextField:setEnabled
    //#unanalyzed(void updateProfile()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setEnabled
    //#test_vector(void updateProfile()): this.profile: Inverse{null}, Addr_Set{null}
    //#test_vector(void updateProfile()): java.util.Iterator:hasNext(...)@176: {0}, {1}
            clearProfile();
            return;
        }

        name.setText(profile.getName());
        realname.setText(profile.getRealname());
        ident.setText(profile.getIdent());

        nicknames.getModel().clear();
        for (String nickname : profile.getNicknames()) {
            nicknames.getModel().addElement(nickname);
        }

        name.setEnabled(true);
        realname.setEnabled(true);
        ident.setEnabled(true);
        nicknames.setEnabled(true);
    //#ProfileDetailPanel.java:183: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setEnabled(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void updateProfile()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setEnabled(bool)
        addButton.setEnabled(true);
    }
    //#ProfileDetailPanel.java:185: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.updateProfile()

    /** Clears this detail panel. */
    public void clearProfile() {
        name.setText("");
    //#ProfileDetailPanel.java:189: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.clearProfile()
    //#input(void clearProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void clearProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(void clearProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.checkError()V
    //#input(void clearProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.setEnabled(Z)V
    //#input(void clearProfile()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void clearProfile()): this
    //#input(void clearProfile()): this.addButton
    //#input(void clearProfile()): this.delButton
    //#input(void clearProfile()): this.editButton
    //#input(void clearProfile()): this.ident
    //#input(void clearProfile()): this.ident.__Tag
    //#input(void clearProfile()): this.ident.errorIcon
    //#input(void clearProfile()): this.ident.textField
    //#input(void clearProfile()): this.ident.validator
    //#input(void clearProfile()): this.name
    //#input(void clearProfile()): this.name.__Tag
    //#input(void clearProfile()): this.name.errorIcon
    //#input(void clearProfile()): this.name.textField
    //#input(void clearProfile()): this.name.validator
    //#input(void clearProfile()): this.nicknames
    //#input(void clearProfile()): this.realname
    //#input(void clearProfile()): this.realname.__Tag
    //#input(void clearProfile()): this.realname.errorIcon
    //#input(void clearProfile()): this.realname.textField
    //#input(void clearProfile()): this.realname.validator
    //#pre[2] (void clearProfile()): this.addButton != null
    //#pre[3] (void clearProfile()): this.delButton != null
    //#pre[4] (void clearProfile()): this.editButton != null
    //#pre[5] (void clearProfile()): this.ident != null
    //#pre[6] (void clearProfile()): this.ident.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[7] (void clearProfile()): this.ident.errorIcon != null
    //#pre[8] (void clearProfile()): this.ident.textField != null
    //#pre[10] (void clearProfile()): this.name != null
    //#pre[11] (void clearProfile()): this.name.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[12] (void clearProfile()): this.name.errorIcon != null
    //#pre[13] (void clearProfile()): this.name.textField != null
    //#pre[15] (void clearProfile()): this.nicknames != null
    //#pre[16] (void clearProfile()): this.realname != null
    //#pre[17] (void clearProfile()): this.realname.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[18] (void clearProfile()): this.realname.errorIcon != null
    //#pre[19] (void clearProfile()): this.realname.textField != null
    //#pre[9] (void clearProfile()): (soft) this.ident.validator != null
    //#pre[14] (void clearProfile()): (soft) this.name.validator != null
    //#pre[20] (void clearProfile()): (soft) this.realname.validator != null
    //#presumption(void clearProfile()): javax.swing.JList:getModel(...)@118 != null
    //#unanalyzed(void clearProfile()): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void clearProfile()): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void clearProfile()): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void clearProfile()): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void clearProfile()): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void clearProfile()): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void clearProfile()): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void clearProfile()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void clearProfile()): Effects-of-calling:javax.swing.JLabel:setVisible
    //#unanalyzed(void clearProfile()): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void clearProfile()): Effects-of-calling:javax.swing.JTextField:setText
    //#unanalyzed(void clearProfile()): Effects-of-calling:javax.swing.JTextField:setEnabled
        realname.setText("");
        ident.setText("");
        nicknames.getModel().clear();

        name.setEnabled(false);
        realname.setEnabled(false);
        ident.setEnabled(false);
        nicknames.setEnabled(false);
    //#ProfileDetailPanel.java:197: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setEnabled(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void clearProfile()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:setEnabled(bool)
        addButton.setEnabled(false);
        delButton.setEnabled(false);
        editButton.setEnabled(false);
    }
    //#ProfileDetailPanel.java:201: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.clearProfile()

    /** Saves the detail panels details to the profile. */
    public void save() {
        if (profile == null) {
    //#ProfileDetailPanel.java:205: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.save()
    //#input(void save()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void save()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(void save()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.getText()Ljava/lang/String;
    //#input(void save()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void save()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[others]
    //#input(void save()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.addNickname(Ljava/lang/String;)V
    //#input(void save()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.setIdent(Ljava/lang/String;)V
    //#input(void save()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.setModified(Z)V
    //#input(void save()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.setName(Ljava/lang/String;)V
    //#input(void save()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.setNicknames(Ljava/util/List;)V
    //#input(void save()): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.setRealname(Ljava/lang/String;)V
    //#input(void save()): this
    //#input(void save()): this.ident
    //#input(void save()): this.ident.__Tag
    //#input(void save()): this.ident.textField
    //#input(void save()): this.name
    //#input(void save()): this.name.__Tag
    //#input(void save()): this.name.textField
    //#input(void save()): this.nicknames
    //#input(void save()): this.profile
    //#input(void save()): this.profile.__Tag
    //#input(void save()): this.profile.ident
    //#input(void save()): this.profile.name
    //#input(void save()): this.profile.nicknames
    //#input(void save()): this.profile.realname
    //#input(void save()): this.realname
    //#input(void save()): this.realname.__Tag
    //#input(void save()): this.realname.textField
    //#output(void save()): new ArrayList(save#1) num objects
    //#output(void save()): this.profile.ident
    //#output(void save()): this.profile.modified
    //#output(void save()): this.profile.name
    //#output(void save()): this.profile.nicknames
    //#output(void save()): this.profile.oldName
    //#output(void save()): this.profile.realname
    //#new obj(void save()): new ArrayList(save#1)
    //#pre[15] (void save()): init'ed(this.profile)
    //#pre[1] (void save()): (soft) init'ed(this.profile.ident)
    //#pre[3] (void save()): (soft) this.profile.name != null
    //#pre[4] (void save()): (soft) this.profile.nicknames != null
    //#pre[6] (void save()): (soft) this.profile.realname != null
    //#pre[8] (void save()): (soft) this.ident != null
    //#pre[9] (void save()): (soft) this.ident.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[10] (void save()): (soft) this.ident.textField != null
    //#pre[11] (void save()): (soft) this.name != null
    //#pre[12] (void save()): (soft) this.name.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[13] (void save()): (soft) this.name.textField != null
    //#pre[14] (void save()): (soft) this.nicknames != null
    //#pre[16] (void save()): (soft) this.profile.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#pre[17] (void save()): (soft) this.realname != null
    //#pre[18] (void save()): (soft) this.realname.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[19] (void save()): (soft) this.realname.textField != null
    //#presumption(void save()): javax.swing.DefaultListModel:elements(...)@213 != null
    //#presumption(void save()): javax.swing.JList:getModel(...)@118 != null
    //#post(void save()): init'ed(this.profile.ident)
    //#post(void save()): possibly_updated(this.profile.modified)
    //#post(void save()): init'ed(this.profile.name)
    //#post(void save()): this.profile.nicknames == One-of{old this.profile.nicknames, &new ArrayList(save#1)}
    //#post(void save()): this.profile.nicknames != null
    //#post(void save()): this.profile.oldName == One-of{old this.profile.oldName, old this.profile.name}
    //#post(void save()): init'ed(this.profile.realname)
    //#post(void save()): new ArrayList(save#1) num objects <= 1
    //#unanalyzed(void save()): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void save()): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void save()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void save()): Effects-of-calling:java.lang.Object:equals
    //#unanalyzed(void save()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(void save()): Effects-of-calling:java.util.List:add
    //#test_vector(void save()): this.profile: Inverse{null}, Addr_Set{null}
    //#test_vector(void save()): java.util.Enumeration:hasMoreElements(...)@215: {0}, {1}
            return;
        }

        profile.setName(name.getText());
        profile.setRealname(realname.getText());
        profile.setIdent(ident.getText());
        profile.setNicknames(new ArrayList<String>());
        final Enumeration<?> enumeration =
                nicknames.getModel().elements();
        while (enumeration.hasMoreElements()) {
            profile.addNickname((String) enumeration.nextElement());
        }
    }
    //#ProfileDetailPanel.java:218: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.save()

    /**
     * Validates the current details.
     *
     * @return Validation Result
     */
    public boolean validateDetails() {
        if (!ident.validateText() || !realname.validateText() ||
    //#ProfileDetailPanel.java:226: method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.validateDetails()
    //#input(bool validateDetails()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(bool validateDetails()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(bool validateDetails()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.getText()Ljava/lang/String;
    //#input(bool validateDetails()): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.validateText()Z
    //#input(bool validateDetails()): this
    //#input(bool validateDetails()): this.ident
    //#input(bool validateDetails()): this.ident.__Tag
    //#input(bool validateDetails()): this.ident.textField
    //#input(bool validateDetails()): this.ident.validator
    //#input(bool validateDetails()): this.name
    //#input(bool validateDetails()): this.name.__Tag
    //#input(bool validateDetails()): this.name.textField
    //#input(bool validateDetails()): this.name.validator
    //#input(bool validateDetails()): this.nicknames
    //#input(bool validateDetails()): this.realname
    //#input(bool validateDetails()): this.realname.__Tag
    //#input(bool validateDetails()): this.realname.textField
    //#input(bool validateDetails()): this.realname.validator
    //#output(bool validateDetails()): return_value
    //#pre[2] (bool validateDetails()): this.ident != null
    //#pre[4] (bool validateDetails()): this.ident.textField != null
    //#pre[3] (bool validateDetails()): (soft) this.ident.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[5] (bool validateDetails()): (soft) this.ident.validator != null
    //#pre[6] (bool validateDetails()): (soft) this.name != null
    //#pre[7] (bool validateDetails()): (soft) this.name.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[8] (bool validateDetails()): (soft) this.name.textField != null
    //#pre[9] (bool validateDetails()): (soft) this.name.validator != null
    //#pre[10] (bool validateDetails()): (soft) this.nicknames != null
    //#pre[11] (bool validateDetails()): (soft) this.realname != null
    //#pre[12] (bool validateDetails()): (soft) this.realname.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[13] (bool validateDetails()): (soft) this.realname.textField != null
    //#pre[14] (bool validateDetails()): (soft) this.realname.validator != null
    //#presumption(bool validateDetails()): javax.swing.JList:getModel(...)@118 != null
    //#post(bool validateDetails()): init'ed(return_value)
    //#unanalyzed(bool validateDetails()): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(bool validateDetails()): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(bool validateDetails()): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(bool validateDetails()): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(bool validateDetails()): Effects-of-calling:javax.swing.JList:getModel
    //#test_vector(bool validateDetails()): javax.swing.DefaultListModel:getSize(...)@226: {1..4_294_967_295}, {-2_147_483_648..0}
                !name.validateText() || nicknames.getModel().getSize() <= 0) {
            return false;
        }
        return true;
    //#ProfileDetailPanel.java:230: end of method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.validateDetails()
    }

    /** 
     * {@inheritDoc}
     * 
     * @param e Action event
     */
    @Override
    public void actionPerformed(final ActionEvent e) {
        if (e.getSource() == addButton) {
    //#ProfileDetailPanel.java:240: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel.__Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel.__Dispatch_Table.getSize()I
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileManagerDialog.__Class_Obj.__Lock
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileManagerDialog.java.awt.Dialog$ModalityType.MODELESS
    //#input(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileManagerDialog.me
    //#input(void actionPerformed(ActionEvent)): e
    //#input(void actionPerformed(ActionEvent)): java.awt.Dialog$ModalityType.DOCUMENT_MODAL
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.addButton
    //#input(void actionPerformed(ActionEvent)): this.delButton
    //#input(void actionPerformed(ActionEvent)): this.editButton
    //#input(void actionPerformed(ActionEvent)): this.mainFrame
    //#input(void actionPerformed(ActionEvent)): this.nicknames
    //#input(void actionPerformed(ActionEvent)): this.validator
    //#output(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileManagerDialog.me
    //#output(void actionPerformed(ActionEvent)): new ArrayList(ProfileManagerDialog#1) num objects
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1) num objects
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).__Tag
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).addButton
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).deleteButton
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).deletedProfiles
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).details
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).infoLabel
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).mainFrame
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).model
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).profileList
    //#output(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1).selectedIndex
    //#new obj(void actionPerformed(ActionEvent)): new ArrayList(ProfileManagerDialog#1)
    //#new obj(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1)
    //#pre[1] (void actionPerformed(ActionEvent)): e != null
    //#pre[4] (void actionPerformed(ActionEvent)): init'ed(this.addButton)
    //#pre[2] (void actionPerformed(ActionEvent)): (soft) init'ed(com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileManagerDialog.me)
    //#pre[5] (void actionPerformed(ActionEvent)): (soft) init'ed(this.delButton)
    //#pre[6] (void actionPerformed(ActionEvent)): (soft) init'ed(this.editButton)
    //#pre[7] (void actionPerformed(ActionEvent)): (soft) init'ed(this.mainFrame)
    //#pre[8] (void actionPerformed(ActionEvent)): (soft) this.nicknames != null
    //#presumption(void actionPerformed(ActionEvent)): init'ed(java.awt.Dialog$ModalityType.DOCUMENT_MODAL)
    //#presumption(void actionPerformed(ActionEvent)): javax.swing.JList:getModel(...)@118 != null
    //#post(void actionPerformed(ActionEvent)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileManagerDialog.me == One-of{old com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileManagerDialog.me, &new ProfileManagerDialog(getProfileManagerDialog#1)}
    //#post(void actionPerformed(ActionEvent)): init'ed(com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileManagerDialog.me)
    //#post(void actionPerformed(ActionEvent)): new ArrayList(ProfileManagerDialog#1) num objects <= 1
    //#post(void actionPerformed(ActionEvent)): new ProfileManagerDialog(getProfileManagerDialog#1) num objects <= 1
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).__Tag)
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).addButton)
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).deleteButton)
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).deletedProfiles)
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).details)
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).infoLabel)
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).mainFrame)
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).model)
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).profileList)
    //#post(void actionPerformed(ActionEvent)): init'ed(new ProfileManagerDialog(getProfileManagerDialog#1).selectedIndex)
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.StandardInputDialog
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileManagerDialog:getContentPane
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.awt.Container:setLayout
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileManagerDialog:getLeftButton
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileManagerDialog:getRightButton
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileManagerDialog:pack
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileManagerDialog:getOkButton
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileManagerDialog:getCancelButton
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JList:addListSelectionListener
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JList:setSelectedIndex
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.StandardDialog
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:initComponents
    //#test_vector(void actionPerformed(ActionEvent)): javax.swing.JOptionPane:showConfirmDialog(...)@294: {-2_147_483_648..-1, 1..4_294_967_295}, {0}
            new StandardInputDialog(ProfileManagerDialog.getProfileManagerDialog(mainFrame),
    //#ProfileDetailPanel.java:241: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1:display()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1:display()
                    ModalityType.DOCUMENT_MODAL, "New Nickname",
                    "Please enter the new nickname", validator) {
    //#ProfileDetailPanel.java:243: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)
    //#ProfileDetailPanel.java:243: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.StandardInputDialog(Window, Dialog$ModalityType, String, String, Validator)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.StandardInputDialog(Window, Dialog$ModalityType, String, String, Validator)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): this
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x0
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x2
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x3
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x4
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): init'ed(this.this$0)
    //#ProfileDetailPanel.java:243: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)

                /**
                 * 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;

                /** {@inheritDoc} */
                @Override
                public boolean save() {
                    nicknames.getModel().addElement(getText());
    //#ProfileDetailPanel.java:255: method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1.save()
    //#ProfileDetailPanel.java:255: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1:getText()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1
    //#    method: bool save()
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1:getText()
    //#input(bool save()): this
    //#input(bool save()): this.this$0
    //#input(bool save()): this.this$0.nicknames
    //#output(bool save()): return_value
    //#pre[2] (bool save()): this.this$0 != null
    //#pre[3] (bool save()): this.nicknames != null
    //#presumption(bool save()): javax.swing.JList:getModel(...)@118 != null
    //#post(bool save()): return_value == 1
    //#unanalyzed(bool save()): Effects-of-calling:javax.swing.JList:getModel
                    return true;
    //#ProfileDetailPanel.java:256: end of method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1.save()
                }

                /** {@inheritDoc} */
                @Override
                public void cancelled() {
                //Ignore
                }
    //#ProfileDetailPanel.java:263: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1.cancelled()
    //#ProfileDetailPanel.java:263: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1.cancelled()
            }.display();
        } else if (e.getSource() == editButton) {
            final StandardInputDialog dialog = new StandardInputDialog(
    //#ProfileDetailPanel.java:266: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.validator.NicknameValidator()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.validator.NicknameValidator()
                    ProfileManagerDialog.getProfileManagerDialog(mainFrame),
                    ModalityType.DOCUMENT_MODAL, "Edit Nickname",
                    "Please enter the new nickname", new NicknameValidator()) {
    //#ProfileDetailPanel.java:269: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)
    //#ProfileDetailPanel.java:269: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.StandardInputDialog(Window, Dialog$ModalityType, String, String, Validator)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.StandardInputDialog(Window, Dialog$ModalityType, String, String, Validator)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): this
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x0
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x2
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x3
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): x4
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)): init'ed(this.this$0)
    //#ProfileDetailPanel.java:269: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2(ProfileDetailPanel, Window, Dialog$ModalityType, String, String, Validator)

                /**
                 * 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;

                /** {@inheritDoc} */
                @Override
                public boolean save() {
                    nicknames.getModel().setElementAt(
    //#ProfileDetailPanel.java:281: method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2.save()
    //#ProfileDetailPanel.java:281: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2:getText()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2
    //#    method: bool save()
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2:getText()
    //#ProfileDetailPanel.java:281: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:getSelectedIndex()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2
    //#    method: bool save()
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:getSelectedIndex()
    //#input(bool save()): this
    //#input(bool save()): this.this$0
    //#input(bool save()): this.this$0.nicknames
    //#output(bool save()): return_value
    //#pre[2] (bool save()): this.this$0 != null
    //#pre[3] (bool save()): this.nicknames != null
    //#presumption(bool save()): javax.swing.JList:getModel(...)@118 != null
    //#post(bool save()): return_value == 1
    //#unanalyzed(bool save()): Effects-of-calling:javax.swing.JList:getModel
                            getText(), nicknames.getSelectedIndex());
                    return true;
    //#ProfileDetailPanel.java:283: end of method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2.save()
                }

                /** {@inheritDoc} */
                @Override
                public void cancelled() {
                //Ignore
                }
    //#ProfileDetailPanel.java:290: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2.cancelled()
    //#ProfileDetailPanel.java:290: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2.cancelled()
            };
            dialog.setText((String) nicknames.getSelectedValue());
    //#ProfileDetailPanel.java:292: Warning: method not available - call not analyzed
    //#    call on Object com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:getSelectedValue()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: Object com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:getSelectedValue()
    //#ProfileDetailPanel.java:292: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.StandardInputDialog:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.StandardInputDialog:setText(String)
            dialog.display();
    //#ProfileDetailPanel.java:293: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.StandardInputDialog:display()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.StandardInputDialog:display()
        } else if (e.getSource() == delButton && JOptionPane.showConfirmDialog(this,
                "Are you sure you want to delete this nickname?",
                "Delete Confirmaton", JOptionPane.YES_NO_OPTION) ==
                JOptionPane.YES_OPTION) {
            nicknames.getModel().removeElementAt(nicknames.getSelectedIndex());
    //#ProfileDetailPanel.java:298: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:getSelectedIndex()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:getSelectedIndex()
        }
    }
    //#ProfileDetailPanel.java:300: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.actionPerformed(ActionEvent)

    /** {@inheritDoc} */
    @Override
    public void valueChanged(final ListSelectionEvent e) {
        if (!e.getValueIsAdjusting() && nicknames.getSelectedIndex() == -1) {
    //#ProfileDetailPanel.java:305: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.valueChanged(ListSelectionEvent)
    //#ProfileDetailPanel.java:305: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:getSelectedIndex()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
    //#    method: void valueChanged(ListSelectionEvent)
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:getSelectedIndex()
    //#input(void valueChanged(ListSelectionEvent)): e
    //#input(void valueChanged(ListSelectionEvent)): this
    //#input(void valueChanged(ListSelectionEvent)): this.delButton
    //#input(void valueChanged(ListSelectionEvent)): this.editButton
    //#input(void valueChanged(ListSelectionEvent)): this.nicknames
    //#pre[1] (void valueChanged(ListSelectionEvent)): e != null
    //#pre[3] (void valueChanged(ListSelectionEvent)): this.delButton != null
    //#pre[4] (void valueChanged(ListSelectionEvent)): this.editButton != null
    //#pre[5] (void valueChanged(ListSelectionEvent)): (soft) this.nicknames != null
    //#test_vector(void valueChanged(ListSelectionEvent)): com.dmdirc.addons.ui_swing.components.reorderablelist.ReorderableJList:getSelectedIndex(...)@305: {-2_147_483_648..-2, 0..4_294_967_295}, {-1}
    //#test_vector(void valueChanged(ListSelectionEvent)): javax.swing.event.ListSelectionEvent:getValueIsAdjusting(...)@305: {1}, {0}
            editButton.setEnabled(false);
            delButton.setEnabled(false);
        } else {
            editButton.setEnabled(true);
            delButton.setEnabled(true);
        }
    }
    //#ProfileDetailPanel.java:312: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.valueChanged(ListSelectionEvent)

    /** {@inheritDoc} */
    @Override
    public void intervalAdded(final ListDataEvent e) {
        validateDetails();
    //#ProfileDetailPanel.java:317: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.intervalAdded(ListDataEvent)
    //#input(void intervalAdded(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void intervalAdded(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(void intervalAdded(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.getText()Ljava/lang/String;
    //#input(void intervalAdded(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.validateText()Z
    //#input(void intervalAdded(ListDataEvent)): this
    //#input(void intervalAdded(ListDataEvent)): this.ident
    //#input(void intervalAdded(ListDataEvent)): this.ident.__Tag
    //#input(void intervalAdded(ListDataEvent)): this.ident.textField
    //#input(void intervalAdded(ListDataEvent)): this.ident.validator
    //#input(void intervalAdded(ListDataEvent)): this.name
    //#input(void intervalAdded(ListDataEvent)): this.name.__Tag
    //#input(void intervalAdded(ListDataEvent)): this.name.textField
    //#input(void intervalAdded(ListDataEvent)): this.name.validator
    //#input(void intervalAdded(ListDataEvent)): this.nicknames
    //#input(void intervalAdded(ListDataEvent)): this.realname
    //#input(void intervalAdded(ListDataEvent)): this.realname.__Tag
    //#input(void intervalAdded(ListDataEvent)): this.realname.textField
    //#input(void intervalAdded(ListDataEvent)): this.realname.validator
    //#pre[2] (void intervalAdded(ListDataEvent)): this.ident != null
    //#pre[4] (void intervalAdded(ListDataEvent)): this.ident.textField != null
    //#pre[3] (void intervalAdded(ListDataEvent)): (soft) this.ident.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[5] (void intervalAdded(ListDataEvent)): (soft) this.ident.validator != null
    //#pre[6] (void intervalAdded(ListDataEvent)): (soft) this.name != null
    //#pre[7] (void intervalAdded(ListDataEvent)): (soft) this.name.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[8] (void intervalAdded(ListDataEvent)): (soft) this.name.textField != null
    //#pre[9] (void intervalAdded(ListDataEvent)): (soft) this.name.validator != null
    //#pre[10] (void intervalAdded(ListDataEvent)): (soft) this.nicknames != null
    //#pre[11] (void intervalAdded(ListDataEvent)): (soft) this.realname != null
    //#pre[12] (void intervalAdded(ListDataEvent)): (soft) this.realname.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[13] (void intervalAdded(ListDataEvent)): (soft) this.realname.textField != null
    //#pre[14] (void intervalAdded(ListDataEvent)): (soft) this.realname.validator != null
    //#unanalyzed(void intervalAdded(ListDataEvent)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void intervalAdded(ListDataEvent)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void intervalAdded(ListDataEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void intervalAdded(ListDataEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void intervalAdded(ListDataEvent)): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void intervalAdded(ListDataEvent)): Effects-of-calling:javax.swing.DefaultListModel:getSize
    }
    //#ProfileDetailPanel.java:318: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.intervalAdded(ListDataEvent)

    /** {@inheritDoc} */
    @Override
    public void intervalRemoved(final ListDataEvent e) {
        validateDetails();
    //#ProfileDetailPanel.java:323: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.intervalRemoved(ListDataEvent)
    //#input(void intervalRemoved(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void intervalRemoved(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(void intervalRemoved(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.getText()Ljava/lang/String;
    //#input(void intervalRemoved(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.validateText()Z
    //#input(void intervalRemoved(ListDataEvent)): this
    //#input(void intervalRemoved(ListDataEvent)): this.ident
    //#input(void intervalRemoved(ListDataEvent)): this.ident.__Tag
    //#input(void intervalRemoved(ListDataEvent)): this.ident.textField
    //#input(void intervalRemoved(ListDataEvent)): this.ident.validator
    //#input(void intervalRemoved(ListDataEvent)): this.name
    //#input(void intervalRemoved(ListDataEvent)): this.name.__Tag
    //#input(void intervalRemoved(ListDataEvent)): this.name.textField
    //#input(void intervalRemoved(ListDataEvent)): this.name.validator
    //#input(void intervalRemoved(ListDataEvent)): this.nicknames
    //#input(void intervalRemoved(ListDataEvent)): this.realname
    //#input(void intervalRemoved(ListDataEvent)): this.realname.__Tag
    //#input(void intervalRemoved(ListDataEvent)): this.realname.textField
    //#input(void intervalRemoved(ListDataEvent)): this.realname.validator
    //#pre[2] (void intervalRemoved(ListDataEvent)): this.ident != null
    //#pre[4] (void intervalRemoved(ListDataEvent)): this.ident.textField != null
    //#pre[3] (void intervalRemoved(ListDataEvent)): (soft) this.ident.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[5] (void intervalRemoved(ListDataEvent)): (soft) this.ident.validator != null
    //#pre[6] (void intervalRemoved(ListDataEvent)): (soft) this.name != null
    //#pre[7] (void intervalRemoved(ListDataEvent)): (soft) this.name.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[8] (void intervalRemoved(ListDataEvent)): (soft) this.name.textField != null
    //#pre[9] (void intervalRemoved(ListDataEvent)): (soft) this.name.validator != null
    //#pre[10] (void intervalRemoved(ListDataEvent)): (soft) this.nicknames != null
    //#pre[11] (void intervalRemoved(ListDataEvent)): (soft) this.realname != null
    //#pre[12] (void intervalRemoved(ListDataEvent)): (soft) this.realname.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[13] (void intervalRemoved(ListDataEvent)): (soft) this.realname.textField != null
    //#pre[14] (void intervalRemoved(ListDataEvent)): (soft) this.realname.validator != null
    //#unanalyzed(void intervalRemoved(ListDataEvent)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void intervalRemoved(ListDataEvent)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void intervalRemoved(ListDataEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void intervalRemoved(ListDataEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void intervalRemoved(ListDataEvent)): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void intervalRemoved(ListDataEvent)): Effects-of-calling:javax.swing.DefaultListModel:getSize
    }
    //#ProfileDetailPanel.java:324: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.intervalRemoved(ListDataEvent)

    /** {@inheritDoc} */
    @Override
    public void contentsChanged(final ListDataEvent e) {
        validateDetails();
    //#ProfileDetailPanel.java:329: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.contentsChanged(ListDataEvent)
    //#input(void contentsChanged(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void contentsChanged(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Descendant_Table[others]
    //#input(void contentsChanged(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.getText()Ljava/lang/String;
    //#input(void contentsChanged(ListDataEvent)): com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField.__Dispatch_Table.validateText()Z
    //#input(void contentsChanged(ListDataEvent)): this
    //#input(void contentsChanged(ListDataEvent)): this.ident
    //#input(void contentsChanged(ListDataEvent)): this.ident.__Tag
    //#input(void contentsChanged(ListDataEvent)): this.ident.textField
    //#input(void contentsChanged(ListDataEvent)): this.ident.validator
    //#input(void contentsChanged(ListDataEvent)): this.name
    //#input(void contentsChanged(ListDataEvent)): this.name.__Tag
    //#input(void contentsChanged(ListDataEvent)): this.name.textField
    //#input(void contentsChanged(ListDataEvent)): this.name.validator
    //#input(void contentsChanged(ListDataEvent)): this.nicknames
    //#input(void contentsChanged(ListDataEvent)): this.realname
    //#input(void contentsChanged(ListDataEvent)): this.realname.__Tag
    //#input(void contentsChanged(ListDataEvent)): this.realname.textField
    //#input(void contentsChanged(ListDataEvent)): this.realname.validator
    //#pre[2] (void contentsChanged(ListDataEvent)): this.ident != null
    //#pre[4] (void contentsChanged(ListDataEvent)): this.ident.textField != null
    //#pre[3] (void contentsChanged(ListDataEvent)): (soft) this.ident.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[5] (void contentsChanged(ListDataEvent)): (soft) this.ident.validator != null
    //#pre[6] (void contentsChanged(ListDataEvent)): (soft) this.name != null
    //#pre[7] (void contentsChanged(ListDataEvent)): (soft) this.name.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[8] (void contentsChanged(ListDataEvent)): (soft) this.name.textField != null
    //#pre[9] (void contentsChanged(ListDataEvent)): (soft) this.name.validator != null
    //#pre[10] (void contentsChanged(ListDataEvent)): (soft) this.nicknames != null
    //#pre[11] (void contentsChanged(ListDataEvent)): (soft) this.realname != null
    //#pre[12] (void contentsChanged(ListDataEvent)): (soft) this.realname.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[13] (void contentsChanged(ListDataEvent)): (soft) this.realname.textField != null
    //#pre[14] (void contentsChanged(ListDataEvent)): (soft) this.realname.validator != null
    //#unanalyzed(void contentsChanged(ListDataEvent)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void contentsChanged(ListDataEvent)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void contentsChanged(ListDataEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void contentsChanged(ListDataEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void contentsChanged(ListDataEvent)): Effects-of-calling:javax.swing.JList:getModel
    //#unanalyzed(void contentsChanged(ListDataEvent)): Effects-of-calling:javax.swing.DefaultListModel:getSize
    }
    //#ProfileDetailPanel.java:330: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.contentsChanged(ListDataEvent)

    /**
     * Ensures profile names are unique.
     */
    private class ProfileNameValidator extends FileNameValidator {
    //#ProfileDetailPanel.java:335: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel)
    //#ProfileDetailPanel.java:335: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.validator.FileNameValidator()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.validator.FileNameValidator()
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel)): init'ed(this.this$0)
    //#ProfileDetailPanel.java:335: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel)
    //#ProfileDetailPanel.java:335: method: ValidationResponse com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.validate(Object)
    //#input(ValidationResponse validate(Object)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$ProfileNameValidator]
    //#input(ValidationResponse validate(Object)): __Descendant_Table[others]
    //#input(ValidationResponse validate(Object)): __Dispatch_Table.validate(Ljava/lang/String;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(ValidationResponse validate(Object)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(ValidationResponse validate(Object)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[others]
    //#input(ValidationResponse validate(Object)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(ValidationResponse validate(Object)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel]
    //#input(ValidationResponse validate(Object)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel.__Descendant_Table[others]
    //#input(ValidationResponse validate(Object)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel.__Dispatch_Table.iterator()Ljava/util/Iterator;
    //#input(ValidationResponse validate(Object)): this
    //#input(ValidationResponse validate(Object)): this.__Tag
    //#input(ValidationResponse validate(Object)): this.this$0
    //#input(ValidationResponse validate(Object)): this.this$0.model
    //#input(ValidationResponse validate(Object)): this.this$0.model.__Tag
    //#input(ValidationResponse validate(Object)): this.this$0.model.profiles
    //#input(ValidationResponse validate(Object)): this.this$0.profile
    //#input(ValidationResponse validate(Object)): x0
    //#output(ValidationResponse validate(Object)): new ValidationResponse(validate#1*) num objects
    //#output(ValidationResponse validate(Object)): return_value
    //#new obj(ValidationResponse validate(Object)): new ValidationResponse(validate#1*)
    //#pre[2] (ValidationResponse validate(Object)): this.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$ProfileNameValidator
    //#pre[3] (ValidationResponse validate(Object)): this.this$0 != null
    //#pre[4] (ValidationResponse validate(Object)): this.model != null
    //#pre[5] (ValidationResponse validate(Object)): this.model.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel
    //#pre[6] (ValidationResponse validate(Object)): this.model.profiles != null
    //#pre[7] (ValidationResponse validate(Object)): (soft) init'ed(this.profile)
    //#post(ValidationResponse validate(Object)): init'ed(return_value)
    //#post(ValidationResponse validate(Object)): new ValidationResponse(validate#1*) num objects <= 1
    //#unanalyzed(ValidationResponse validate(Object)): Effects-of-calling:access$200
    //#unanalyzed(ValidationResponse validate(Object)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(ValidationResponse validate(Object)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(ValidationResponse validate(Object)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(ValidationResponse validate(Object)): Effects-of-calling:access$300
    //#unanalyzed(ValidationResponse validate(Object)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(ValidationResponse validate(Object)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse
    //#unanalyzed(ValidationResponse validate(Object)): Effects-of-calling:com.dmdirc.config.prefs.validator.FileNameValidator:validate
    //#ProfileDetailPanel.java:335: end of method: ValidationResponse com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.validate(Object)
    //#ProfileDetailPanel.java:335: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel, ProfileDetailPanel$1)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel, ProfileDetailPanel$1)): this
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel, ProfileDetailPanel$1)): x0
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel, ProfileDetailPanel$1)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel, ProfileDetailPanel$1)): this.this$0 == x0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel, ProfileDetailPanel$1)): init'ed(this.this$0)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel, ProfileDetailPanel$1)): Effects-of-calling:com.dmdirc.config.prefs.validator.FileNameValidator
    //#ProfileDetailPanel.java:335: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator(ProfileDetailPanel, ProfileDetailPanel$1)

        /** {@inheritDoc} */
        @Override
        public ValidationResponse validate(final String object) {
            for (Profile targetprofile : model) {
    //#ProfileDetailPanel.java:340: method: ValidationResponse com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.validate(String)
    //#input(ValidationResponse validate(String)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(ValidationResponse validate(String)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Descendant_Table[others]
    //#input(ValidationResponse validate(String)): com/dmdirc/addons/ui_swing/dialogs/profiles/Profile.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(ValidationResponse validate(String)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel]
    //#input(ValidationResponse validate(String)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel.__Descendant_Table[others]
    //#input(ValidationResponse validate(String)): com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel.__Dispatch_Table.iterator()Ljava/util/Iterator;
    //#input(ValidationResponse validate(String)): object
    //#input(ValidationResponse validate(String)): this
    //#input(ValidationResponse validate(String)): this.this$0
    //#input(ValidationResponse validate(String)): this.this$0.model
    //#input(ValidationResponse validate(String)): this.this$0.model.__Tag
    //#input(ValidationResponse validate(String)): this.this$0.model.profiles
    //#input(ValidationResponse validate(String)): this.this$0.profile
    //#output(ValidationResponse validate(String)): new ValidationResponse(validate#1) num objects
    //#output(ValidationResponse validate(String)): return_value
    //#new obj(ValidationResponse validate(String)): new ValidationResponse(validate#1)
    //#pre[3] (ValidationResponse validate(String)): this.this$0 != null
    //#pre[4] (ValidationResponse validate(String)): this.model != null
    //#pre[5] (ValidationResponse validate(String)): this.model.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileListModel
    //#pre[6] (ValidationResponse validate(String)): this.model.profiles != null
    //#pre[7] (ValidationResponse validate(String)): (soft) init'ed(this.profile)
    //#presumption(ValidationResponse validate(String)): java.util.Iterator:next(...).__Tag@340 == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#presumption(ValidationResponse validate(String)): java.util.Iterator:next(...)@340 != null
    //#presumption(ValidationResponse validate(String)): targetprofile.name@340 != null
    //#post(ValidationResponse validate(String)): init'ed(return_value)
    //#post(ValidationResponse validate(String)): new ValidationResponse(validate#1) num objects <= 1
    //#unanalyzed(ValidationResponse validate(String)): Effects-of-calling:java.util.List:iterator
    //#test_vector(ValidationResponse validate(String)): java.lang.String:equalsIgnoreCase(...)@341: {0}, {1}
    //#test_vector(ValidationResponse validate(String)): java.util.Iterator:hasNext(...)@340: {0}, {1}
                if (targetprofile != profile && targetprofile.getName().
                        equalsIgnoreCase(object)) {
                    return new ValidationResponse("Profile names must be unique");
    //#ProfileDetailPanel.java:343: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.prefs.validator.ValidationResponse(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator
    //#    method: ValidationResponse validate(String)
    //#    unanalyzed callee: void com.dmdirc.config.prefs.validator.ValidationResponse(String)
                }
            }

            return super.validate(object);
    //#ProfileDetailPanel.java:347: Warning: method not available - call not analyzed
    //#    call on ValidationResponse com.dmdirc.config.prefs.validator.FileNameValidator:validate(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator
    //#    method: ValidationResponse validate(String)
    //#    unanalyzed callee: ValidationResponse com.dmdirc.config.prefs.validator.FileNameValidator:validate(String)
    //#ProfileDetailPanel.java:347: end of method: ValidationResponse com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.validate(String)
        }
    }
}
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$2]
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2__static_init): __Dispatch_Table.cancelled()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2__static_init): __Dispatch_Table.save()Z
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$2] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2__static_init): __Dispatch_Table.cancelled()V == &cancelled
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2__static_init): __Dispatch_Table.save()Z == &save
    //#ProfileDetailPanel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2__static_init
    //#ProfileDetailPanel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$2
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$1]
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1__static_init): __Dispatch_Table.cancelled()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1__static_init): __Dispatch_Table.save()Z
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1__static_init): __Dispatch_Table.cancelled()V == &cancelled
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1__static_init): __Dispatch_Table.save()Z == &save
    //#ProfileDetailPanel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1__static_init
    //#ProfileDetailPanel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$1
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$ProfileNameValidator]
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator__static_init): __Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator__static_init): __Dispatch_Table.validate(Ljava/lang/String;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel$ProfileNameValidator] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator__static_init): __Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse; == &validate
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator__static_init): __Dispatch_Table.validate(Ljava/lang/String;)Lcom/dmdirc/config/prefs/validator/ValidationResponse; == &validate
    //#ProfileDetailPanel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator__static_init
    //#ProfileDetailPanel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel$ProfileNameValidator
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel]
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.clearProfile()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.contentsChanged(Ljavax/swing/event/ListDataEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.initMainComponents()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.intervalAdded(Ljavax/swing/event/ListDataEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.intervalRemoved(Ljavax/swing/event/ListDataEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.layoutComponents()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.save()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.setProfile(Lcom/dmdirc/addons/ui_swing/dialogs/profiles/Profile;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.updateProfile()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.validateDetails()Z
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.valueChanged(Ljavax/swing/event/ListSelectionEvent;)V
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/ProfileDetailPanel] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.clearProfile()V == &clearProfile
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.contentsChanged(Ljavax/swing/event/ListDataEvent;)V == &contentsChanged
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.initMainComponents()V == &initMainComponents
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.intervalAdded(Ljavax/swing/event/ListDataEvent;)V == &intervalAdded
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.intervalRemoved(Ljavax/swing/event/ListDataEvent;)V == &intervalRemoved
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.layoutComponents()V == &layoutComponents
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.save()V == &save
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.setProfile(Lcom/dmdirc/addons/ui_swing/dialogs/profiles/Profile;)V == &setProfile
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.updateProfile()V == &updateProfile
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.validateDetails()Z == &validateDetails
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init): __Dispatch_Table.valueChanged(Ljavax/swing/event/ListSelectionEvent;)V == &valueChanged
    //#ProfileDetailPanel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel.com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel__static_init
    //#ProfileDetailPanel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.profiles.ProfileDetailPanel
