//# 0 errors, 818 messages
//#
/*
    //#PreferencesSetting.java:1:1: class: com.dmdirc.config.prefs.PreferencesSetting
    //#PreferencesSetting.java:1:1: method: com.dmdirc.config.prefs.PreferencesSetting.com.dmdirc.config.prefs.PreferencesSetting__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.config.prefs;

import com.dmdirc.config.IdentityManager;
import com.dmdirc.config.prefs.validator.PermissiveValidator;
import com.dmdirc.config.prefs.validator.Validator;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Represents a single setting.
 * 
 * @author chris
 */
public class PreferencesSetting {
    
    /** The type of this setting. */
    protected final PreferencesType type;
    
    /** The possible options for a multichoice setting. */
    protected final Map<String, String> combooptions;

    /** The validator to use to validate this setting. */
    protected final Validator<String> validator;
    
    /** The domain of the setting. */
    protected final String domain;
    
    /** The option name of the setting. */
    protected final String option;
    
    /** The title of this setting. */
    protected final String title;
    
    /** Text to inform the user what the setting is for. */
    protected final String helptext;
    
    /** The current value of the setting. */
    protected String current;
    
    /** The original value of this vsetting. */
    private String original;
    
    /** Whether or not we need a restart. */
    protected boolean restartNeeded;
    
    /** A list of change listeners. */
    private final List<SettingChangeListener> listeners = new ArrayList<SettingChangeListener>();

    /**
     * Creates a new preferences setting for any type except multi-choice.
     * 
     * @param type The type of the setting to create
     * @param validator A validator to validate the setting's value
     * @param domain The domain of the setting
     * @param option The option name of the setting
     * @param title The title of this setting
     * @param helptext Text to display to help the user
     */
    public PreferencesSetting(final PreferencesType type,
            final Validator<String> validator, final String domain,
            final String option, final String title, final String helptext) {
    //#PreferencesSetting.java:85: method: void com.dmdirc.config.prefs.PreferencesSetting.com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): ""._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): "."._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): "<Unknown>"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): "@"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): "Config option not found: "._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigManager.stats
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig.sources.__Lock
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.identities
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.managers
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): domain
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): domain._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): helptext
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): option
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): option._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): title
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): type
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): validator
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ArrayList(PreferencesSetting#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ArrayList(getSources#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ArrayList(getSources#1).__Lock
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).network
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).server
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new MapList(ConfigManager#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.combooptions
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.current
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.domain
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.helptext
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.listeners
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.option
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.original
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.title
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.type
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.validator
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): java.lang.StringBuilder:toString(...)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ArrayList(PreferencesSetting#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ArrayList(getSources#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new MapList(ConfigManager#1)
    //#pre[7] (void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[1] (void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com.dmdirc.config.prefs.PreferencesType:equals(...)@86 == 0
    //#presumption(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): getGlobalConfig(...).sources != null
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig == One-of{old com/dmdirc/config/IdentityManager.globalconfig, &new ConfigManager(getGlobalConfig#1)}
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.combooptions == null
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): init'ed(this.current)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.original == this.current
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.domain == domain
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): init'ed(this.domain)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.helptext == helptext
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): init'ed(this.helptext)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.listeners == &new ArrayList(PreferencesSetting#1)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.option == option
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): init'ed(this.option)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.title == title
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): init'ed(this.title)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.type == type
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): init'ed(this.type)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): this.validator == validator
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): init'ed(this.validator)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ArrayList(PreferencesSetting#1) num objects == 1
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ArrayList(getSources#1) num objects <= 1
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:hasOption
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:getOption
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:getSources
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:addListener
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:addConfigManager
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:getTarget
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)): Effects-of-calling:java.util.Collections:sort
        if (PreferencesType.MULTICHOICE.equals(type)) {
    //#PreferencesSetting.java:86: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.prefs.PreferencesType:equals(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesSetting
    //#    method: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)
    //#    unanalyzed callee: bool com.dmdirc.config.prefs.PreferencesType:equals(Object)
            throw new IllegalArgumentException("Multi-choice preferences must " +
                    "have their options specified.");
        }
        
        this.type = type;
        this.combooptions = null;
        this.validator = validator;
        this.domain = domain;
        this.option = option;
        this.title = title;
        this.helptext = helptext;
        
        current = IdentityManager.getGlobalConfig().getOption(domain, option);
        original = current;
    }
    //#PreferencesSetting.java:101: end of method: void com.dmdirc.config.prefs.PreferencesSetting.com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, Validator, String, String, String, String)
    
    /**
     * Creates a new preferences setting for any type except multi-choice, with
     * a default permissive validator.
     * 
     * @param type The type of the setting to create
     * @param domain The domain of the setting
     * @param option The option name of the setting
     * @param title The title of this setting
     * @param helptext Text to display to help the user
     */
    public PreferencesSetting(final PreferencesType type, final String domain,
            final String option, final String title, final String helptext) {
    //#PreferencesSetting.java:114: method: void com.dmdirc.config.prefs.PreferencesSetting.com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): ""._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): "."._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): "<Unknown>"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): "@"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): "Config option not found: "._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigManager.stats
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig.sources.__Lock
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.identities
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.managers
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): domain
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): domain._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): helptext
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): option
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): option._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): title
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): type
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ArrayList(PreferencesSetting#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ArrayList(getSources#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ArrayList(getSources#1).__Lock
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).network
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).server
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new MapList(ConfigManager#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new PermissiveValidator(PreferencesSetting#2) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.validator.__Tag
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.combooptions
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.current
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.domain
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.helptext
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.listeners
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.option
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.original
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.title
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.type
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.validator
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): java.lang.StringBuilder:toString(...)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ArrayList(PreferencesSetting#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ArrayList(getSources#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new MapList(ConfigManager#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new PermissiveValidator(PreferencesSetting#2)
    //#pre[7] (void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[1] (void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com.dmdirc.config.prefs.PreferencesType:equals(...)@115 == 0
    //#presumption(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): getGlobalConfig(...).sources != null
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig == One-of{old com/dmdirc/config/IdentityManager.globalconfig, &new ConfigManager(getGlobalConfig#1)}
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.combooptions == null
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): init'ed(this.current)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.original == this.current
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.domain == domain
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): init'ed(this.domain)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.helptext == helptext
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): init'ed(this.helptext)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.listeners == &new ArrayList(PreferencesSetting#1)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.option == option
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): init'ed(this.option)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.title == title
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): init'ed(this.title)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.type == type
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): init'ed(this.type)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.validator == &new PermissiveValidator(PreferencesSetting#2)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ArrayList(PreferencesSetting#1) num objects == 1
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new PermissiveValidator(PreferencesSetting#2) num objects == 1
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ArrayList(getSources#1) num objects <= 1
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): this.validator.__Tag == com/dmdirc/config/prefs/validator/PermissiveValidator
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:hasOption
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:getOption
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:getSources
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:addListener
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:addConfigManager
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:getTarget
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)): Effects-of-calling:java.util.Collections:sort
        if (PreferencesType.MULTICHOICE.equals(type)) {
    //#PreferencesSetting.java:115: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.prefs.PreferencesType:equals(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesSetting
    //#    method: void com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    //#    unanalyzed callee: bool com.dmdirc.config.prefs.PreferencesType:equals(Object)
            throw new IllegalArgumentException("Multi-choice preferences must " +
                    "have their options specified.");
        }
        
        this.type = type;
        this.combooptions = null;
        this.validator = new PermissiveValidator<String>();
        this.domain = domain;
        this.option = option;
        this.title = title;
        this.helptext = helptext;
        
        current = IdentityManager.getGlobalConfig().getOption(domain, option);
        original = current;
    }    
    //#PreferencesSetting.java:130: end of method: void com.dmdirc.config.prefs.PreferencesSetting.com.dmdirc.config.prefs.PreferencesSetting(PreferencesType, String, String, String, String)
    
    /**
     * Creates a new preferences setting for multi-choice preferences.
     * 
     * @param domain The domain of the setting
     * @param option The option name of the setting
     * @param options A map of setting values to display names for this setting
     * @param title The title of this setting
     * @param helptext Text to display to help the user
     */
    public PreferencesSetting(final String domain, final String option,
            final String title, final String helptext,
            final Map<String, String> options) {
    //#PreferencesSetting.java:143: method: void com.dmdirc.config.prefs.PreferencesSetting.com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): ""._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): ")"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): "."._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): "<Unknown>"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): "@"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): "Config option not found: "._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): "Current ("._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigManager.stats
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.globalconfig.sources.__Lock
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.identities
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.managers
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): domain
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): domain._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): helptext
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): option
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): option._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): options
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this
    //#input(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): title
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ArrayList(PreferencesSetting#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ArrayList(getSources#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ArrayList(getSources#1).__Lock
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).network
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).server
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new HashMap(PreferencesSetting#2) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new MapList(ConfigManager#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new PermissiveValidator(PreferencesSetting#3) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.validator.__Tag
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.combooptions
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.current
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.domain
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.helptext
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.listeners
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.option
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.original
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.title
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.type
    //#output(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.validator
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): java.lang.StringBuilder:toString(...)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ArrayList(PreferencesSetting#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ArrayList(getSources#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new HashMap(PreferencesSetting#2)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new MapList(ConfigManager#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new PermissiveValidator(PreferencesSetting#3)
    //#pre[7] (void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[1] (void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): getGlobalConfig(...).sources != null
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.globalconfig == One-of{old com/dmdirc/config/IdentityManager.globalconfig, &new ConfigManager(getGlobalConfig#1)}
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.combooptions == &new HashMap(PreferencesSetting#2)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): init'ed(this.current)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.original == this.current
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.domain == domain
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): init'ed(this.domain)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.helptext == helptext
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): init'ed(this.helptext)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.listeners == &new ArrayList(PreferencesSetting#1)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.option == option
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): init'ed(this.option)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.title == title
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): init'ed(this.title)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.type == &com.dmdirc.config.prefs.PreferencesType__static_init.new PreferencesType(PreferencesType__static_init#6)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.validator == &new PermissiveValidator(PreferencesSetting#3)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ArrayList(PreferencesSetting#1) num objects == 1
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new HashMap(PreferencesSetting#2) num objects == 1
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new PermissiveValidator(PreferencesSetting#3) num objects == 1
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ArrayList(getSources#1) num objects <= 1
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): this.validator.__Tag == com/dmdirc/config/prefs/validator/PermissiveValidator
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:hasOption
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:getOption
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:getSources
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:addListener
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:addConfigManager
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:getTarget
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): Effects-of-calling:java.util.Collections:sort
    //#test_vector(void com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)): java.util.Map:containsKey(...)@155: {1}, {0}
        this.type = PreferencesType.MULTICHOICE;
        this.combooptions = new HashMap<String, String>(options);
        this.validator = new PermissiveValidator<String>();
        this.domain = domain;
        this.option = option;
        this.title = title;
        this.helptext = helptext;
        
        current = IdentityManager.getGlobalConfig().getOption(domain, option);
        original = current;
        
        if (!combooptions.containsKey(current)) {
            combooptions.put(current, "Current (" + current + ")");
        }
    }    
    //#PreferencesSetting.java:158: end of method: void com.dmdirc.config.prefs.PreferencesSetting.com.dmdirc.config.prefs.PreferencesSetting(String, String, String, String, Map)

    /**
     * Retrieves the possible options for use in a multi-choice preference.
     * 
     * @return A map of setting values to display names, representing the
     * possible options for this setting.
     */
    public Map<String, String> getComboOptions() {
        return combooptions;
    //#PreferencesSetting.java:167: method: Map com.dmdirc.config.prefs.PreferencesSetting.getComboOptions()
    //#input(Map getComboOptions()): this
    //#input(Map getComboOptions()): this.combooptions
    //#output(Map getComboOptions()): return_value
    //#post(Map getComboOptions()): return_value == this.combooptions
    //#post(Map getComboOptions()): init'ed(return_value)
    //#PreferencesSetting.java:167: end of method: Map com.dmdirc.config.prefs.PreferencesSetting.getComboOptions()
    }

    /**
     * Retrieves the help text for this setting.
     * 
     * @return This setting's help text.
     */
    public String getHelptext() {
        return helptext;
    //#PreferencesSetting.java:176: method: String com.dmdirc.config.prefs.PreferencesSetting.getHelptext()
    //#input(String getHelptext()): this
    //#input(String getHelptext()): this.helptext
    //#output(String getHelptext()): return_value
    //#post(String getHelptext()): return_value == this.helptext
    //#post(String getHelptext()): init'ed(return_value)
    //#PreferencesSetting.java:176: end of method: String com.dmdirc.config.prefs.PreferencesSetting.getHelptext()
    }

    /**
     * Retrieves the title of this setting.
     * 
     * @return This setting's title.
     */
    public String getTitle() {
        return title;
    //#PreferencesSetting.java:185: method: String com.dmdirc.config.prefs.PreferencesSetting.getTitle()
    //#input(String getTitle()): this
    //#input(String getTitle()): this.title
    //#output(String getTitle()): return_value
    //#post(String getTitle()): return_value == this.title
    //#post(String getTitle()): init'ed(return_value)
    //#PreferencesSetting.java:185: end of method: String com.dmdirc.config.prefs.PreferencesSetting.getTitle()
    }

    /**
     * Retrieves the current value of this setting.
     * 
     * @return The current value of this setting.
     */
    public String getValue() {
        return current;
    //#PreferencesSetting.java:194: method: String com.dmdirc.config.prefs.PreferencesSetting.getValue()
    //#input(String getValue()): this
    //#input(String getValue()): this.current
    //#output(String getValue()): return_value
    //#pre[2] (String getValue()): init'ed(this.current)
    //#post(String getValue()): return_value == this.current
    //#post(String getValue()): init'ed(return_value)
    //#PreferencesSetting.java:194: end of method: String com.dmdirc.config.prefs.PreferencesSetting.getValue()
    }

    /**
     * Retieves the type of this setting.
     * 
     * @return This setting's type.
     */
    public PreferencesType getType() {
        return type;
    //#PreferencesSetting.java:203: method: PreferencesType com.dmdirc.config.prefs.PreferencesSetting.getType()
    //#input(PreferencesType getType()): this
    //#input(PreferencesType getType()): this.type
    //#output(PreferencesType getType()): return_value
    //#post(PreferencesType getType()): return_value == this.type
    //#post(PreferencesType getType()): init'ed(return_value)
    //#PreferencesSetting.java:203: end of method: PreferencesType com.dmdirc.config.prefs.PreferencesSetting.getType()
    }

    /**
     * Returns a validator that can validate this setting.
     * 
     * @return This setting's validator.
     */
    public Validator<String> getValidator() {
        return validator;
    //#PreferencesSetting.java:212: method: Validator com.dmdirc.config.prefs.PreferencesSetting.getValidator()
    //#input(Validator getValidator()): this
    //#input(Validator getValidator()): this.validator
    //#output(Validator getValidator()): return_value
    //#post(Validator getValidator()): return_value == this.validator
    //#post(Validator getValidator()): init'ed(return_value)
    //#PreferencesSetting.java:212: end of method: Validator com.dmdirc.config.prefs.PreferencesSetting.getValidator()
    }
    
    /**
     * Sets the current value of this setting. Note that the setting is not
     * saved to the configuration file until the save method is called.
     * 
     * @param newValue The new value of the setting
     */
    public void setValue(final String newValue) {
        current = newValue;
    //#PreferencesSetting.java:222: method: void com.dmdirc.config.prefs.PreferencesSetting.setValue(String)
    //#input(void setValue(String)): com/dmdirc/config/prefs/SettingChangeListener.__Descendant_Table[com/dmdirc/config/prefs/SettingChangeListener]
    //#input(void setValue(String)): com/dmdirc/config/prefs/SettingChangeListener.__Descendant_Table[others]
    //#input(void setValue(String)): com/dmdirc/config/prefs/SettingChangeListener.__Dispatch_Table.settingChanged(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void setValue(String)): newValue
    //#input(void setValue(String)): this
    //#input(void setValue(String)): this.listeners
    //#output(void setValue(String)): this.current
    //#pre[3] (void setValue(String)): this.listeners != null
    //#presumption(void setValue(String)): java.util.Iterator:next(...).__Tag@224 == com/dmdirc/config/prefs/SettingChangeListener
    //#presumption(void setValue(String)): java.util.Iterator:next(...)@224 != null
    //#post(void setValue(String)): this.current == newValue
    //#post(void setValue(String)): init'ed(this.current)
    //#test_vector(void setValue(String)): java.util.Iterator:hasNext(...)@224: {0}, {1}
        
        for (SettingChangeListener listener : listeners) {
            listener.settingChanged(this);
    //#PreferencesSetting.java:225: Warning: method not available - call not analyzed
    //#    call on void settingChanged(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesSetting
    //#    method: void setValue(String)
    //#    unanalyzed callee: void settingChanged(PreferencesSetting)
        }
    }
    //#PreferencesSetting.java:227: end of method: void com.dmdirc.config.prefs.PreferencesSetting.setValue(String)

    /**
     * Determines whether or not this setting needs a restart when it's changed.
     * 
     * @return True if this setting needs a restart, false otherwise
     */
    public boolean isRestartNeeded() {
        return restartNeeded;
    //#PreferencesSetting.java:235: method: bool com.dmdirc.config.prefs.PreferencesSetting.isRestartNeeded()
    //#input(bool isRestartNeeded()): this
    //#input(bool isRestartNeeded()): this.restartNeeded
    //#output(bool isRestartNeeded()): return_value
    //#pre[2] (bool isRestartNeeded()): init'ed(this.restartNeeded)
    //#post(bool isRestartNeeded()): return_value == this.restartNeeded
    //#post(bool isRestartNeeded()): init'ed(return_value)
    //#PreferencesSetting.java:235: end of method: bool com.dmdirc.config.prefs.PreferencesSetting.isRestartNeeded()
    }

    /**
     * Sets the "restart needed" flag for this setting, indicating a client
     * restart is needed before the setting takes effect.
     * 
     * @return A reference to this setting, for convenience
     */
    public PreferencesSetting setRestartNeeded() {
        restartNeeded = true;
    //#PreferencesSetting.java:245: method: PreferencesSetting com.dmdirc.config.prefs.PreferencesSetting.setRestartNeeded()
    //#input(PreferencesSetting setRestartNeeded()): this
    //#output(PreferencesSetting setRestartNeeded()): return_value
    //#output(PreferencesSetting setRestartNeeded()): this.restartNeeded
    //#post(PreferencesSetting setRestartNeeded()): return_value == this
    //#post(PreferencesSetting setRestartNeeded()): return_value != null
    //#post(PreferencesSetting setRestartNeeded()): this.restartNeeded == 1
        return this;
    //#PreferencesSetting.java:246: end of method: PreferencesSetting com.dmdirc.config.prefs.PreferencesSetting.setRestartNeeded()
    }
    
    /**
     * Registers the specified setting change listener.
     * 
     * @param listener The listener to be registered
     * @return A reference to this setting, for convenience
     */
    public PreferencesSetting registerChangeListener(final SettingChangeListener listener) {
        listeners.add(listener);
    //#PreferencesSetting.java:256: method: PreferencesSetting com.dmdirc.config.prefs.PreferencesSetting.registerChangeListener(SettingChangeListener)
    //#input(PreferencesSetting registerChangeListener(SettingChangeListener)): listener
    //#input(PreferencesSetting registerChangeListener(SettingChangeListener)): this
    //#input(PreferencesSetting registerChangeListener(SettingChangeListener)): this.listeners
    //#output(PreferencesSetting registerChangeListener(SettingChangeListener)): return_value
    //#pre[3] (PreferencesSetting registerChangeListener(SettingChangeListener)): this.listeners != null
    //#post(PreferencesSetting registerChangeListener(SettingChangeListener)): return_value == this
    //#post(PreferencesSetting registerChangeListener(SettingChangeListener)): return_value != null
        return this;
    //#PreferencesSetting.java:257: end of method: PreferencesSetting com.dmdirc.config.prefs.PreferencesSetting.registerChangeListener(SettingChangeListener)
    }    
    
    /**
     * Saves the current value of this setting to the global configuration.
     * 
     * @return True if the setting has changed, false otherwise
     */
    public boolean save() {
        if (!needsSaving()) {
    //#PreferencesSetting.java:266: method: bool com.dmdirc.config.prefs.PreferencesSetting.save()
    //#PreferencesSetting.java:266: Warning: suspicious precondition
    //#    The precondition for this.validator.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.config.prefs.PreferencesSetting
    //#    method: bool save()
    //#    suspicious precondition index: [28]
    //#    Attribs:  Soft
    //#input(bool save()): " to "._tainted
    //#input(bool save()): ""._tainted
    //#input(bool save()): "."._tainted
    //#input(bool save()): ": setting "._tainted
    //#input(bool save()): "<Unknown>"._tainted
    //#input(bool save()): "@"._tainted
    //#input(bool save()): "Config option not found: "._tainted
    //#input(bool save()): "Unnamed"._tainted
    //#input(bool save()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesSetting]
    //#input(bool save()): __Descendant_Table[others]
    //#input(bool save()): __Dispatch_Table.needsSaving()Z
    //#input(bool save()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(bool save()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(bool save()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(bool save()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(bool save()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(bool save()): com/dmdirc/config/ConfigManager.__Dispatch_Table.configChanged(Ljava/lang/String;Ljava/lang/String;)V
    //#input(bool save()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(bool save()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getScope(Ljava/lang/String;Ljava/lang/String;)Lcom/dmdirc/config/Identity;
    //#input(bool save()): com/dmdirc/config/ConfigManager.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(bool save()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(bool save()): com/dmdirc/config/ConfigManager.__Dispatch_Table.removeIdentity(Lcom/dmdirc/config/Identity;)V
    //#input(bool save()): com/dmdirc/config/ConfigManager.stats
    //#input(bool save()): com/dmdirc/config/ConfigTarget$TYPE.GLOBAL
    //#input(bool save()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(bool save()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(bool save()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(bool save()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(bool save()): com/dmdirc/config/Identity.DOMAIN
    //#input(bool save()): com/dmdirc/config/Identity.LOGGER
    //#input(bool save()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(bool save()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.getDomains()Ljava/util/Set;
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.getName()Ljava/lang/String;
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.getOptions(Ljava/lang/String;)Ljava/util/Map;
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.removeListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.setOption(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
    //#input(bool save()): com/dmdirc/config/Identity.__Dispatch_Table.unsetOption(Ljava/lang/String;Ljava/lang/String;)V
    //#input(bool save()): com/dmdirc/config/IdentityManager.config
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.__Tag
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.file
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.globalConfig
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.globalConfig.__Tag
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.globalConfig.listeners
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.globalConfig.sources
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.listeners
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.myTarget
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.myTarget.__Tag
    //#input(bool save()): com/dmdirc/config/IdentityManager.config.myTarget.type
    //#input(bool save()): com/dmdirc/config/IdentityManager.identities
    //#input(bool save()): com/dmdirc/config/IdentityManager.managers
    //#input(bool save()): com/dmdirc/config/prefs/validator/ActionGroupValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/CommandNameValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/ConditionRuleValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/FileNameValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/IdentValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/NicknameValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/NotEmptyValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/NumericalValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/PermissiveValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/PortValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/RegexStringValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/RegexValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/StringLengthValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/URLProtocolValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/ValidationResponse.__Descendant_Table[com/dmdirc/config/prefs/validator/ValidationResponse]
    //#input(bool save()): com/dmdirc/config/prefs/validator/ValidationResponse.__Descendant_Table[others]
    //#input(bool save()): com/dmdirc/config/prefs/validator/ValidationResponse.__Dispatch_Table.isFailure()Z
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/ActionGroupValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/CommandNameValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/ConditionRuleValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/FileNameValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/IdentValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/NicknameValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/NotEmptyValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/NumericalValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/PermissiveValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/PortValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/RegexStringValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/RegexValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/StringLengthValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/URLProtocolValidator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/ValidatorChain]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/Validator]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[others]
    //#input(bool save()): com/dmdirc/config/prefs/validator/Validator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): com/dmdirc/config/prefs/validator/ValidatorChain.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool save()): this
    //#input(bool save()): this.__Tag
    //#input(bool save()): this.current
    //#input(bool save()): this.current._tainted
    //#input(bool save()): this.domain
    //#input(bool save()): this.domain._tainted
    //#input(bool save()): this.option
    //#input(bool save()): this.option._tainted
    //#input(bool save()): this.original
    //#input(bool save()): this.validator
    //#input(bool save()): this.validator.__Tag
    //#output(bool save()): com/dmdirc/config/IdentityManager.config.globalConfig
    //#output(bool save()): com/dmdirc/config/IdentityManager.config.needSave
    //#output(bool save()): java.lang.StringBuilder:toString(...)._tainted
    //#output(bool save()): new ArrayList(getSources#1) num objects
    //#output(bool save()): new ArrayList(getSources#1).__Lock
    //#output(bool save()): new ConfigManager(setOption#2) num objects
    //#output(bool save()): new ConfigManager(setOption#2).__Tag
    //#output(bool save()): new ConfigManager(setOption#2).channel
    //#output(bool save()): new ConfigManager(setOption#2).ircd
    //#output(bool save()): new ConfigManager(setOption#2).listeners
    //#output(bool save()): new ConfigManager(setOption#2).network
    //#output(bool save()): new ConfigManager(setOption#2).server
    //#output(bool save()): new ConfigManager(setOption#2).sources
    //#output(bool save()): new MapList(ConfigManager#1) num objects
    //#output(bool save()): return_value
    //#output(bool save()): this.original
    //#new obj(bool save()): java.lang.StringBuilder:toString(...)
    //#new obj(bool save()): new ArrayList(getSources#1)
    //#new obj(bool save()): new ConfigManager(setOption#2)
    //#new obj(bool save()): new MapList(ConfigManager#1)
    //#pre[20] (bool save()): this.__Tag == com/dmdirc/config/prefs/PreferencesSetting
    //#pre[21] (bool save()): init'ed(this.current)
    //#pre[1] (bool save()): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#pre[4] (bool save()): (soft) com/dmdirc/config/IdentityManager.config != null
    //#pre[6] (bool save()): (soft) com/dmdirc/config/IdentityManager.config.__Tag == com/dmdirc/config/Identity
    //#pre[7] (bool save()): (soft) com/dmdirc/config/IdentityManager.config.file != null
    //#pre[12] (bool save()): (soft) com/dmdirc/config/IdentityManager.config.listeners != null
    //#pre[13] (bool save()): (soft) com/dmdirc/config/IdentityManager.config.myTarget != null
    //#pre[14] (bool save()): (soft) com/dmdirc/config/IdentityManager.config.myTarget.__Tag == com/dmdirc/config/ConfigTarget
    //#pre[15] (bool save()): (soft) init'ed(com/dmdirc/config/IdentityManager.config.myTarget.type)
    //#pre[16] (bool save()): (soft) init'ed(com/dmdirc/config/IdentityManager.config.globalConfig)
    //#pre[18] (bool save()): (soft) init'ed(this.original)
    //#pre[28] (bool save()): (soft) this.validator.__Tag in {com/dmdirc/config/prefs/validator/ActionGroupValidator, com/dmdirc/config/prefs/validator/CommandNameValidator, com/dmdirc/config/prefs/validator/ConditionRuleValidator, com/dmdirc/config/prefs/validator/FileNameValidator, com/dmdirc/config/prefs/validator/IdentValidator, com/dmdirc/config/prefs/validator/NicknameValidator, com/dmdirc/config/prefs/validator/NotEmptyValidator, com/dmdirc/config/prefs/validator/NumericalValidator, com/dmdirc/config/prefs/validator/PermissiveValidator, com/dmdirc/config/prefs/validator/PortValidator, com/dmdirc/config/prefs/validator/RegexStringValidator, com/dmdirc/config/prefs/validator/RegexValidator, com/dmdirc/config/prefs/validator/StringLengthValidator, com/dmdirc/config/prefs/validator/URLProtocolValidator, com/dmdirc/config/prefs/validator/Validator, com/dmdirc/config/prefs/validator/ValidatorChain}
    //#post(bool save()): com/dmdirc/config/IdentityManager.config.globalConfig == One-of{old com/dmdirc/config/IdentityManager.config.globalConfig, &new ConfigManager(setOption#2)}
    //#post(bool save()): init'ed(com/dmdirc/config/IdentityManager.config.globalConfig)
    //#post(bool save()): possibly_updated(com/dmdirc/config/IdentityManager.config.needSave)
    //#post(bool save()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(bool save()): init'ed(return_value)
    //#post(bool save()): this.original == One-of{old this.original, this.current}
    //#post(bool save()): init'ed(this.original)
    //#post(bool save()): new ArrayList(getSources#1) num objects <= 1
    //#post(bool save()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(bool save()): new ConfigManager(setOption#2) num objects <= 1
    //#post(bool save()): init'ed(new ConfigManager(setOption#2).__Tag)
    //#post(bool save()): init'ed(new ConfigManager(setOption#2).channel)
    //#post(bool save()): init'ed(new ConfigManager(setOption#2).ircd)
    //#post(bool save()): init'ed(new ConfigManager(setOption#2).listeners)
    //#post(bool save()): init'ed(new ConfigManager(setOption#2).network)
    //#post(bool save()): init'ed(new ConfigManager(setOption#2).server)
    //#post(bool save()): init'ed(new ConfigManager(setOption#2).sources)
    //#post(bool save()): new MapList(ConfigManager#1) num objects <= 1
    //#unanalyzed(bool save()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(bool save()): Effects-of-calling:validate
    //#unanalyzed(bool save()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(bool save()): Effects-of-calling:java.util.ArrayList:iterator
    //#unanalyzed(bool save()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(bool save()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.interfaces.ConfigChangeListener:configChanged
    //#unanalyzed(bool save()): Effects-of-calling:java.util.Map:remove
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomains
    //#unanalyzed(bool save()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(bool save()): Effects-of-calling:java.util.List:add
    //#unanalyzed(bool save()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(bool save()): Effects-of-calling:java.util.Map:keySet
    //#unanalyzed(bool save()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(bool save()): Effects-of-calling:java.util.HashMap
    //#unanalyzed(bool save()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(bool save()): Effects-of-calling:java.util.HashSet
    //#unanalyzed(bool save()): Effects-of-calling:hasOption
    //#unanalyzed(bool save()): Effects-of-calling:getOption
    //#unanalyzed(bool save()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(bool save()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(bool save()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(bool save()): Effects-of-calling:java.util.logging.Logger:finer
    //#unanalyzed(bool save()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(bool save()): Effects-of-calling:getSources
    //#unanalyzed(bool save()): Effects-of-calling:addListener
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(bool save()): Effects-of-calling:addConfigManager
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.util.MapList:containsKey
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.util.MapList:get
    //#unanalyzed(bool save()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(bool save()): Effects-of-calling:getDomains
    //#unanalyzed(bool save()): Effects-of-calling:java.util.List:contains
    //#unanalyzed(bool save()): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(bool save()): Effects-of-calling:getOptions
    //#unanalyzed(bool save()): Effects-of-calling:equals
    //#unanalyzed(bool save()): Effects-of-calling:removeListener
    //#unanalyzed(bool save()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(bool save()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(bool save()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(bool save()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(bool save()): Effects-of-calling:getTarget
    //#unanalyzed(bool save()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(bool save()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(bool save()): Effects-of-calling:java.util.Collections:sort
    //#test_vector(bool save()): this.current: Inverse{null}, Addr_Set{null}
            return false;
        }
        
        if (current == null) {
            IdentityManager.getConfigIdentity().unsetOption(domain, option);
        } else {
            IdentityManager.getConfigIdentity().setOption(domain, option, current);
        }

        original = current;
        return true;
    //#PreferencesSetting.java:277: end of method: bool com.dmdirc.config.prefs.PreferencesSetting.save()
    }
    
    /**
     * Dismisses changes to this setting.
     */
    public void dismiss() {
        if ((original != null && original.equals(current))
    //#PreferencesSetting.java:284: method: void com.dmdirc.config.prefs.PreferencesSetting.dismiss()
    //#input(void dismiss()): com/dmdirc/config/prefs/SettingChangeListener.__Descendant_Table[com/dmdirc/config/prefs/SettingChangeListener]
    //#input(void dismiss()): com/dmdirc/config/prefs/SettingChangeListener.__Descendant_Table[others]
    //#input(void dismiss()): com/dmdirc/config/prefs/SettingChangeListener.__Dispatch_Table.settingChanged(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void dismiss()): this
    //#input(void dismiss()): this.current
    //#input(void dismiss()): this.listeners
    //#input(void dismiss()): this.original
    //#output(void dismiss()): this.current
    //#pre[4] (void dismiss()): init'ed(this.original)
    //#pre[1] (void dismiss()): (soft) init'ed(this.current)
    //#pre[3] (void dismiss()): (soft) this.listeners != null
    //#presumption(void dismiss()): java.util.Iterator:next(...).__Tag@291 == com/dmdirc/config/prefs/SettingChangeListener
    //#presumption(void dismiss()): java.util.Iterator:next(...)@291 != null
    //#post(void dismiss()): this.current == One-of{old this.current, this.original}
    //#post(void dismiss()): init'ed(this.current)
    //#test_vector(void dismiss()): this.current: Inverse{null}, Addr_Set{null}
    //#test_vector(void dismiss()): this.original: Addr_Set{null}, Inverse{null}
    //#test_vector(void dismiss()): java.lang.String:equals(...)@284: {1}, {0}
    //#test_vector(void dismiss()): java.util.Iterator:hasNext(...)@291: {0}, {1}
                || (original == null && current == null)) {
            return;
        }
        
        current = original;
        
        for (SettingChangeListener listener : listeners) {
            listener.settingChanged(this);
    //#PreferencesSetting.java:292: Warning: method not available - call not analyzed
    //#    call on void settingChanged(PreferencesSetting)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesSetting
    //#    method: void dismiss()
    //#    unanalyzed callee: void settingChanged(PreferencesSetting)
        }
    }
    //#PreferencesSetting.java:294: end of method: void com.dmdirc.config.prefs.PreferencesSetting.dismiss()
    
    /**
     * Does the setting need saving?
     * 
     * @return true iif the setting will be changed if saved
     */
    public boolean needsSaving() {
        return (current == null || !current.equals(original))
    //#PreferencesSetting.java:302: method: bool com.dmdirc.config.prefs.PreferencesSetting.needsSaving()
    //#PreferencesSetting.java:302: Warning: call too complex - analysis skipped
    //#    call on ValidationResponse validate(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesSetting
    //#    method: bool needsSaving()
    //#    unanalyzed callee: ValidationResponse validate(Object)
    //#PreferencesSetting.java:302: Warning: suspicious precondition
    //#    The precondition for this.validator.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.config.prefs.PreferencesSetting
    //#    method: bool needsSaving()
    //#    suspicious precondition index: [5]
    //#    Attribs:  Soft
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/ActionGroupValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/CommandNameValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/ConditionRuleValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/FileNameValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/IdentValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/NicknameValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/NotEmptyValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/NumericalValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/PermissiveValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/PortValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/RegexStringValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/RegexValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/StringLengthValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/URLProtocolValidator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/ValidationResponse.__Descendant_Table[com/dmdirc/config/prefs/validator/ValidationResponse]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/ValidationResponse.__Descendant_Table[others]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/ValidationResponse.__Dispatch_Table.isFailure()Z
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/ActionGroupValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/CommandNameValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/ConditionRuleValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/FileNameValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/IdentValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/NicknameValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/NotEmptyValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/NumericalValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/PermissiveValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/PortValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/RegexStringValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/RegexValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/StringLengthValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/URLProtocolValidator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/ValidatorChain]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[com/dmdirc/config/prefs/validator/Validator]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Descendant_Table[others]
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/Validator.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): com/dmdirc/config/prefs/validator/ValidatorChain.__Dispatch_Table.validate(Ljava/lang/Object;)Lcom/dmdirc/config/prefs/validator/ValidationResponse;
    //#input(bool needsSaving()): this
    //#input(bool needsSaving()): this.current
    //#input(bool needsSaving()): this.original
    //#input(bool needsSaving()): this.validator
    //#input(bool needsSaving()): this.validator.__Tag
    //#output(bool needsSaving()): return_value
    //#pre[2] (bool needsSaving()): init'ed(this.current)
    //#pre[3] (bool needsSaving()): (soft) init'ed(this.original)
    //#pre[5] (bool needsSaving()): (soft) this.validator.__Tag in {com/dmdirc/config/prefs/validator/ActionGroupValidator, com/dmdirc/config/prefs/validator/CommandNameValidator, com/dmdirc/config/prefs/validator/ConditionRuleValidator, com/dmdirc/config/prefs/validator/FileNameValidator, com/dmdirc/config/prefs/validator/IdentValidator, com/dmdirc/config/prefs/validator/NicknameValidator, com/dmdirc/config/prefs/validator/NotEmptyValidator, com/dmdirc/config/prefs/validator/NumericalValidator, com/dmdirc/config/prefs/validator/PermissiveValidator, com/dmdirc/config/prefs/validator/PortValidator, com/dmdirc/config/prefs/validator/RegexStringValidator, com/dmdirc/config/prefs/validator/RegexValidator, com/dmdirc/config/prefs/validator/StringLengthValidator, com/dmdirc/config/prefs/validator/URLProtocolValidator, com/dmdirc/config/prefs/validator/Validator, com/dmdirc/config/prefs/validator/ValidatorChain}
    //#presumption(bool needsSaving()): validate(...).__Tag@302 == com/dmdirc/config/prefs/validator/ValidationResponse
    //#presumption(bool needsSaving()): validate(...)@302 != null
    //#post(bool needsSaving()): init'ed(return_value)
    //#test_vector(bool needsSaving()): this.current: Addr_Set{null}, Inverse{null}
    //#PreferencesSetting.java:302: end of method: bool com.dmdirc.config.prefs.PreferencesSetting.needsSaving()
                && (current != null || original != null)
                && (validator == null || !validator.validate(current).isFailure());
    }

}
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Descendant_Table[com/dmdirc/config/prefs/PreferencesSetting]
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.dismiss()V
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getComboOptions()Ljava/util/Map;
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getHelptext()Ljava/lang/String;
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getTitle()Ljava/lang/String;
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getType()Lcom/dmdirc/config/prefs/PreferencesType;
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getValidator()Lcom/dmdirc/config/prefs/validator/Validator;
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getValue()Ljava/lang/String;
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.isRestartNeeded()Z
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.needsSaving()Z
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.registerChangeListener(Lcom/dmdirc/config/prefs/SettingChangeListener;)Lcom/dmdirc/config/prefs/PreferencesSetting;
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.save()Z
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.setRestartNeeded()Lcom/dmdirc/config/prefs/PreferencesSetting;
    //#output(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.setValue(Ljava/lang/String;)V
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Descendant_Table[com/dmdirc/config/prefs/PreferencesSetting] == &__Dispatch_Table
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.dismiss()V == &dismiss
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getComboOptions()Ljava/util/Map; == &getComboOptions
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getHelptext()Ljava/lang/String; == &getHelptext
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getTitle()Ljava/lang/String; == &getTitle
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getType()Lcom/dmdirc/config/prefs/PreferencesType; == &getType
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getValidator()Lcom/dmdirc/config/prefs/validator/Validator; == &getValidator
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.getValue()Ljava/lang/String; == &getValue
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.isRestartNeeded()Z == &isRestartNeeded
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.needsSaving()Z == &needsSaving
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.registerChangeListener(Lcom/dmdirc/config/prefs/SettingChangeListener;)Lcom/dmdirc/config/prefs/PreferencesSetting; == &registerChangeListener
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.save()Z == &save
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.setRestartNeeded()Lcom/dmdirc/config/prefs/PreferencesSetting; == &setRestartNeeded
    //#post(com.dmdirc.config.prefs.PreferencesSetting__static_init): __Dispatch_Table.setValue(Ljava/lang/String;)V == &setValue
    //#PreferencesSetting.java:: end of method: com.dmdirc.config.prefs.PreferencesSetting.com.dmdirc.config.prefs.PreferencesSetting__static_init
    //#PreferencesSetting.java:: end of class: com.dmdirc.config.prefs.PreferencesSetting
