//# 5 errors, 488 messages
//#
/*
    //#Profile.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#Profile.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__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.config.Identity;
import com.dmdirc.config.IdentityManager;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;

/** Profile wrapper class. */
public class Profile {

    /** Old Name. */
    private String oldName;
    /** Name. */
    private String name;
    /** Real name. */
    private String realname;
    /** Ident. */
    private String ident;
    /** Nicknames. */
    private List<String> nicknames;
    /** Does this profile need saving? */
    private boolean modified;

    /** Creates a new profile. */
    public Profile() {
        this("");
    //#Profile.java:50: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.ident
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.modified
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.nicknames
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.oldName
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.ident == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.name == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.oldName == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.realname == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): this.modified == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): init'ed(this.nicknames)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()): Effects-of-calling:java.util.Arrays:asList
    }
    //#Profile.java:51: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile()

    /**
     * Creates a new profile.
     *
     * @param name Profile's name
     */
    public Profile(final String name) {
        this(name, "");
    //#Profile.java:59: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): name
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.ident
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.modified
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.nicknames
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.oldName
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.ident == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.realname == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.modified == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.name == name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): init'ed(this.name)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): this.oldName == this.name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): init'ed(this.nicknames)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)): Effects-of-calling:java.util.Arrays:asList
    }
    //#Profile.java:60: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String)

    /**
     * Creates a new profile.
     *
     * @param name Profile's name
     * @param nickname Profile's nickname
     */
    public Profile(final String name, final String nickname) {
        this(name, nickname, "");
    //#Profile.java:69: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): name
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): nickname
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.ident
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.modified
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.nicknames
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.oldName
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.ident == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.realname == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.modified == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.name == name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): init'ed(this.name)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): this.oldName == this.name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): init'ed(this.nicknames)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)): Effects-of-calling:java.util.Arrays:asList
    }
    //#Profile.java:70: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String)

    /**
     *
     *
     * @param name Profile's name
     * @param nickname Profile's nickname
     * @param realname Profile's realname
     */
    public Profile(final String name, final String nickname,
            final String realname) {
        this(name, nickname, realname, "");
    //#Profile.java:81: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): name
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): nickname
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): realname
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.ident
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.modified
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.nicknames
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.oldName
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.ident == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.modified == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.name == name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): init'ed(this.name)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.oldName == this.name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): init'ed(this.nicknames)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): this.realname == realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): init'ed(this.realname)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)): Effects-of-calling:java.util.Arrays:asList
    }
    //#Profile.java:82: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String)

    /**
     * Creates a new profile.
     *
     * @param name Profile's name
     * @param nickname Profile's nickname
     * @param realname Profile's realname
     * @param ident Profile's ident
     */
    public Profile(final String name, final String nickname,
            final String realname, final String ident) {
        this(name, Arrays.asList(new String[]{nickname, }), realname, ident);
    //#Profile.java:94: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): ident
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): name
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): nickname
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): realname
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.ident
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.modified
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.nicknames
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.oldName
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.ident == ident
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): init'ed(this.ident)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.modified == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.name == name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): init'ed(this.name)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.oldName == this.name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): init'ed(this.nicknames)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): this.realname == realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)): init'ed(this.realname)
    }
    //#Profile.java:95: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, String, String, String)

    /**
     * Creates a new profile.
     *
     * @param name Profile's name
     * @param nicknames Profile's nicknames
     * @param realname Profile's realname
     * @param ident Profile's ident
     */
    public Profile(final String name, final List<String> nicknames,
            final String realname, final String ident) {
        this(name, nicknames, realname, ident, true);
    //#Profile.java:107: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): ident
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): name
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): nicknames
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): realname
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.ident
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.modified
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.nicknames
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.oldName
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.ident == ident
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): init'ed(this.ident)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.modified == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.name == name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): init'ed(this.name)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.oldName == this.name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.nicknames == nicknames
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): init'ed(this.nicknames)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): this.realname == realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)): init'ed(this.realname)
    }
    //#Profile.java:108: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String)

    /**
     * Creates a new profile.
     *
     * @param name Profile's name
     * @param nicknames Profile's nickname
     * @param realname Profile's realname
     * @param ident Profile's ident
     * @param modified Has this profile been modified
     */
    public Profile(final String name, final List<String> nicknames,
            final String realname, final String ident,
            final boolean modified) {
    //#Profile.java:121: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): ident
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): modified
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): name
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): nicknames
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): realname
    //#input(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.ident
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.modified
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.nicknames
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.oldName
    //#output(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.ident == ident
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): init'ed(this.ident)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.modified == modified
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): init'ed(this.modified)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.name == name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): init'ed(this.name)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.oldName == this.name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.nicknames == nicknames
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): init'ed(this.nicknames)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): this.realname == realname
    //#post(void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)): init'ed(this.realname)
        this.oldName = name;
        this.name = name;
        this.nicknames = nicknames;
        this.realname = realname;
        this.ident = ident;
        this.modified = modified;
    }
    //#Profile.java:128: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile(String, List, String, String, bool)

    /**
     * Returns the name of this profile.
     *
     * @return Profile's name
     */
    public String getName() {
        return name;
    //#Profile.java:136: method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getName()
    //#input(String getName()): this
    //#input(String getName()): this.name
    //#output(String getName()): return_value
    //#pre[2] (String getName()): init'ed(this.name)
    //#post(String getName()): return_value == this.name
    //#post(String getName()): init'ed(return_value)
    //#Profile.java:136: end of method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getName()
    }

    /**
     * Sets the name of this profile.
     *
     * @param name Profile's new name
     */
    public void setName(final String name) {
        if (!this.name.equals(name)) {
    //#Profile.java:145: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setName(String)
    //#input(void setName(String)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void setName(String)): __Descendant_Table[others]
    //#input(void setName(String)): __Dispatch_Table.setModified(Z)V
    //#input(void setName(String)): name
    //#input(void setName(String)): this
    //#input(void setName(String)): this.__Tag
    //#input(void setName(String)): this.name
    //#output(void setName(String)): this.modified
    //#output(void setName(String)): this.name
    //#output(void setName(String)): this.oldName
    //#pre[3] (void setName(String)): this.name != null
    //#pre[6] (void setName(String)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#post(void setName(String)): possibly_updated(this.modified)
    //#post(void setName(String)): this.name == One-of{old this.name, name}
    //#post(void setName(String)): init'ed(this.name)
    //#post(void setName(String)): this.oldName == One-of{old this.oldName, old this.name}
    //#test_vector(void setName(String)): java.lang.String:equals(...)@145: {1}, {0}
            this.oldName = this.name;
            this.name = name;
            setModified(true);
        }
    }
    //#Profile.java:150: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setName(String)
    
    /**
     * Gets the nicknames list for this profile.
     *
     * @return Profile's nicknames list
     */
    public List<String> getNicknames() {
        return nicknames;
    //#Profile.java:158: method: List com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getNicknames()
    //#input(List getNicknames()): this
    //#input(List getNicknames()): this.nicknames
    //#output(List getNicknames()): return_value
    //#pre[2] (List getNicknames()): init'ed(this.nicknames)
    //#post(List getNicknames()): return_value == this.nicknames
    //#post(List getNicknames()): init'ed(return_value)
    //#Profile.java:158: end of method: List com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getNicknames()
    }

    /**
     * Sets the nicknames list for this profile.
     *
     * @param nicknames Profile's new nicknames list
     */
    public void setNicknames(final List<String> nicknames) {
        if (!this.nicknames.equals(nicknames)) {
    //#Profile.java:167: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setNicknames(List)
    //#input(void setNicknames(List)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void setNicknames(List)): __Descendant_Table[others]
    //#input(void setNicknames(List)): __Dispatch_Table.setModified(Z)V
    //#input(void setNicknames(List)): nicknames
    //#input(void setNicknames(List)): this
    //#input(void setNicknames(List)): this.__Tag
    //#input(void setNicknames(List)): this.nicknames
    //#output(void setNicknames(List)): this.modified
    //#output(void setNicknames(List)): this.nicknames
    //#pre[3] (void setNicknames(List)): this.nicknames != null
    //#pre[5] (void setNicknames(List)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#post(void setNicknames(List)): possibly_updated(this.modified)
    //#post(void setNicknames(List)): this.nicknames == One-of{old this.nicknames, nicknames}
    //#post(void setNicknames(List)): init'ed(this.nicknames)
    //#test_vector(void setNicknames(List)): java.lang.Object:equals(...)@167: {1}, {0}
            this.nicknames = nicknames;
            setModified(true);
        }
    }
    //#Profile.java:171: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setNicknames(List)

    /**
     * Adds a nickname to this profile.
     *
     * @param nickname A new nickname for the profile
     */
    public void addNickname(final String nickname) {
        if (!nicknames.contains(nickname)) {
    //#Profile.java:179: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.addNickname(String)
    //#input(void addNickname(String)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void addNickname(String)): __Descendant_Table[others]
    //#input(void addNickname(String)): __Dispatch_Table.setModified(Z)V
    //#input(void addNickname(String)): nickname
    //#input(void addNickname(String)): this
    //#input(void addNickname(String)): this.__Tag
    //#input(void addNickname(String)): this.nicknames
    //#output(void addNickname(String)): this.modified
    //#pre[5] (void addNickname(String)): this.nicknames != null
    //#pre[4] (void addNickname(String)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#post(void addNickname(String)): possibly_updated(this.modified)
    //#test_vector(void addNickname(String)): java.util.List:contains(...)@179: {1}, {0}
            nicknames.add(nickname);
            setModified(true);
        }
    }
    //#Profile.java:183: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.addNickname(String)

    /**
     * Adds a nickname to this profile.
     *
     * @param nickname A new nickname for the profile
     * @param position Position for the new alternate nickname
     */
    public void addNickname(final String nickname, final int position) {
        if (!nicknames.contains(nickname)) {
    //#Profile.java:192: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.addNickname(String, int)
    //#input(void addNickname(String, int)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void addNickname(String, int)): __Descendant_Table[others]
    //#input(void addNickname(String, int)): __Dispatch_Table.setModified(Z)V
    //#input(void addNickname(String, int)): nickname
    //#input(void addNickname(String, int)): position
    //#input(void addNickname(String, int)): this
    //#input(void addNickname(String, int)): this.__Tag
    //#input(void addNickname(String, int)): this.nicknames
    //#output(void addNickname(String, int)): this.modified
    //#pre[6] (void addNickname(String, int)): this.nicknames != null
    //#pre[5] (void addNickname(String, int)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#post(void addNickname(String, int)): possibly_updated(this.modified)
    //#test_vector(void addNickname(String, int)): java.util.List:contains(...)@192: {1}, {0}
            nicknames.add(position, nickname);
            setModified(true);
        }
    }
    //#Profile.java:196: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.addNickname(String, int)

    /**
     * Deletes a nickname from this profile.
     *
     * @param nickname An existing nickname from the profile
     */
    public void delNickname(final String nickname) {
        if (nicknames.remove(nickname)) {
    //#Profile.java:204: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.delNickname(String)
    //#input(void delNickname(String)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void delNickname(String)): __Descendant_Table[others]
    //#input(void delNickname(String)): __Dispatch_Table.setModified(Z)V
    //#input(void delNickname(String)): nickname
    //#input(void delNickname(String)): this
    //#input(void delNickname(String)): this.__Tag
    //#input(void delNickname(String)): this.nicknames
    //#output(void delNickname(String)): this.modified
    //#pre[5] (void delNickname(String)): this.nicknames != null
    //#pre[4] (void delNickname(String)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#post(void delNickname(String)): possibly_updated(this.modified)
    //#test_vector(void delNickname(String)): java.util.List:remove(...)@204: {0}, {1}
            setModified(true);
        }
    }
    //#Profile.java:207: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.delNickname(String)

    /**
     * Gets the specified nickname for this profile
     *
     * @param index Index of the nickname to retrieve
     * 
     * @return Profile's nickname
     */
    public String getNickname(final int index) {
        return nicknames.get(index);
    //#Profile.java:217: method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getNickname(int)
    //#input(String getNickname(int)): index
    //#input(String getNickname(int)): this
    //#input(String getNickname(int)): this.nicknames
    //#output(String getNickname(int)): return_value
    //#pre[3] (String getNickname(int)): this.nicknames != null
    //#post(String getNickname(int)): init'ed(return_value)
    //#Profile.java:217: end of method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getNickname(int)
    }

    /**
     * Gets the realname for this profile.
     *
     * @return Profile's realname
     */
    public String getRealname() {
        return realname;
    //#Profile.java:226: method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getRealname()
    //#input(String getRealname()): this
    //#input(String getRealname()): this.realname
    //#output(String getRealname()): return_value
    //#pre[2] (String getRealname()): init'ed(this.realname)
    //#post(String getRealname()): return_value == this.realname
    //#post(String getRealname()): init'ed(return_value)
    //#Profile.java:226: end of method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getRealname()
    }

    /**
     * Sets the realname for this profile.
     *
     * @param realname Profile's new realname
     */
    public void setRealname(final String realname) {
        if (!this.realname.equals(realname)) {
    //#Profile.java:235: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setRealname(String)
    //#input(void setRealname(String)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void setRealname(String)): __Descendant_Table[others]
    //#input(void setRealname(String)): __Dispatch_Table.setModified(Z)V
    //#input(void setRealname(String)): realname
    //#input(void setRealname(String)): this
    //#input(void setRealname(String)): this.__Tag
    //#input(void setRealname(String)): this.realname
    //#output(void setRealname(String)): this.modified
    //#output(void setRealname(String)): this.realname
    //#pre[2] (void setRealname(String)): this.realname != null
    //#pre[5] (void setRealname(String)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#post(void setRealname(String)): possibly_updated(this.modified)
    //#post(void setRealname(String)): this.realname == One-of{old this.realname, realname}
    //#post(void setRealname(String)): init'ed(this.realname)
    //#test_vector(void setRealname(String)): java.lang.String:equals(...)@235: {1}, {0}
            this.realname = realname;
            setModified(true);
        }
    }
    //#Profile.java:239: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setRealname(String)

    /**
     * Gets the ident for this profile.
     *
     * @return Profile's ident
     */
    public String getIdent() {
        return ident;
    //#Profile.java:247: method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getIdent()
    //#input(String getIdent()): this
    //#input(String getIdent()): this.ident
    //#output(String getIdent()): return_value
    //#pre[2] (String getIdent()): init'ed(this.ident)
    //#post(String getIdent()): return_value == this.ident
    //#post(String getIdent()): init'ed(return_value)
    //#Profile.java:247: end of method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.getIdent()
    }

    /**
     * Sets the ident for this profile.
     *
     * @param ident Profile's new ident
     */
    public void setIdent(final String ident) {
        if (this.ident == null || !this.ident.equals(ident)) {
    //#Profile.java:256: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setIdent(String)
    //#input(void setIdent(String)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(void setIdent(String)): __Descendant_Table[others]
    //#input(void setIdent(String)): __Dispatch_Table.setModified(Z)V
    //#input(void setIdent(String)): ident
    //#input(void setIdent(String)): this
    //#input(void setIdent(String)): this.__Tag
    //#input(void setIdent(String)): this.ident
    //#output(void setIdent(String)): this.ident
    //#output(void setIdent(String)): this.modified
    //#pre[2] (void setIdent(String)): init'ed(this.ident)
    //#pre[5] (void setIdent(String)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#post(void setIdent(String)): this.ident == One-of{old this.ident, ident}
    //#post(void setIdent(String)): init'ed(this.ident)
    //#post(void setIdent(String)): possibly_updated(this.modified)
    //#test_vector(void setIdent(String)): this.ident: Addr_Set{null}, Inverse{null}
    //#test_vector(void setIdent(String)): java.lang.String:equals(...)@256: {1}, {0}
            this.ident = ident;
            setModified(true);
        }
    }
    //#Profile.java:260: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setIdent(String)

    /**
     * Has this profile been modified?
     *
     * @return true iif the profile has been modified
     */
    public boolean isModified() {
        return modified;
    //#Profile.java:268: method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.isModified()
    //#input(bool isModified()): this
    //#input(bool isModified()): this.modified
    //#output(bool isModified()): return_value
    //#pre[2] (bool isModified()): init'ed(this.modified)
    //#post(bool isModified()): return_value == this.modified
    //#post(bool isModified()): init'ed(return_value)
    //#Profile.java:268: end of method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.isModified()
    }

    /**
     * Sets whether the profile has been modified.
     *
     * @param modified Modified state for the profile
     */
    public void setModified(final boolean modified) {
        this.modified = modified;
    //#Profile.java:277: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setModified(bool)
    //#input(void setModified(bool)): modified
    //#input(void setModified(bool)): this
    //#output(void setModified(bool)): this.modified
    //#post(void setModified(bool)): this.modified == modified
    //#post(void setModified(bool)): init'ed(this.modified)
    }
    //#Profile.java:278: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.setModified(bool)

    /** Saves this profile. */
    public void save() {
        if (modified) {
    //#Profile.java:282: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.save()
    //#input(void save()): this
    //#input(void save()): this.ident
    //#input(void save()): this.modified
    //#input(void save()): this.name
    //#input(void save()): this.nicknames
    //#input(void save()): this.oldName
    //#input(void save()): this.realname
    //#output(void save()): this.modified
    //#output(void save()): this.oldName
    //#pre[1] (void save()): init'ed(this.modified)
    //#pre[2] (void save()): (soft) init'ed(this.oldName)
    //#pre[4] (void save()): (soft) init'ed(this.ident)
    //#pre[5] (void save()): (soft) init'ed(this.name)
    //#pre[6] (void save()): (soft) init'ed(this.nicknames)
    //#pre[7] (void save()): (soft) init'ed(this.realname)
    //#presumption(void save()): com.dmdirc.config.Identity:getName(...)@288 != null
    //#presumption(void save()): com.dmdirc.config.IdentityManager:getProfiles(...)@284 != null
    //#presumption(void save()): java.util.Iterator:next(...)@287 != null
    //#post(void save()): this.modified == 0
    //#post(void save()): this.oldName == One-of{old this.oldName, this.name}
    //#post(void save()): init'ed(this.oldName)
    //#test_vector(void save()): this.modified: {0}, {1}
    //#test_vector(void save()): java.lang.String:equalsIgnoreCase(...)@288: {0}, {1}
    //#test_vector(void save()): java.util.Iterator:hasNext(...)@287: {0}, {1}
            final String profileString = "profile";
    //#Profile.java:283: Warning: unused assignment
    //#    Unused assignment into profileString
    //#    severity: LOW
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void save()
            final List<Identity> identities = IdentityManager.getProfiles();
    //#Profile.java:284: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.IdentityManager:getProfiles()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void save()
    //#    unanalyzed callee: List com.dmdirc.config.IdentityManager:getProfiles()
            Identity profile = null;

            for (Identity identity : identities) {
                if (identity.getName().equalsIgnoreCase(oldName)) {
    //#Profile.java:288: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.Identity:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void save()
    //#    unanalyzed callee: String com.dmdirc.config.Identity:getName()
                    profile = identity;
                    break;
                }
            }

            if (profile == null) {
                try {
                    profile = Identity.buildProfile(name);
    //#Profile.java:296: Warning: method not available - call not analyzed
    //#    call on Identity com.dmdirc.config.Identity:buildProfile(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void save()
    //#    unanalyzed callee: Identity com.dmdirc.config.Identity:buildProfile(String)
                } catch (IOException ex) {
                    // TODO: ??
                }
            }

            profile.setOption("identity", "name", name);
    //#Profile.java:302: ?null dereference
    //#    profile != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void save()
    //#    basic block: bb_11
    //#    assertion: profile != null
    //#    VN: profile
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad  Uncertain
    //#Profile.java:302: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.Identity:setOption(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void save()
    //#    unanalyzed callee: void com.dmdirc.config.Identity:setOption(String, String, String)
            profile.setOption(profileString, "nicknames", nicknames);
    //#Profile.java:303: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.Identity:setOption(String, String, List)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void save()
    //#    unanalyzed callee: void com.dmdirc.config.Identity:setOption(String, String, List)
            profile.setOption(profileString, "realname", realname);
    //#Profile.java:304: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.Identity:setOption(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void save()
    //#    unanalyzed callee: void com.dmdirc.config.Identity:setOption(String, String, String)
            profile.setOption(profileString, "ident", ident);
    //#Profile.java:305: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.Identity:setOption(String, String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void save()
    //#    unanalyzed callee: void com.dmdirc.config.Identity:setOption(String, String, String)
            modified = false;
            this.oldName = name;
        }
    }
    //#Profile.java:309: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.save()

    /** Deletes the profile. */
    public void delete() {
        final List<Identity> identities = IdentityManager.getProfiles();
    //#Profile.java:313: method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.delete()
    //#Profile.java:313: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.IdentityManager:getProfiles()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void delete()
    //#    unanalyzed callee: List com.dmdirc.config.IdentityManager:getProfiles()
    //#input(void delete()): this
    //#input(void delete()): this.name
    //#pre[2] (void delete()): (soft) init'ed(this.name)
    //#presumption(void delete()): com.dmdirc.config.Identity:getName(...)@317 != null
    //#presumption(void delete()): com.dmdirc.config.IdentityManager:getProfiles(...)@313 != null
    //#presumption(void delete()): java.util.Iterator:next(...)@316 != null
    //#test_vector(void delete()): java.lang.String:equals(...)@317: {0}, {1}
    //#test_vector(void delete()): java.util.Iterator:hasNext(...)@316: {0}, {1}
        Identity profile = null;

        for (Identity identity : identities) {
            if (identity.getName().equals(name)) {
    //#Profile.java:317: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.Identity:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void delete()
    //#    unanalyzed callee: String com.dmdirc.config.Identity:getName()
                profile = identity;
                break;
            }
        }

        if (profile == null) {
            return;
        }
        profile.delete();
    //#Profile.java:326: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.config.Identity:delete()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: void delete()
    //#    unanalyzed callee: void com.dmdirc.config.Identity:delete()
    }
    //#Profile.java:327: end of method: void com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.delete()

    /** {@inheritDoc} */
    @Override
    public boolean equals(final Object obj) {
        if (obj == null) {
    //#Profile.java:332: method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.equals(Object)
    //#input(bool equals(Object)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#input(bool equals(Object)): __Descendant_Table[others]
    //#input(bool equals(Object)): obj
    //#input(bool equals(Object)): obj.__Tag
    //#input(bool equals(Object)): obj.ident
    //#input(bool equals(Object)): obj.name
    //#input(bool equals(Object)): obj.nicknames
    //#input(bool equals(Object)): obj.realname
    //#input(bool equals(Object)): this
    //#input(bool equals(Object)): this.ident
    //#input(bool equals(Object)): this.name
    //#input(bool equals(Object)): this.nicknames
    //#input(bool equals(Object)): this.realname
    //#output(bool equals(Object)): return_value
    //#pre[2] (bool equals(Object)): (soft) obj.__Tag == com/dmdirc/addons/ui_swing/dialogs/profiles/Profile
    //#pre[3] (bool equals(Object)): (soft) init'ed(obj.ident)
    //#pre[4] (bool equals(Object)): (soft) init'ed(obj.name)
    //#pre[5] (bool equals(Object)): (soft) init'ed(obj.nicknames)
    //#pre[6] (bool equals(Object)): (soft) init'ed(obj.realname)
    //#pre[8] (bool equals(Object)): (soft) init'ed(this.ident)
    //#pre[9] (bool equals(Object)): (soft) this.name != null
    //#pre[10] (bool equals(Object)): (soft) this.nicknames != null
    //#pre[11] (bool equals(Object)): (soft) this.realname != null
    //#post(bool equals(Object)): init'ed(return_value)
    //#test_vector(bool equals(Object)): obj: Inverse{null}, Addr_Set{null}
    //#test_vector(bool equals(Object)): obj.ident: Addr_Set{null}, Inverse{null}
    //#test_vector(bool equals(Object)): this.ident: Inverse{null}, Addr_Set{null}
    //#test_vector(bool equals(Object)): java.lang.Object:equals(...)@344: {1}, {0}
    //#test_vector(bool equals(Object)): java.lang.String:equals(...)@341: {1}, {0}
    //#test_vector(bool equals(Object)): java.lang.String:equals(...)@347: {1}, {0}
    //#test_vector(bool equals(Object)): java.lang.String:equals(...)@353: {1}, {0}
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }

        final Profile other = (Profile) obj;

        if (!this.name.equals(other.name)) {
            return false;
        }
        if (!this.nicknames.equals(other.nicknames)) {
            return false;
        }
        if (!this.realname.equals(other.realname)) {
            return false;
        }
        if (this.ident == null && other.ident != null) {
            return false;
        }
        if (this.ident != null && !this.ident.equals(other.ident)) {
            return false;
        }

        return true;
    //#Profile.java:357: end of method: bool com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.equals(Object)
    }

    /** {@inheritDoc} */
    @Override
    public int hashCode() {
        int hash = 5;
    //#Profile.java:363: method: int com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.hashCode()
    //#input(int hashCode()): this
    //#input(int hashCode()): this.ident
    //#input(int hashCode()): this.name
    //#input(int hashCode()): this.nicknames
    //#input(int hashCode()): this.realname
    //#output(int hashCode()): return_value
    //#pre[2] (int hashCode()): init'ed(this.ident)
    //#pre[3] (int hashCode()): init'ed(this.name)
    //#pre[4] (int hashCode()): init'ed(this.nicknames)
    //#pre[5] (int hashCode()): init'ed(this.realname)
    //#presumption(int hashCode()): java.lang.String:hashCode(...)@364 in {-55_068_322..27_540_102}
    //#post(int hashCode()): init'ed(return_value)
        hash = 79 * hash + (this.name != null ? this.name.hashCode() : 0);
        hash = 79 * hash +
    //#Profile.java:365: ?overflow
    //#    79*hash + java/lang/Object:hashCode(...) in {-2_147_483_648..4_294_967_295}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: int hashCode()
    //#    basic block: bb_7
    //#    assertion: 79*hash + java/lang/Object:hashCode(...) in {-2_147_483_648..4_294_967_295}
    //#    VN: java.lang.String:hashCode(...)*79 + java.lang.Object:hashCode(...) + 31_205
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {-6_497_849_881..-2_147_483_649, 4_294_967_296..6_470_666_558}
    //#    Attribs:  Int  Bad < Exp  Bad > Exp
                (this.nicknames != null ? this.nicknames.hashCode() : 0);
        hash = 79 * hash +
    //#Profile.java:367: ?overflow
    //#    79*hash + java/lang/String:hashCode(...) in {-2_147_483_648..4_294_967_295}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: int hashCode()
    //#    basic block: bb_10
    //#    assertion: 79*hash + java/lang/String:hashCode(...) in {-2_147_483_648..4_294_967_295}
    //#    VN: (java.lang.String:hashCode(...)*79 + java.lang.Object:hashCode(...))*79 + java.lang.String:hashCode(...) + 2_465_195
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {-171_798_691_840..-2_147_483_649, 4_294_967_296..343_597_383_600}
    //#    Attribs:  Int  Bad < Exp  Bad > Exp
                (this.realname != null ? this.realname.hashCode() : 0);
        hash = 79 * hash + (this.ident != null ? this.ident.hashCode() : 0);
    //#Profile.java:369: ?overflow
    //#    79*hash + java/lang/String:hashCode(...) in {-2_147_483_648..4_294_967_295}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
    //#    method: int hashCode()
    //#    basic block: bb_13
    //#    assertion: 79*hash + java/lang/String:hashCode(...) in {-2_147_483_648..4_294_967_295}
    //#    VN: ((java.lang.String:hashCode(...)*79 + java.lang.Object:hashCode(...))*79 + java.lang.String:hashCode(...))*79 + java.lang.String:hashCode(...) + 194_750_405
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {-171_798_691_840..-2_147_483_649, 4_294_967_296..343_597_383_600}
    //#    Attribs:  Int  Bad < Exp  Bad > Exp

        return hash;
    //#Profile.java:371: end of method: int com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.hashCode()
    }

    /** {@inheritDoc} */
    @Override
    protected Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException();
    //#Profile.java:377: method: Object com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.clone()
    //#Profile.java:377: ?check always fails: method always ends with an exception: Object clone().
    //#Profile.java:377: end of method: Object com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.clone()
    }

    /** {@inheritDoc} */
    @Override
    public String toString() {
        return "[Profile: name='" + name + "', nickname='" + nicknames +
    //#Profile.java:383: method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.toString()
    //#input(String toString()): "', ident='"._tainted
    //#input(String toString()): "', modified='"._tainted
    //#input(String toString()): "', nickname='"._tainted
    //#input(String toString()): "', realname='"._tainted
    //#input(String toString()): "']"._tainted
    //#input(String toString()): "[Profile: name='"._tainted
    //#input(String toString()): this
    //#input(String toString()): this.ident
    //#input(String toString()): this.ident._tainted
    //#input(String toString()): this.modified
    //#input(String toString()): this.name
    //#input(String toString()): this.name._tainted
    //#input(String toString()): this.nicknames
    //#input(String toString()): this.nicknames._tainted
    //#input(String toString()): this.realname
    //#input(String toString()): this.realname._tainted
    //#output(String toString()): java.lang.StringBuilder:toString(...)._tainted
    //#output(String toString()): return_value
    //#new obj(String toString()): java.lang.StringBuilder:toString(...)
    //#pre[2] (String toString()): init'ed(this.ident)
    //#pre[4] (String toString()): init'ed(this.modified)
    //#pre[5] (String toString()): init'ed(this.name)
    //#pre[8] (String toString()): init'ed(this.nicknames)
    //#pre[10] (String toString()): init'ed(this.realname)
    //#post(String toString()): init'ed(java.lang.StringBuilder:toString(...)._tainted)
    //#post(String toString()): return_value == &java.lang.StringBuilder:toString(...)
    //#Profile.java:383: end of method: String com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.toString()
                "', realname='" + realname + "', ident='" + ident + 
                "', modified='" + modified + "']";
    }
}
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile]
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.addNickname(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.addNickname(Ljava/lang/String;I)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.clone()Ljava/lang/Object;
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.delNickname(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.delete()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getIdent()Ljava/lang/String;
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getName()Ljava/lang/String;
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getNickname(I)Ljava/lang/String;
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getNicknames()Ljava/util/List;
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getRealname()Ljava/lang/String;
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.hashCode()I
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.isModified()Z
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.save()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setIdent(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setModified(Z)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setName(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setNicknames(Ljava/util/List;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setRealname(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/profiles/Profile] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.addNickname(Ljava/lang/String;)V == &addNickname
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.addNickname(Ljava/lang/String;I)V == &addNickname
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.clone()Ljava/lang/Object; == &clone
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.delNickname(Ljava/lang/String;)V == &delNickname
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.delete()V == &delete
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.equals(Ljava/lang/Object;)Z == &equals
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getIdent()Ljava/lang/String; == &getIdent
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getName()Ljava/lang/String; == &getName
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getNickname(I)Ljava/lang/String; == &getNickname
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getNicknames()Ljava/util/List; == &getNicknames
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.getRealname()Ljava/lang/String; == &getRealname
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.hashCode()I == &hashCode
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.isModified()Z == &isModified
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.save()V == &save
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setIdent(Ljava/lang/String;)V == &setIdent
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setModified(Z)V == &setModified
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setName(Ljava/lang/String;)V == &setName
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setNicknames(Ljava/util/List;)V == &setNicknames
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.setRealname(Ljava/lang/String;)V == &setRealname
    //#post(com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#Profile.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile.com.dmdirc.addons.ui_swing.dialogs.profiles.Profile__static_init
    //#Profile.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.profiles.Profile
