//# 1 errors, 1,706 messages
//#
/*
    //#PreferencesManager.java:1:1: class: com.dmdirc.config.prefs.PreferencesManager
    //#PreferencesManager.java:1:1: method: com.dmdirc.config.prefs.PreferencesManager.com.dmdirc.config.prefs.PreferencesManager__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.Main;
import com.dmdirc.actions.ActionManager;
import com.dmdirc.actions.CoreActionType;
import com.dmdirc.config.prefs.validator.NumericalValidator;
import com.dmdirc.plugins.PluginManager;
import com.dmdirc.plugins.Service;
import com.dmdirc.util.ListenerList;

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

import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;

/**
 * Manages categories that should appear in the preferences dialog.
 *
 * @author chris
 */
public class PreferencesManager {

    /** A list of categories. */
    private final List<PreferencesCategory> categories
            = new ArrayList<PreferencesCategory>();

    /** A list of listeners. */
    private final ListenerList listeners = new ListenerList();
    //#PreferencesManager.java:52: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void com.dmdirc.config.prefs.PreferencesManager()
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList()

    /**
     * Creates a new instance of PreferencesManager.
     */
    public PreferencesManager() {
    //#PreferencesManager.java:57: method: void com.dmdirc.config.prefs.PreferencesManager.com.dmdirc.config.prefs.PreferencesManager()
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): ""._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "."._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "<Unknown>"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "@"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "Config option not found: "._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "closemessage"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "cyclemessage"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "general"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "kickmessage"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "partmessage"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "quitmessage"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): "reconnectmessage"._tainted
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): __Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com.dmdirc.actions.CoreActionType.CLIENT_PREFS_OPENED
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): 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.PreferencesManager()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/ConfigManager.stats
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/IdentityManager.identities
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/IdentityManager.managers
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/prefs/PreferencesType.TEXT
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): this
    //#input(void com.dmdirc.config.prefs.PreferencesManager()): this.__Tag
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ArrayList(PreferencesManager#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ArrayList(getSources#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ArrayList(getSources#1).__Lock
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1).channel
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1).network
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1).server
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1).sources
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new ListenerList(PreferencesManager#2) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): new MapList(ConfigManager#1) num objects
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): this.__Tag
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): this.categories
    //#output(void com.dmdirc.config.prefs.PreferencesManager()): this.listeners
    //#new obj(void com.dmdirc.config.prefs.PreferencesManager()): java.lang.StringBuilder:toString(...)
    //#new obj(void com.dmdirc.config.prefs.PreferencesManager()): new ArrayList(PreferencesManager#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesManager()): new ArrayList(getSources#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1)
    //#new obj(void com.dmdirc.config.prefs.PreferencesManager()): new ListenerList(PreferencesManager#2)
    //#new obj(void com.dmdirc.config.prefs.PreferencesManager()): new MapList(ConfigManager#1)
    //#pre[7] (void com.dmdirc.config.prefs.PreferencesManager()): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[8] (void com.dmdirc.config.prefs.PreferencesManager()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[1] (void com.dmdirc.config.prefs.PreferencesManager()): (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.PreferencesManager()): init'ed(com.dmdirc.actions.CoreActionType.CLIENT_PREFS_OPENED)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): new ArrayList(getSources#1) num objects == 0
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): new MapList(ConfigManager#1) num objects == 0
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): this.categories == &new ArrayList(PreferencesManager#1)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): this.listeners == &new ListenerList(PreferencesManager#2)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): new ArrayList(PreferencesManager#1) num objects == 1
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): new ListenerList(PreferencesManager#2) num objects == 1
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void com.dmdirc.config.prefs.PreferencesManager()): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.Main:getUI
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getPluginPrefsPanel
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:hasOption
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:getOption
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:getSources
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:addListener
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:addConfigManager
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:getTarget
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:addNotificationsCategory
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getUrlHandlersPrefsPanel
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getUpdatesPrefsPanel
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:addGeneralCategory
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:addConnectionCategory
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:addGuiCategory
    //#unanalyzed(void com.dmdirc.config.prefs.PreferencesManager()): Effects-of-calling:addAdvancedCategory
        addDefaultCategories();

        ActionManager.processEvent(CoreActionType.CLIENT_PREFS_OPENED, null, this);
    //#PreferencesManager.java:60: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.actions.ActionManager:processEvent(ActionType, StringBuffer, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void com.dmdirc.config.prefs.PreferencesManager()
    //#    unanalyzed callee: void com.dmdirc.actions.ActionManager:processEvent(ActionType, StringBuffer, Object[])
    }
    //#PreferencesManager.java:61: end of method: void com.dmdirc.config.prefs.PreferencesManager.com.dmdirc.config.prefs.PreferencesManager()

    /**
     * Adds the specified category to the preferences manager.
     *
     * @param category The category to be added
     */
    public void addCategory(final PreferencesCategory category) {
        categories.add(category);
    //#PreferencesManager.java:69: method: void com.dmdirc.config.prefs.PreferencesManager.addCategory(PreferencesCategory)
    //#input(void addCategory(PreferencesCategory)): category
    //#input(void addCategory(PreferencesCategory)): this
    //#input(void addCategory(PreferencesCategory)): this.categories
    //#pre[3] (void addCategory(PreferencesCategory)): this.categories != null
    }
    //#PreferencesManager.java:70: end of method: void com.dmdirc.config.prefs.PreferencesManager.addCategory(PreferencesCategory)

    /**
     * Retrieves a list of categories registered with the preferences manager.
     *
     * @return An ordered list of categories
     */
    public List<PreferencesCategory> getCategories() {
        return categories;
    //#PreferencesManager.java:78: method: List com.dmdirc.config.prefs.PreferencesManager.getCategories()
    //#input(List getCategories()): this
    //#input(List getCategories()): this.categories
    //#output(List getCategories()): return_value
    //#post(List getCategories()): return_value == this.categories
    //#post(List getCategories()): init'ed(return_value)
    //#PreferencesManager.java:78: end of method: List com.dmdirc.config.prefs.PreferencesManager.getCategories()
    }

    /**
     * Finds and retrieves the category with the specified name.
     *
     * @param name The name (title) of the category to find.
     * @return The appropriate category, or null if none was found
     */
    public PreferencesCategory getCategory(final String name) {
        for (PreferencesCategory category : categories) {
    //#PreferencesManager.java:88: method: PreferencesCategory com.dmdirc.config.prefs.PreferencesManager.getCategory(String)
    //#input(PreferencesCategory getCategory(String)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(PreferencesCategory getCategory(String)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(PreferencesCategory getCategory(String)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(PreferencesCategory getCategory(String)): name
    //#input(PreferencesCategory getCategory(String)): this
    //#input(PreferencesCategory getCategory(String)): this.categories
    //#output(PreferencesCategory getCategory(String)): return_value
    //#pre[3] (PreferencesCategory getCategory(String)): this.categories != null
    //#presumption(PreferencesCategory getCategory(String)): category.title@88 != null
    //#presumption(PreferencesCategory getCategory(String)): java.util.Iterator:next(...).__Tag@88 == com/dmdirc/config/prefs/PreferencesCategory
    //#presumption(PreferencesCategory getCategory(String)): java.util.Iterator:next(...)@88 != null
    //#post(PreferencesCategory getCategory(String)): init'ed(return_value)
    //#test_vector(PreferencesCategory getCategory(String)): java.lang.String:equals(...)@89: {0}, {1}
    //#test_vector(PreferencesCategory getCategory(String)): java.util.Iterator:hasNext(...)@88: {0}, {1}
            if (category.getTitle().equals(name)) {
                return category;
            }
        }

        return null;
    //#PreferencesManager.java:94: end of method: PreferencesCategory com.dmdirc.config.prefs.PreferencesManager.getCategory(String)
    }

    /**
     * Saves all the settings in this manager.
     *
     * @return Is a restart needed after saving?
     */
    public boolean save() {
        fireSaveListeners();
    //#PreferencesManager.java:103: method: bool com.dmdirc.config.prefs.PreferencesManager.save()
    //#input(bool save()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(bool save()): __Descendant_Table[others]
    //#input(bool save()): __Dispatch_Table.fireSaveListeners()V
    //#input(bool save()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(bool save()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(bool save()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.getObject()Lcom/dmdirc/config/prefs/PreferencesInterface;
    //#input(bool save()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.getSubcats()Ljava/util/List;
    //#input(bool save()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(bool save()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.save()Z
    //#input(bool save()): com/dmdirc/config/prefs/PreferencesInterface.__Descendant_Table[com/dmdirc/config/prefs/PreferencesInterface]
    //#input(bool save()): com/dmdirc/config/prefs/PreferencesInterface.__Descendant_Table[others]
    //#input(bool save()): com/dmdirc/config/prefs/PreferencesInterface.__Dispatch_Table.save()V
    //#input(bool save()): this
    //#input(bool save()): this.__Tag
    //#input(bool save()): this.categories
    //#input(bool save()): this.listeners
    //#output(bool save()): return_value
    //#pre[2] (bool save()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[3] (bool save()): this.categories != null
    //#pre[4] (bool save()): this.listeners != null
    //#presumption(bool save()): java.util.Iterator:next(...).__Tag@106 == com/dmdirc/config/prefs/PreferencesCategory
    //#presumption(bool save()): java.util.Iterator:next(...)@106 != null
    //#post(bool save()): init'ed(return_value)
    //#unanalyzed(bool save()): Effects-of-calling:java.util.List: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.util.ListenerList:get
    //#unanalyzed(bool save()): Effects-of-calling:save
    //#unanalyzed(bool save()): Effects-of-calling:fireSaveListener
    //#test_vector(bool save()): java.util.Iterator:hasNext(...)@106: {0}, {1}
    //#test_vector(bool save()): save(...)@107: {0}, {1}
        
        boolean restart = false;
        for (PreferencesCategory category : categories) {
            if (category.save()) {
    //#PreferencesManager.java:107: Warning: call too complex - analysis skipped
    //#    call on bool save()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: bool save()
    //#    unanalyzed callee: bool save()
                restart = true;
            }
        }

        return restart;
    //#PreferencesManager.java:112: end of method: bool com.dmdirc.config.prefs.PreferencesManager.save()
    }

    /**
     * Dismisses all the settings in this manager.
     */
    public void dismiss() {
        for (PreferencesCategory category : categories) {
    //#PreferencesManager.java:119: method: void com.dmdirc.config.prefs.PreferencesManager.dismiss()
    //#input(void dismiss()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void dismiss()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void dismiss()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.dismiss()V
    //#input(void dismiss()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.getSubcats()Ljava/util/List;
    //#input(void dismiss()): com/dmdirc/config/prefs/PreferencesSetting.__Descendant_Table[com/dmdirc/config/prefs/PreferencesSetting]
    //#input(void dismiss()): com/dmdirc/config/prefs/PreferencesSetting.__Descendant_Table[others]
    //#input(void dismiss()): com/dmdirc/config/prefs/PreferencesSetting.__Dispatch_Table.dismiss()V
    //#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.categories
    //#pre[2] (void dismiss()): this.categories != null
    //#presumption(void dismiss()): category.settings@119 != null
    //#presumption(void dismiss()): category.subcats@119 != null
    //#presumption(void dismiss()): java.util.Iterator:next(...).__Tag@119 == com/dmdirc/config/prefs/PreferencesCategory
    //#presumption(void dismiss()): java.util.Iterator:next(...)@119 != null
    //#unanalyzed(void dismiss()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void dismiss()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void dismiss()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void dismiss()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void dismiss()): Effects-of-calling:settingChanged
    //#unanalyzed(void dismiss()): Effects-of-calling:dismiss
    //#test_vector(void dismiss()): java.util.Iterator:hasNext(...)@119: {0}, {1}
            category.dismiss();
        }
    }
    //#PreferencesManager.java:122: end of method: void com.dmdirc.config.prefs.PreferencesManager.dismiss()

    /**
     * Adds the default categories to this preferences manager.
     */
    private void addDefaultCategories() {
        addGeneralCategory();
    //#PreferencesManager.java:128: method: void com.dmdirc.config.prefs.PreferencesManager.addDefaultCategories()
    //#PreferencesManager.java:128: Warning: call too complex - analysis skipped
    //#    call on void addGeneralCategory()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addDefaultCategories()
    //#    unanalyzed callee: void addGeneralCategory()
    //#input(void addDefaultCategories()): ""._tainted
    //#input(void addDefaultCategories()): "."._tainted
    //#input(void addDefaultCategories()): "<Unknown>"._tainted
    //#input(void addDefaultCategories()): "@"._tainted
    //#input(void addDefaultCategories()): "Config option not found: "._tainted
    //#input(void addDefaultCategories()): "closemessage"._tainted
    //#input(void addDefaultCategories()): "cyclemessage"._tainted
    //#input(void addDefaultCategories()): "general"._tainted
    //#input(void addDefaultCategories()): "kickmessage"._tainted
    //#input(void addDefaultCategories()): "partmessage"._tainted
    //#input(void addDefaultCategories()): "quitmessage"._tainted
    //#input(void addDefaultCategories()): "reconnectmessage"._tainted
    //#input(void addDefaultCategories()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void addDefaultCategories()): __Descendant_Table[others]
    //#input(void addDefaultCategories()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addDefaultCategories()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void addDefaultCategories()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigManager.stats
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void addDefaultCategories()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void addDefaultCategories()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void addDefaultCategories()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void addDefaultCategories()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void addDefaultCategories()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addDefaultCategories()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void addDefaultCategories()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void addDefaultCategories()): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void addDefaultCategories()): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void addDefaultCategories()): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void addDefaultCategories()): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void addDefaultCategories()): com/dmdirc/config/IdentityManager.identities
    //#input(void addDefaultCategories()): com/dmdirc/config/IdentityManager.managers
    //#input(void addDefaultCategories()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addDefaultCategories()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addDefaultCategories()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void addDefaultCategories()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void addDefaultCategories()): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void addDefaultCategories()): com/dmdirc/config/prefs/PreferencesType.TEXT
    //#input(void addDefaultCategories()): this
    //#input(void addDefaultCategories()): this.__Tag
    //#input(void addDefaultCategories()): this.categories
    //#output(void addDefaultCategories()): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void addDefaultCategories()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void addDefaultCategories()): new ArrayList(getSources#1) num objects
    //#output(void addDefaultCategories()): new ArrayList(getSources#1).__Lock
    //#output(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1).channel
    //#output(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1).network
    //#output(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1).server
    //#output(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1).sources
    //#output(void addDefaultCategories()): new MapList(ConfigManager#1) num objects
    //#new obj(void addDefaultCategories()): java.lang.StringBuilder:toString(...)
    //#new obj(void addDefaultCategories()): new ArrayList(getSources#1)
    //#new obj(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1)
    //#new obj(void addDefaultCategories()): new MapList(ConfigManager#1)
    //#pre[7] (void addDefaultCategories()): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[9] (void addDefaultCategories()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[10] (void addDefaultCategories()): this.categories != null
    //#pre[1] (void addDefaultCategories()): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#post(void addDefaultCategories()): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void addDefaultCategories()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void addDefaultCategories()): new ArrayList(getSources#1) num objects == 0
    //#post(void addDefaultCategories()): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void addDefaultCategories()): new MapList(ConfigManager#1) num objects == 0
    //#post(void addDefaultCategories()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void addDefaultCategories()): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addDefaultCategories()): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addDefaultCategories()): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addDefaultCategories()): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addDefaultCategories()): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addDefaultCategories()): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addDefaultCategories()): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.Main:getUI
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getPluginPrefsPanel
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:hasOption
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:getOption
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:getSources
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:addListener
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:addConfigManager
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:getTarget
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:addNotificationsCategory
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getUrlHandlersPrefsPanel
    //#unanalyzed(void addDefaultCategories()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getUpdatesPrefsPanel
        addConnectionCategory();
    //#PreferencesManager.java:129: Warning: call too complex - analysis skipped
    //#    call on void addConnectionCategory()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addDefaultCategories()
    //#    unanalyzed callee: void addConnectionCategory()
        addMessagesCategory();
        addGuiCategory();
    //#PreferencesManager.java:131: Warning: call too complex - analysis skipped
    //#    call on void addGuiCategory()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addDefaultCategories()
    //#    unanalyzed callee: void addGuiCategory()
        addPluginsCategory();
        addUrlHandlerCategory();
        addUpdatesCategory();
        addAdvancedCategory();
    //#PreferencesManager.java:135: Warning: call too complex - analysis skipped
    //#    call on void addAdvancedCategory()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addDefaultCategories()
    //#    unanalyzed callee: void addAdvancedCategory()
    }
    //#PreferencesManager.java:136: end of method: void com.dmdirc.config.prefs.PreferencesManager.addDefaultCategories()

    /**
     * Creates and adds the "General" category.
     */
    private void addGeneralCategory() {
        final PreferencesCategory category = new PreferencesCategory("General", "");
    //#PreferencesManager.java:142: method: void com.dmdirc.config.prefs.PreferencesManager.addGeneralCategory()
    //#input(void addGeneralCategory()): ""._tainted
    //#input(void addGeneralCategory()): ")"._tainted
    //#input(void addGeneralCategory()): "."._tainted
    //#input(void addGeneralCategory()): "<Unknown>"._tainted
    //#input(void addGeneralCategory()): "@"._tainted
    //#input(void addGeneralCategory()): "Config option not found: "._tainted
    //#input(void addGeneralCategory()): "Current ("._tainted
    //#input(void addGeneralCategory()): "awayindicator"._tainted
    //#input(void addGeneralCategory()): "channel"._tainted
    //#input(void addGeneralCategory()): "confirmQuit"._tainted
    //#input(void addGeneralCategory()): "friendlymodes"._tainted
    //#input(void addGeneralCategory()): "general"._tainted
    //#input(void addGeneralCategory()): "hidequeries"._tainted
    //#input(void addGeneralCategory()): "pasteProtectionLimit"._tainted
    //#input(void addGeneralCategory()): "sendwho"._tainted
    //#input(void addGeneralCategory()): "server"._tainted
    //#input(void addGeneralCategory()): "showmodeprefix"._tainted
    //#input(void addGeneralCategory()): "splitusermodes"._tainted
    //#input(void addGeneralCategory()): "style"._tainted
    //#input(void addGeneralCategory()): "tabcompletion"._tainted
    //#input(void addGeneralCategory()): "ui"._tainted
    //#input(void addGeneralCategory()): "whotime"._tainted
    //#input(void addGeneralCategory()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void addGeneralCategory()): __Descendant_Table[others]
    //#input(void addGeneralCategory()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addGeneralCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void addGeneralCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigManager.stats
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void addGeneralCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void addGeneralCategory()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void addGeneralCategory()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void addGeneralCategory()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void addGeneralCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addGeneralCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void addGeneralCategory()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void addGeneralCategory()): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void addGeneralCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void addGeneralCategory()): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void addGeneralCategory()): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void addGeneralCategory()): com/dmdirc/config/IdentityManager.identities
    //#input(void addGeneralCategory()): com/dmdirc/config/IdentityManager.managers
    //#input(void addGeneralCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addGeneralCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addGeneralCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void addGeneralCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void addGeneralCategory()): com/dmdirc/config/prefs/PreferencesType.BOOLEAN
    //#input(void addGeneralCategory()): com/dmdirc/config/prefs/PreferencesType.DURATION
    //#input(void addGeneralCategory()): com/dmdirc/config/prefs/PreferencesType.INTEGER
    //#input(void addGeneralCategory()): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void addGeneralCategory()): this
    //#input(void addGeneralCategory()): this.__Tag
    //#input(void addGeneralCategory()): this.categories
    //#output(void addGeneralCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void addGeneralCategory()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void addGeneralCategory()): new ArrayList(getSources#1) num objects
    //#output(void addGeneralCategory()): new ArrayList(getSources#1).__Lock
    //#output(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).channel
    //#output(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).network
    //#output(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).server
    //#output(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).sources
    //#output(void addGeneralCategory()): new MapList(ConfigManager#1) num objects
    //#new obj(void addGeneralCategory()): java.lang.StringBuilder:toString(...)
    //#new obj(void addGeneralCategory()): new ArrayList(getSources#1)
    //#new obj(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1)
    //#new obj(void addGeneralCategory()): new MapList(ConfigManager#1)
    //#pre[7] (void addGeneralCategory()): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[9] (void addGeneralCategory()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[10] (void addGeneralCategory()): this.categories != null
    //#pre[1] (void addGeneralCategory()): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void addGeneralCategory()): com.dmdirc.plugins.PluginManager:getPluginManager(...)@176 != null
    //#presumption(void addGeneralCategory()): com.dmdirc.plugins.PluginManager:getServicesByType(...)@176 != null
    //#presumption(void addGeneralCategory()): java.util.Iterator:next(...)@176 != null
    //#post(void addGeneralCategory()): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void addGeneralCategory()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void addGeneralCategory()): new ArrayList(getSources#1) num objects == 0
    //#post(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void addGeneralCategory()): new MapList(ConfigManager#1) num objects == 0
    //#post(void addGeneralCategory()): new ArrayList(getSources#1) num objects <= 1
    //#post(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addGeneralCategory()): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addGeneralCategory()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void addGeneralCategory()): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addGeneralCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void addGeneralCategory()): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addGeneralCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void addGeneralCategory()): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addGeneralCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addGeneralCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addGeneralCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void addGeneralCategory()): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addGeneralCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addGeneralCategory()): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addGeneralCategory()): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addGeneralCategory()): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void addGeneralCategory()): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void addGeneralCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:hasOption
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:getOption
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:getSources
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:addListener
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:addConfigManager
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:getTarget
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals
    //#unanalyzed(void addGeneralCategory()): Effects-of-calling:java.util.HashMap
    //#test_vector(void addGeneralCategory()): java.util.Iterator:hasNext(...)@176: {0}, {1}

        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "ui", "confirmQuit", "Confirm quit",
                "Do you want to confirm closing the client?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "channel", "splitusermodes", "Split user modes",
                "Show individual mode lines for each mode change that affects" +
                " a user (e.g. op, devoice)"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "channel", "sendwho", "Send channel WHOs",
                "Request information (away state, hostname, etc) on channel " +
                "users automatically"));
        category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
                "general", "whotime", "Who request interval",
                "How often to send WHO requests for a channel"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "channel", "showmodeprefix", "Show mode prefix",
                "Prefix users' names with their mode in channels"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "server", "friendlymodes", "Friendly modes",
                "Show friendly mode names"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "hidequeries", "Hide queries",
                "Initially hide queries so that they don't steal focus"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "ui", "awayindicator", "Away indicator",
                "Shows an indicator in windows when you are marked as away"));
        category.addSetting(new PreferencesSetting(PreferencesType.INTEGER,
                new NumericalValidator(0, 100), "ui", "pasteProtectionLimit",
                "Paste protection trigger", "Confirm pasting of text that " +
                "contains more than this many lines."));
        
        final Map<String, String> taboptions = new HashMap<String, String>();
        for (Service service : PluginManager.getPluginManager().getServicesByType("tabcompletion")) {
    //#PreferencesManager.java:176: Warning: method not available - call not analyzed
    //#    call on PluginManager com.dmdirc.plugins.PluginManager:getPluginManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addGeneralCategory()
    //#    unanalyzed callee: PluginManager com.dmdirc.plugins.PluginManager:getPluginManager()
    //#PreferencesManager.java:176: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.plugins.PluginManager:getServicesByType(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addGeneralCategory()
    //#    unanalyzed callee: List com.dmdirc.plugins.PluginManager:getServicesByType(String)
            taboptions.put(service.getName(), service.getName());
    //#PreferencesManager.java:177: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.plugins.Service:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addGeneralCategory()
    //#    unanalyzed callee: String com.dmdirc.plugins.Service:getName()
        }
        
        category.addSetting(new PreferencesSetting("tabcompletion", "style",
                "Tab completion style", "Determines the behaviour of " +
                "the tab completer when there are multiple matches.", taboptions));

        addCategory(category);
    }
    //#PreferencesManager.java:185: end of method: void com.dmdirc.config.prefs.PreferencesManager.addGeneralCategory()

    /**
     * Creates and adds the "Connection" category.
     */
    private void addConnectionCategory() {
        final PreferencesCategory category = new PreferencesCategory("Connection",
    //#PreferencesManager.java:191: method: void com.dmdirc.config.prefs.PreferencesManager.addConnectionCategory()
    //#input(void addConnectionCategory()): ""._tainted
    //#input(void addConnectionCategory()): "."._tainted
    //#input(void addConnectionCategory()): "<Unknown>"._tainted
    //#input(void addConnectionCategory()): "@"._tainted
    //#input(void addConnectionCategory()): "Config option not found: "._tainted
    //#input(void addConnectionCategory()): "closechannelsondisconnect"._tainted
    //#input(void addConnectionCategory()): "closechannelsonquit"._tainted
    //#input(void addConnectionCategory()): "closequeriesondisconnect"._tainted
    //#input(void addConnectionCategory()): "closequeriesonquit"._tainted
    //#input(void addConnectionCategory()): "general"._tainted
    //#input(void addConnectionCategory()): "pingfrequency"._tainted
    //#input(void addConnectionCategory()): "pingtimeout"._tainted
    //#input(void addConnectionCategory()): "pingtimer"._tainted
    //#input(void addConnectionCategory()): "reconnectdelay"._tainted
    //#input(void addConnectionCategory()): "reconnectonconnectfailure"._tainted
    //#input(void addConnectionCategory()): "reconnectondisconnect"._tainted
    //#input(void addConnectionCategory()): "rejoinchannels"._tainted
    //#input(void addConnectionCategory()): "server"._tainted
    //#input(void addConnectionCategory()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void addConnectionCategory()): __Descendant_Table[others]
    //#input(void addConnectionCategory()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addConnectionCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void addConnectionCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigManager.stats
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void addConnectionCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void addConnectionCategory()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void addConnectionCategory()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void addConnectionCategory()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void addConnectionCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addConnectionCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void addConnectionCategory()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void addConnectionCategory()): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void addConnectionCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void addConnectionCategory()): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void addConnectionCategory()): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void addConnectionCategory()): com/dmdirc/config/IdentityManager.identities
    //#input(void addConnectionCategory()): com/dmdirc/config/IdentityManager.managers
    //#input(void addConnectionCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addConnectionCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addConnectionCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void addConnectionCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void addConnectionCategory()): com/dmdirc/config/prefs/PreferencesType.BOOLEAN
    //#input(void addConnectionCategory()): com/dmdirc/config/prefs/PreferencesType.DURATION
    //#input(void addConnectionCategory()): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void addConnectionCategory()): this
    //#input(void addConnectionCategory()): this.__Tag
    //#input(void addConnectionCategory()): this.categories
    //#output(void addConnectionCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void addConnectionCategory()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void addConnectionCategory()): new ArrayList(getSources#1) num objects
    //#output(void addConnectionCategory()): new ArrayList(getSources#1).__Lock
    //#output(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).channel
    //#output(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).network
    //#output(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).server
    //#output(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).sources
    //#output(void addConnectionCategory()): new MapList(ConfigManager#1) num objects
    //#new obj(void addConnectionCategory()): java.lang.StringBuilder:toString(...)
    //#new obj(void addConnectionCategory()): new ArrayList(getSources#1)
    //#new obj(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1)
    //#new obj(void addConnectionCategory()): new MapList(ConfigManager#1)
    //#pre[7] (void addConnectionCategory()): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[9] (void addConnectionCategory()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[10] (void addConnectionCategory()): this.categories != null
    //#pre[1] (void addConnectionCategory()): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#post(void addConnectionCategory()): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void addConnectionCategory()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void addConnectionCategory()): new ArrayList(getSources#1) num objects == 0
    //#post(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void addConnectionCategory()): new MapList(ConfigManager#1) num objects == 0
    //#post(void addConnectionCategory()): new ArrayList(getSources#1) num objects <= 1
    //#post(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addConnectionCategory()): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addConnectionCategory()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void addConnectionCategory()): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addConnectionCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void addConnectionCategory()): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addConnectionCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void addConnectionCategory()): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addConnectionCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addConnectionCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addConnectionCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void addConnectionCategory()): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addConnectionCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addConnectionCategory()): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addConnectionCategory()): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addConnectionCategory()): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void addConnectionCategory()): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void addConnectionCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:hasOption
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:getOption
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:getSources
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:addListener
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:addConfigManager
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:getTarget
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void addConnectionCategory()): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals
                "", "category-connection");

        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "closechannelsonquit", "Close channels on quit",
                "Close channel windows when you quit the server?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "closechannelsondisconnect",
                "Close channels on disconnect", "Close channel windows when " +
                "the server is disconnected?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "closequeriesonquit", "Close queries on quit",
                "Close query windows when you quit the server?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "closequeriesondisconnect",
                "Close queries on disconnect", "Close query windows when " +
                "the server is disconnected?"));
        category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
                "server", "pingtimer", "Ping warning time",
                "How long to wait after a ping reply is sent before showing " +
                "a warning message"));
        category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
                "server", "pingtimeout", "Ping timeout",
                "How long to wait for a server to reply to a PING request " +
                "before assume it has died and disconnecting"));
        category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
                "server", "pingfrequency", "Ping frequency",
                "How often a PING request should be sent to the server (to " +
                "check that it is still alive)"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "reconnectonconnectfailure", "Reconnect on failure",
                "Attempt to reconnect if there is an error when connecting?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "reconnectondisconnect", "Reconnect on disconnect",
                "Attempt to reconnect if the server is disconnected?"));
        category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
                "general", "reconnectdelay", "Reconnect delay",
                "How long to wait before attempting to reconnect to a server"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "rejoinchannels", "Rejoin open channels",
                "Rejoin open channels when reconnecting to a server?"));

        addCategory(category);
    }
    //#PreferencesManager.java:234: end of method: void com.dmdirc.config.prefs.PreferencesManager.addConnectionCategory()

    /**
     * Creates and adds the "Messages" category.
     */
    private void addMessagesCategory() {
        final PreferencesCategory category = new PreferencesCategory("Messages",
    //#PreferencesManager.java:240: method: void com.dmdirc.config.prefs.PreferencesManager.addMessagesCategory()
    //#input(void addMessagesCategory()): ""._tainted
    //#input(void addMessagesCategory()): "."._tainted
    //#input(void addMessagesCategory()): "<Unknown>"._tainted
    //#input(void addMessagesCategory()): "@"._tainted
    //#input(void addMessagesCategory()): "Config option not found: "._tainted
    //#input(void addMessagesCategory()): "closemessage"._tainted
    //#input(void addMessagesCategory()): "cyclemessage"._tainted
    //#input(void addMessagesCategory()): "general"._tainted
    //#input(void addMessagesCategory()): "kickmessage"._tainted
    //#input(void addMessagesCategory()): "partmessage"._tainted
    //#input(void addMessagesCategory()): "quitmessage"._tainted
    //#input(void addMessagesCategory()): "reconnectmessage"._tainted
    //#input(void addMessagesCategory()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void addMessagesCategory()): __Descendant_Table[others]
    //#input(void addMessagesCategory()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addMessagesCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void addMessagesCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigManager.stats
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void addMessagesCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void addMessagesCategory()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void addMessagesCategory()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void addMessagesCategory()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void addMessagesCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addMessagesCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void addMessagesCategory()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void addMessagesCategory()): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void addMessagesCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void addMessagesCategory()): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void addMessagesCategory()): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void addMessagesCategory()): com/dmdirc/config/IdentityManager.identities
    //#input(void addMessagesCategory()): com/dmdirc/config/IdentityManager.managers
    //#input(void addMessagesCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addMessagesCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addMessagesCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void addMessagesCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void addMessagesCategory()): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void addMessagesCategory()): com/dmdirc/config/prefs/PreferencesType.TEXT
    //#input(void addMessagesCategory()): this
    //#input(void addMessagesCategory()): this.__Tag
    //#input(void addMessagesCategory()): this.categories
    //#output(void addMessagesCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void addMessagesCategory()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void addMessagesCategory()): new ArrayList(getSources#1) num objects
    //#output(void addMessagesCategory()): new ArrayList(getSources#1).__Lock
    //#output(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).channel
    //#output(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).network
    //#output(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).server
    //#output(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).sources
    //#output(void addMessagesCategory()): new MapList(ConfigManager#1) num objects
    //#new obj(void addMessagesCategory()): java.lang.StringBuilder:toString(...)
    //#new obj(void addMessagesCategory()): new ArrayList(getSources#1)
    //#new obj(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1)
    //#new obj(void addMessagesCategory()): new MapList(ConfigManager#1)
    //#pre[7] (void addMessagesCategory()): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[9] (void addMessagesCategory()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[10] (void addMessagesCategory()): this.categories != null
    //#pre[1] (void addMessagesCategory()): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#post(void addMessagesCategory()): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void addMessagesCategory()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void addMessagesCategory()): new ArrayList(getSources#1) num objects == 0
    //#post(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void addMessagesCategory()): new MapList(ConfigManager#1) num objects == 0
    //#post(void addMessagesCategory()): new ArrayList(getSources#1) num objects <= 1
    //#post(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addMessagesCategory()): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addMessagesCategory()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void addMessagesCategory()): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addMessagesCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void addMessagesCategory()): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addMessagesCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void addMessagesCategory()): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addMessagesCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addMessagesCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addMessagesCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void addMessagesCategory()): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addMessagesCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addMessagesCategory()): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addMessagesCategory()): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addMessagesCategory()): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void addMessagesCategory()): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void addMessagesCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:hasOption
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:getOption
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:getSources
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:addListener
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:addConfigManager
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:getTarget
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void addMessagesCategory()): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals
                "", "category-messages");

        category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
                "general", "closemessage",
                "Close message", "Default quit message to use when closing DMDirc"));
        category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
                "general", "partmessage",
                "Part message", "Default part message to use when leaving channels"));
        category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
                "general", "quitmessage",
                "Quit message", "Default quit message to use when disconnecting"));
        category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
                "general", "cyclemessage",
                "Cycle message", "Default part message to use when cycling channels"));
        category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
                "general", "kickmessage",
                "Kick message", "Default message to use when kicking people"));
        category.addSetting(new PreferencesSetting(PreferencesType.TEXT,
                "general", "reconnectmessage",
                "Reconnect message", "Default quit message to use when reconnecting"));

        addNotificationsCategory(category);
    //#PreferencesManager.java:262: Warning: call too complex - analysis skipped
    //#    call on void addNotificationsCategory(PreferencesCategory)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addMessagesCategory()
    //#    unanalyzed callee: void addNotificationsCategory(PreferencesCategory)
        addCategory(category);
    }
    //#PreferencesManager.java:264: end of method: void com.dmdirc.config.prefs.PreferencesManager.addMessagesCategory()

    /**
     * Creates and adds the "Notifications" category.
     *
     * @param parent The parent category.
     */
    private void addNotificationsCategory(final PreferencesCategory parent) {
        final PreferencesCategory category = new PreferencesCategory("Notifications", "");
    //#PreferencesManager.java:272: method: void com.dmdirc.config.prefs.PreferencesManager.addNotificationsCategory(PreferencesCategory)
    //#input(void addNotificationsCategory(PreferencesCategory)): ""._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): ")"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "."._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "<Unknown>"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "@"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "Config option not found: "._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "Current ("._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "away"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "back"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "connectError"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "connectRetry"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "lusers"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "map"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "notifications"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "privateCTCP"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "privateCTCPreply"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "privateNotice"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "socketClosed"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "stonedServer"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): "whois"._tainted
    //#input(void addNotificationsCategory(PreferencesCategory)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void addNotificationsCategory(PreferencesCategory)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.stats
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.identities
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.managers
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSubCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.isInline()Z
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.setParent(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void addNotificationsCategory(PreferencesCategory)): parent
    //#input(void addNotificationsCategory(PreferencesCategory)): parent.__Tag
    //#input(void addNotificationsCategory(PreferencesCategory)): parent.isInline
    //#input(void addNotificationsCategory(PreferencesCategory)): parent.subcats
    //#output(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void addNotificationsCategory(PreferencesCategory)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void addNotificationsCategory(PreferencesCategory)): new ArrayList(getSources#1) num objects
    //#output(void addNotificationsCategory(PreferencesCategory)): new ArrayList(getSources#1).__Lock
    //#output(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).network
    //#output(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).server
    //#output(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void addNotificationsCategory(PreferencesCategory)): new MapList(ConfigManager#1) num objects
    //#new obj(void addNotificationsCategory(PreferencesCategory)): java.lang.StringBuilder:toString(...)
    //#new obj(void addNotificationsCategory(PreferencesCategory)): new ArrayList(getSources#1)
    //#new obj(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void addNotificationsCategory(PreferencesCategory)): new MapList(ConfigManager#1)
    //#pre[7] (void addNotificationsCategory(PreferencesCategory)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[8] (void addNotificationsCategory(PreferencesCategory)): parent != null
    //#pre[9] (void addNotificationsCategory(PreferencesCategory)): parent.__Tag == com/dmdirc/config/prefs/PreferencesCategory
    //#pre[10] (void addNotificationsCategory(PreferencesCategory)): init'ed(parent.isInline)
    //#pre[11] (void addNotificationsCategory(PreferencesCategory)): parent.subcats != null
    //#pre[1] (void addNotificationsCategory(PreferencesCategory)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void addNotificationsCategory(PreferencesCategory)): category.isInline@293 == 1
    //#post(void addNotificationsCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void addNotificationsCategory(PreferencesCategory)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void addNotificationsCategory(PreferencesCategory)): new ArrayList(getSources#1) num objects == 0
    //#post(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void addNotificationsCategory(PreferencesCategory)): new MapList(ConfigManager#1) num objects == 0
    //#post(void addNotificationsCategory(PreferencesCategory)): new ArrayList(getSources#1) num objects <= 1
    //#post(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addNotificationsCategory(PreferencesCategory)): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addNotificationsCategory(PreferencesCategory)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void addNotificationsCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addNotificationsCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void addNotificationsCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addNotificationsCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void addNotificationsCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addNotificationsCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addNotificationsCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addNotificationsCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void addNotificationsCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addNotificationsCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addNotificationsCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addNotificationsCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addNotificationsCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void addNotificationsCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void addNotificationsCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:hasOption
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:getOption
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:getSources
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:addListener
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:addConfigManager
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:getTarget
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void addNotificationsCategory(PreferencesCategory)): Effects-of-calling:java.util.HashMap

        final Map<String, String> options = new HashMap<String, String>();
        final Map<String, String> whoisOptions = new HashMap<String, String>();
        final Map<String, String> ctcprOptions = new HashMap<String, String>();
        final Map<String, String> mapOptions = new HashMap<String, String>();

        options.put("all", "All windows");
        options.put("active", "Active window");
        options.put("server", "Server window");
        options.put("none", "Nowhere");

        whoisOptions.putAll(options);
        whoisOptions.put("lastcommand:(raw )?whois %4$s( %4$s)?", "Source of whois command");

        ctcprOptions.putAll(options);
        ctcprOptions.put("lastcommand:ctcp %1$s %4$S", "Source of ctcp command");

        mapOptions.putAll(options);
        mapOptions.put("window:Network Map", "Map window");

        category.addSetting(new PreferencesSetting("notifications", "socketClosed",
                "Socket closed", "Where to display socket closed notifications",
                options));
        category.addSetting(new PreferencesSetting("notifications", "privateNotice",
                "Private notice", "Where to display private notices",
                options));
        category.addSetting(new PreferencesSetting("notifications", "privateCTCP",
                "CTCP request", "Where to display CTCP request notifications",
                options));
        category.addSetting(new PreferencesSetting("notifications", "privateCTCPreply",
                "CTCP reply", "Where to display CTCP replies",
                ctcprOptions));
        category.addSetting(new PreferencesSetting("notifications", "connectError",
                "Connect error", "Where to display connect error notifications",
                options));
        category.addSetting(new PreferencesSetting("notifications", "connectRetry",
                "Connect retry", "Where to display connect retry notifications",
                options));
        category.addSetting(new PreferencesSetting("notifications", "stonedServer",
                "Stoned server", "Where to display stoned server notifications",
                options));
        category.addSetting(new PreferencesSetting("notifications", "whois",
                "Whois output", "Where to display /whois output",
                whoisOptions));
        category.addSetting(new PreferencesSetting("notifications", "lusers",
                "Lusers output", "Where to display /lusers output",
                options));
        category.addSetting(new PreferencesSetting("notifications", "map",
                "Map output", "Where to display /map output",
                mapOptions));
        category.addSetting(new PreferencesSetting("notifications", "away",
                "Away notification", "Where to display /away output",
                options));
        category.addSetting(new PreferencesSetting("notifications", "back",
                "Back notification", "Where to display /away output",
                options));

        parent.addSubCategory(category);
    }
    //#PreferencesManager.java:331: end of method: void com.dmdirc.config.prefs.PreferencesManager.addNotificationsCategory(PreferencesCategory)

    /**
     * Creates and adds the "Advanced" category.
     */
    private void addAdvancedCategory() {
        final PreferencesCategory category = new PreferencesCategory("Advanced", 
    //#PreferencesManager.java:337: method: void com.dmdirc.config.prefs.PreferencesManager.addAdvancedCategory()
    //#input(void addAdvancedCategory()): ""._tainted
    //#input(void addAdvancedCategory()): ")"._tainted
    //#input(void addAdvancedCategory()): "."._tainted
    //#input(void addAdvancedCategory()): "<Unknown>"._tainted
    //#input(void addAdvancedCategory()): "@"._tainted
    //#input(void addAdvancedCategory()): "Config option not found: "._tainted
    //#input(void addAdvancedCategory()): "Current ("._tainted
    //#input(void addAdvancedCategory()): "browser"._tainted
    //#input(void addAdvancedCategory()): "casesensitive"._tainted
    //#input(void addAdvancedCategory()): "frameBufferSize"._tainted
    //#input(void addAdvancedCategory()): "general"._tainted
    //#input(void addAdvancedCategory()): "launchdelay"._tainted
    //#input(void addAdvancedCategory()): "logerrors"._tainted
    //#input(void addAdvancedCategory()): "mdiBarVisibility"._tainted
    //#input(void addAdvancedCategory()): "quickCopy"._tainted
    //#input(void addAdvancedCategory()): "showversion"._tainted
    //#input(void addAdvancedCategory()): "submitErrors"._tainted
    //#input(void addAdvancedCategory()): "tabcompletion"._tainted
    //#input(void addAdvancedCategory()): "ui"._tainted
    //#input(void addAdvancedCategory()): "useOneTouchExpandable"._tainted
    //#input(void addAdvancedCategory()): "uselaunchdelay"._tainted
    //#input(void addAdvancedCategory()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void addAdvancedCategory()): __Descendant_Table[others]
    //#input(void addAdvancedCategory()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addAdvancedCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void addAdvancedCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigManager.stats
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void addAdvancedCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void addAdvancedCategory()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void addAdvancedCategory()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void addAdvancedCategory()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void addAdvancedCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addAdvancedCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void addAdvancedCategory()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void addAdvancedCategory()): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void addAdvancedCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void addAdvancedCategory()): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void addAdvancedCategory()): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void addAdvancedCategory()): com/dmdirc/config/IdentityManager.identities
    //#input(void addAdvancedCategory()): com/dmdirc/config/IdentityManager.managers
    //#input(void addAdvancedCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addAdvancedCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addAdvancedCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void addAdvancedCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void addAdvancedCategory()): com/dmdirc/config/prefs/PreferencesType.BOOLEAN
    //#input(void addAdvancedCategory()): com/dmdirc/config/prefs/PreferencesType.DURATION
    //#input(void addAdvancedCategory()): com/dmdirc/config/prefs/PreferencesType.INTEGER
    //#input(void addAdvancedCategory()): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void addAdvancedCategory()): this
    //#input(void addAdvancedCategory()): this.__Tag
    //#input(void addAdvancedCategory()): this.categories
    //#output(void addAdvancedCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void addAdvancedCategory()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void addAdvancedCategory()): new ArrayList(getSources#1) num objects
    //#output(void addAdvancedCategory()): new ArrayList(getSources#1).__Lock
    //#output(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).channel
    //#output(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).network
    //#output(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).server
    //#output(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).sources
    //#output(void addAdvancedCategory()): new MapList(ConfigManager#1) num objects
    //#new obj(void addAdvancedCategory()): java.lang.StringBuilder:toString(...)
    //#new obj(void addAdvancedCategory()): new ArrayList(getSources#1)
    //#new obj(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1)
    //#new obj(void addAdvancedCategory()): new MapList(ConfigManager#1)
    //#pre[7] (void addAdvancedCategory()): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[9] (void addAdvancedCategory()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[10] (void addAdvancedCategory()): this.categories != null
    //#pre[1] (void addAdvancedCategory()): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#post(void addAdvancedCategory()): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void addAdvancedCategory()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void addAdvancedCategory()): new ArrayList(getSources#1) num objects == 0
    //#post(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void addAdvancedCategory()): new MapList(ConfigManager#1) num objects == 0
    //#post(void addAdvancedCategory()): new ArrayList(getSources#1) num objects <= 1
    //#post(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addAdvancedCategory()): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addAdvancedCategory()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void addAdvancedCategory()): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addAdvancedCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void addAdvancedCategory()): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addAdvancedCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void addAdvancedCategory()): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addAdvancedCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addAdvancedCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addAdvancedCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void addAdvancedCategory()): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addAdvancedCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addAdvancedCategory()): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addAdvancedCategory()): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addAdvancedCategory()): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void addAdvancedCategory()): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void addAdvancedCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:hasOption
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:getOption
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:getSources
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:addListener
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:addConfigManager
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:getTarget
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals
    //#unanalyzed(void addAdvancedCategory()): Effects-of-calling:java.util.HashMap
                "", "category-advanced");

        final Map<String, String> options = new HashMap<String, String>();

        options.put("alwaysShow", "Always show");
        options.put("neverShow", "Never show");
        options.put("showWhenMaximised", "Show only when windows maximised");

        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "browser", "uselaunchdelay", "Use browser launch delay",
                "Enable delay between browser launches (to prevent mistakenly" +
                " double clicking)?"));
        category.addSetting(new PreferencesSetting(PreferencesType.DURATION,
                "browser", "launchdelay", "Browser launch delay",
                "Minimum time between opening of URLs"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "submitErrors", "Automatically submit errors",
                "Automatically submit client errors to the developers?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "logerrors", "Log errors to disk",
                "Save copies of all errors to disk?"));        
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "tabcompletion", "casesensitive", "Case-sensitive tab completion",
                "Respect case when tab completing?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "ui", "quickCopy", "Quick copy", "Automatically copy" +
                " text that's selected when the mouse button is released?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "ui", "showversion", "Show version",
                "Show DMDirc version in the titlebar?"));
        category.addSetting(new PreferencesSetting(PreferencesType.INTEGER,
                new NumericalValidator(10, -1), "ui", "frameBufferSize",
                "Window buffer size", "The maximum number of lines in a window" +
                " buffer"));
        category.addSetting(new PreferencesSetting("ui", "mdiBarVisibility", 
                "MDI Bar Visibility", "Controls the visibility of the MDI bar", options));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN, "ui",
                "useOneTouchExpandable", "Use one touch expandable split panes?",
                "Use one touch expandable arrows for collapsing/expanding the split panes"));

        addCategory(category);
    }
    //#PreferencesManager.java:379: end of method: void com.dmdirc.config.prefs.PreferencesManager.addAdvancedCategory()

    /**
     * Creates and adds the "GUI" category.
     */
    private void addGuiCategory() {
        final Map<String, String> lafs = new HashMap<String, String>();
    //#PreferencesManager.java:385: method: void com.dmdirc.config.prefs.PreferencesManager.addGuiCategory()
    //#input(void addGuiCategory()): ""._tainted
    //#input(void addGuiCategory()): ")"._tainted
    //#input(void addGuiCategory()): "."._tainted
    //#input(void addGuiCategory()): "<Unknown>"._tainted
    //#input(void addGuiCategory()): "@"._tainted
    //#input(void addGuiCategory()): "Config option not found: "._tainted
    //#input(void addGuiCategory()): "Current ("._tainted
    //#input(void addGuiCategory()): "antialias"._tainted
    //#input(void addGuiCategory()): "backgroundcolour"._tainted
    //#input(void addGuiCategory()): "foregroundcolour"._tainted
    //#input(void addGuiCategory()): "framemanager"._tainted
    //#input(void addGuiCategory()): "framemanagerPosition"._tainted
    //#input(void addGuiCategory()): "general"._tainted
    //#input(void addGuiCategory()): "inputbackgroundcolour"._tainted
    //#input(void addGuiCategory()): "inputforegroundcolour"._tainted
    //#input(void addGuiCategory()): "lookandfeel"._tainted
    //#input(void addGuiCategory()): "maximisewindows"._tainted
    //#input(void addGuiCategory()): "nickListAltBackgroundColour"._tainted
    //#input(void addGuiCategory()): "nicklist"._tainted
    //#input(void addGuiCategory()): "nicklistbackgroundcolour"._tainted
    //#input(void addGuiCategory()): "nicklistforegroundcolour"._tainted
    //#input(void addGuiCategory()): "showcolourdialog"._tainted
    //#input(void addGuiCategory()): "shownickcoloursinnicklist"._tainted
    //#input(void addGuiCategory()): "shownickcoloursintext"._tainted
    //#input(void addGuiCategory()): "sortByCase"._tainted
    //#input(void addGuiCategory()): "sortByMode"._tainted
    //#input(void addGuiCategory()): "sortservers"._tainted
    //#input(void addGuiCategory()): "sortwindows"._tainted
    //#input(void addGuiCategory()): "stylelinks"._tainted
    //#input(void addGuiCategory()): "treeview"._tainted
    //#input(void addGuiCategory()): "treeviewActiveBackground"._tainted
    //#input(void addGuiCategory()): "treeviewActiveBold"._tainted
    //#input(void addGuiCategory()): "treeviewActiveForeground"._tainted
    //#input(void addGuiCategory()): "treeviewRolloverColour"._tainted
    //#input(void addGuiCategory()): "ui"._tainted
    //#input(void addGuiCategory()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void addGuiCategory()): __Descendant_Table[others]
    //#input(void addGuiCategory()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addGuiCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void addGuiCategory()): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigManager.stats
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void addGuiCategory()): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void addGuiCategory()): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void addGuiCategory()): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void addGuiCategory()): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void addGuiCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addGuiCategory()): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void addGuiCategory()): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void addGuiCategory()): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void addGuiCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void addGuiCategory()): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void addGuiCategory()): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void addGuiCategory()): com/dmdirc/config/IdentityManager.identities
    //#input(void addGuiCategory()): com/dmdirc/config/IdentityManager.managers
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSubCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.isInline()Z
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.setParent(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesSetting.__Descendant_Table[com/dmdirc/config/prefs/PreferencesSetting]
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesSetting.__Dispatch_Table.setRestartNeeded()Lcom/dmdirc/config/prefs/PreferencesSetting;
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesType.BOOLEAN
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesType.COLOUR
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void addGuiCategory()): com/dmdirc/config/prefs/PreferencesType.OPTIONALCOLOUR
    //#input(void addGuiCategory()): this
    //#input(void addGuiCategory()): this.__Tag
    //#input(void addGuiCategory()): this.categories
    //#output(void addGuiCategory()): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void addGuiCategory()): java.lang.StringBuilder:toString(...)._tainted
    //#output(void addGuiCategory()): new ArrayList(getSources#1) num objects
    //#output(void addGuiCategory()): new ArrayList(getSources#1).__Lock
    //#output(void addGuiCategory()): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).channel
    //#output(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).network
    //#output(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).server
    //#output(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).sources
    //#output(void addGuiCategory()): new MapList(ConfigManager#1) num objects
    //#new obj(void addGuiCategory()): java.lang.StringBuilder:toString(...)
    //#new obj(void addGuiCategory()): new ArrayList(getSources#1)
    //#new obj(void addGuiCategory()): new ConfigManager(getGlobalConfig#1)
    //#new obj(void addGuiCategory()): new MapList(ConfigManager#1)
    //#pre[7] (void addGuiCategory()): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[9] (void addGuiCategory()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[10] (void addGuiCategory()): this.categories != null
    //#pre[1] (void addGuiCategory()): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void addGuiCategory()): arr$.length@399 <= 4_294_967_295
    //#presumption(void addGuiCategory()): arr$[i$]@399 != null
    //#presumption(void addGuiCategory()): javax.swing.UIManager:getInstalledLookAndFeels(...)@399 != null
    //#post(void addGuiCategory()): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void addGuiCategory()): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void addGuiCategory()): new ArrayList(getSources#1) num objects == 0
    //#post(void addGuiCategory()): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void addGuiCategory()): new MapList(ConfigManager#1) num objects == 0
    //#post(void addGuiCategory()): new ArrayList(getSources#1) num objects <= 1
    //#post(void addGuiCategory()): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addGuiCategory()): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addGuiCategory()): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void addGuiCategory()): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addGuiCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void addGuiCategory()): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addGuiCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void addGuiCategory()): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addGuiCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addGuiCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addGuiCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void addGuiCategory()): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addGuiCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addGuiCategory()): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addGuiCategory()): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addGuiCategory()): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void addGuiCategory()): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void addGuiCategory()): not_init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.Main:getUI
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:hasOption
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:getOption
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:getSources
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:addListener
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:addConfigManager
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:getTarget
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void addGuiCategory()): Effects-of-calling:com.dmdirc.ui.interfaces.UIController:getThemesPrefsPanel
        final Map<String, String> framemanagers = new HashMap<String, String>();
        final Map<String, String> fmpositions = new HashMap<String, String>();
        final PreferencesCategory category = new PreferencesCategory("GUI", "",
                "category-gui");

        framemanagers.put("com.dmdirc.ui.swing.framemanager.tree.TreeFrameManager", "Treeview");
        framemanagers.put("com.dmdirc.ui.swing.framemanager.buttonbar.ButtonBar", "Button bar");

        fmpositions.put("top", "Top");
        fmpositions.put("bottom", "Bottom");
        fmpositions.put("left", "Left");
        fmpositions.put("right", "Right");

        final LookAndFeelInfo[] plaf = UIManager.getInstalledLookAndFeels();
        final String sysLafClass = UIManager.getSystemLookAndFeelClassName();
    //#PreferencesManager.java:400: Warning: unused assignment
    //#    Unused assignment into sysLafClass
    //#    severity: LOW
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addGuiCategory()

        lafs.put("Native", "Native");
        for (LookAndFeelInfo laf : plaf) {
            lafs.put(laf.getName(), laf.getName());
        }

        category.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
                "ui", "backgroundcolour", "Background colour", "Default " +
                "background colour to use"));
        category.addSetting(new PreferencesSetting(PreferencesType.COLOUR,
                "ui", "foregroundcolour", "Foreground colour", "Default " +
                "foreground colour to use"));
        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "ui", "inputbackgroundcolour", "Input background colour",
                "Default background colour to use for input fields"));
        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "ui", "inputforegroundcolour", "Input foreground colour",
                "Default foreground colour to use for input fields"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "general", "showcolourdialog", "Show colour dialog",
                "Show colour picker dialog when using colour control codes?"));
        category.addSetting(new PreferencesSetting("ui", "lookandfeel",
                "Look and feel", "The Java look and feel to use",
                lafs));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
    //#PreferencesManager.java:425: Warning: unused assignment in callee
    //#    Unused assignment to (setRestartNeeded.Param_0.restartNeeded) in setRestartNeeded
    //#    severity: LOW
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addGuiCategory()
                "ui", "antialias", "System anti-alias",
                "Anti-alias all fonts?").setRestartNeeded());
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "ui", "maximisewindows", "Auto-maximise windows",
                "Automatically maximise newly opened windows?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "ui", "shownickcoloursintext", "Show nick colours in text area",
                "Show nickname colours in text areas?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "ui", "shownickcoloursinnicklist", "Show nick colours in nicklists",
                "Show nickname colours in channel nicklists?"));
        category.addSetting(new PreferencesSetting("ui", "framemanager",
    //#PreferencesManager.java:437: Warning: unused assignment in callee
    //#    Unused assignment to (setRestartNeeded.Param_0.restartNeeded) in setRestartNeeded
    //#    severity: LOW
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addGuiCategory()
                "Window manager", "Which window manager should be used?",
                framemanagers).setRestartNeeded());
        category.addSetting(new PreferencesSetting("ui", "framemanagerPosition",
    //#PreferencesManager.java:440: Warning: unused assignment in callee
    //#    Unused assignment to (setRestartNeeded.Param_0.restartNeeded) in setRestartNeeded
    //#    severity: LOW
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addGuiCategory()
                "Window manager position", "Where should the window " +
                "manager be positioned?", fmpositions).setRestartNeeded());
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "ui", "stylelinks", "Style links", "Style links in text areas"));

        addThemesCategory(category);
        addNicklistCategory(category);
        addTreeviewCategory(category);
        addCategory(category);
    }
    //#PreferencesManager.java:450: end of method: void com.dmdirc.config.prefs.PreferencesManager.addGuiCategory()

    /**
     * Creates and adds the "Themes" category.
     *
     * @param parent The parent category
     */
    private void addThemesCategory(final PreferencesCategory parent) {
        // TODO: Abstract the panel

        parent.addSubCategory(new PreferencesCategory("Themes", "",
    //#PreferencesManager.java:460: method: void com.dmdirc.config.prefs.PreferencesManager.addThemesCategory(PreferencesCategory)
    //#PreferencesManager.java:460: Warning: method not available - call not analyzed
    //#    call on UIController com.dmdirc.Main:getUI()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addThemesCategory(PreferencesCategory)
    //#    unanalyzed callee: UIController com.dmdirc.Main:getUI()
    //#PreferencesManager.java:460: Warning: method not available - call not analyzed
    //#    call on PreferencesInterface com.dmdirc.ui.interfaces.UIController:getThemesPrefsPanel()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addThemesCategory(PreferencesCategory)
    //#    unanalyzed callee: PreferencesInterface com.dmdirc.ui.interfaces.UIController:getThemesPrefsPanel()
    //#PreferencesManager.java:460: ?!precondition failure
    //#    com/dmdirc/config/prefs/PreferencesCategory.addSubCategory: (soft) subcategory.isInline == 1
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addThemesCategory(PreferencesCategory)
    //#    basic block: Entry_BB_1
    //#    assertion: (soft) false
    //#    callee: void com/dmdirc/config/prefs/PreferencesCategory.addSubCategory(PreferencesCategory)
    //#    callee assertion: (soft) subcategory.isInline == 1
    //#    callee file: PreferencesCategory.java
    //#    callee precondition index: [3]
    //#    callee srcpos: 184
    //#    VN: 0
    //#    Expected: {1}
    //#    Bad: {0}
    //#    Attribs:  Int  Exp in +/-1000  Exp singleton  Bad singleton  Bad overlaps +/-1000  Soft  Bad < Exp
    //#input(void addThemesCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addThemesCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addThemesCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSubCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addThemesCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.isInline()Z
    //#input(void addThemesCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.setParent(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addThemesCategory(PreferencesCategory)): parent
    //#input(void addThemesCategory(PreferencesCategory)): parent.__Tag
    //#input(void addThemesCategory(PreferencesCategory)): parent.isInline
    //#input(void addThemesCategory(PreferencesCategory)): parent.subcats
    //#pre[1] (void addThemesCategory(PreferencesCategory)): parent != null
    //#pre[2] (void addThemesCategory(PreferencesCategory)): parent.__Tag == com/dmdirc/config/prefs/PreferencesCategory
    //#pre[3] (void addThemesCategory(PreferencesCategory)): init'ed(parent.isInline)
    //#pre[4] (void addThemesCategory(PreferencesCategory)): parent.subcats != null
    //#presumption(void addThemesCategory(PreferencesCategory)): com.dmdirc.Main:getUI(...)@460 != null
    //#unanalyzed(void addThemesCategory(PreferencesCategory)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addThemesCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addThemesCategory(PreferencesCategory)): Effects-of-calling:java.util.List:add
                "category-addons", Main.getUI().getThemesPrefsPanel()));
    }
    //#PreferencesManager.java:462: end of method: void com.dmdirc.config.prefs.PreferencesManager.addThemesCategory(PreferencesCategory)

    /**
     * Creates and adds the "Nicklist" category.
     *
     * @param parent The parent category
     */
    private void addNicklistCategory(final PreferencesCategory parent) {
        final PreferencesCategory category = new PreferencesCategory("Nicklist", "");
    //#PreferencesManager.java:470: method: void com.dmdirc.config.prefs.PreferencesManager.addNicklistCategory(PreferencesCategory)
    //#input(void addNicklistCategory(PreferencesCategory)): ""._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "."._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "<Unknown>"._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "@"._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "Config option not found: "._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "nickListAltBackgroundColour"._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "nicklist"._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "nicklistbackgroundcolour"._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "nicklistforegroundcolour"._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "sortByCase"._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "sortByMode"._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): "ui"._tainted
    //#input(void addNicklistCategory(PreferencesCategory)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void addNicklistCategory(PreferencesCategory)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.stats
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.identities
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.managers
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSubCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.isInline()Z
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.setParent(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesType.BOOLEAN
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesType.OPTIONALCOLOUR
    //#input(void addNicklistCategory(PreferencesCategory)): parent
    //#input(void addNicklistCategory(PreferencesCategory)): parent.__Tag
    //#input(void addNicklistCategory(PreferencesCategory)): parent.isInline
    //#input(void addNicklistCategory(PreferencesCategory)): parent.subcats
    //#output(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void addNicklistCategory(PreferencesCategory)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void addNicklistCategory(PreferencesCategory)): new ArrayList(getSources#1) num objects
    //#output(void addNicklistCategory(PreferencesCategory)): new ArrayList(getSources#1).__Lock
    //#output(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).network
    //#output(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).server
    //#output(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void addNicklistCategory(PreferencesCategory)): new MapList(ConfigManager#1) num objects
    //#new obj(void addNicklistCategory(PreferencesCategory)): java.lang.StringBuilder:toString(...)
    //#new obj(void addNicklistCategory(PreferencesCategory)): new ArrayList(getSources#1)
    //#new obj(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void addNicklistCategory(PreferencesCategory)): new MapList(ConfigManager#1)
    //#pre[7] (void addNicklistCategory(PreferencesCategory)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[8] (void addNicklistCategory(PreferencesCategory)): parent != null
    //#pre[9] (void addNicklistCategory(PreferencesCategory)): parent.__Tag == com/dmdirc/config/prefs/PreferencesCategory
    //#pre[10] (void addNicklistCategory(PreferencesCategory)): init'ed(parent.isInline)
    //#pre[11] (void addNicklistCategory(PreferencesCategory)): parent.subcats != null
    //#pre[1] (void addNicklistCategory(PreferencesCategory)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void addNicklistCategory(PreferencesCategory)): category.isInline@472 == 1
    //#post(void addNicklistCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void addNicklistCategory(PreferencesCategory)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void addNicklistCategory(PreferencesCategory)): new ArrayList(getSources#1) num objects == 0
    //#post(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void addNicklistCategory(PreferencesCategory)): new MapList(ConfigManager#1) num objects == 0
    //#post(void addNicklistCategory(PreferencesCategory)): new ArrayList(getSources#1) num objects <= 1
    //#post(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addNicklistCategory(PreferencesCategory)): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addNicklistCategory(PreferencesCategory)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void addNicklistCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addNicklistCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void addNicklistCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addNicklistCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void addNicklistCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addNicklistCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addNicklistCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addNicklistCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void addNicklistCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addNicklistCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addNicklistCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addNicklistCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addNicklistCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void addNicklistCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void addNicklistCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:hasOption
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:getOption
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:getSources
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:addListener
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:addConfigManager
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:getTarget
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void addNicklistCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals

        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "ui", "nicklistbackgroundcolour", "Nicklist background colour",
                "Background colour to use for the nicklist"));
        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "ui", "nicklistforegroundcolour", "Nicklist foreground colour",
                "Foreground colour to use for the nicklist"));
        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "ui", "nickListAltBackgroundColour", "Alternate background colour",
                "Background colour to use for every other nicklist entry"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "nicklist", "sortByMode", "Sort nicklist by user mode",
                "Sort nicknames by the modes that they have?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "nicklist", "sortByCase", "Sort nicklist by case",
                "Sort nicknames in a case-sensitive manner?"));

        parent.addSubCategory(category);
    }
    //#PreferencesManager.java:489: end of method: void com.dmdirc.config.prefs.PreferencesManager.addNicklistCategory(PreferencesCategory)

    /**
     * Creates and adds the "Treeview" category.
     *
     * @param parent The parent category
     */
    private void addTreeviewCategory(final PreferencesCategory parent) {
        final PreferencesCategory category = new PreferencesCategory("Treeview", "");
    //#PreferencesManager.java:497: method: void com.dmdirc.config.prefs.PreferencesManager.addTreeviewCategory(PreferencesCategory)
    //#input(void addTreeviewCategory(PreferencesCategory)): ""._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "."._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "<Unknown>"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "@"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "Config option not found: "._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "backgroundcolour"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "foregroundcolour"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "sortservers"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "sortwindows"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "treeview"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "treeviewActiveBackground"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "treeviewActiveBold"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "treeviewActiveForeground"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "treeviewRolloverColour"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): "ui"._tainted
    //#input(void addTreeviewCategory(PreferencesCategory)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void addTreeviewCategory(PreferencesCategory)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigManager.stats
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.identities
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.managers
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSetting(Lcom/dmdirc/config/prefs/PreferencesSetting;)V
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.addSubCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.isInline()Z
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.setParent(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesType.BOOLEAN
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesType.MULTICHOICE
    //#input(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesType.OPTIONALCOLOUR
    //#input(void addTreeviewCategory(PreferencesCategory)): parent
    //#input(void addTreeviewCategory(PreferencesCategory)): parent.__Tag
    //#input(void addTreeviewCategory(PreferencesCategory)): parent.isInline
    //#input(void addTreeviewCategory(PreferencesCategory)): parent.subcats
    //#output(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void addTreeviewCategory(PreferencesCategory)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void addTreeviewCategory(PreferencesCategory)): new ArrayList(getSources#1) num objects
    //#output(void addTreeviewCategory(PreferencesCategory)): new ArrayList(getSources#1).__Lock
    //#output(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).network
    //#output(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).server
    //#output(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void addTreeviewCategory(PreferencesCategory)): new MapList(ConfigManager#1) num objects
    //#new obj(void addTreeviewCategory(PreferencesCategory)): java.lang.StringBuilder:toString(...)
    //#new obj(void addTreeviewCategory(PreferencesCategory)): new ArrayList(getSources#1)
    //#new obj(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void addTreeviewCategory(PreferencesCategory)): new MapList(ConfigManager#1)
    //#pre[7] (void addTreeviewCategory(PreferencesCategory)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[8] (void addTreeviewCategory(PreferencesCategory)): parent != null
    //#pre[9] (void addTreeviewCategory(PreferencesCategory)): parent.__Tag == com/dmdirc/config/prefs/PreferencesCategory
    //#pre[10] (void addTreeviewCategory(PreferencesCategory)): init'ed(parent.isInline)
    //#pre[11] (void addTreeviewCategory(PreferencesCategory)): parent.subcats != null
    //#pre[1] (void addTreeviewCategory(PreferencesCategory)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void addTreeviewCategory(PreferencesCategory)): category.isInline@499 == 1
    //#post(void addTreeviewCategory(PreferencesCategory)): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void addTreeviewCategory(PreferencesCategory)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void addTreeviewCategory(PreferencesCategory)): new ArrayList(getSources#1) num objects == 0
    //#post(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void addTreeviewCategory(PreferencesCategory)): new MapList(ConfigManager#1) num objects == 0
    //#post(void addTreeviewCategory(PreferencesCategory)): new ArrayList(getSources#1) num objects <= 1
    //#post(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addTreeviewCategory(PreferencesCategory)): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void addTreeviewCategory(PreferencesCategory)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void addTreeviewCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addTreeviewCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void addTreeviewCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addTreeviewCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void addTreeviewCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addTreeviewCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void addTreeviewCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addTreeviewCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void addTreeviewCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addTreeviewCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void addTreeviewCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void addTreeviewCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void addTreeviewCategory(PreferencesCategory)): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void addTreeviewCategory(PreferencesCategory)): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void addTreeviewCategory(PreferencesCategory)): not_init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ListenerList
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:hasOption
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:getOption
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:getSources
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:addListener
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:addConfigManager
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:getTarget
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void addTreeviewCategory(PreferencesCategory)): Effects-of-calling:com.dmdirc.config.prefs.PreferencesType:equals

        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "treeview", "backgroundcolour", "Treeview background colour",
                "Background colour to use for the treeview"));
        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "treeview", "foregroundcolour", "Treeview foreground colour",
                "Foreground colour to use for the treeview"));
        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "ui", "treeviewRolloverColour", "Treeview rollover colour",
                "Background colour to use when the mouse cursor is over a node"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "treeview", "sortwindows", "Sort windows",
                "Sort windows belonging to servers in the treeview?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "treeview", "sortservers", "Sort servers",
                "Sort servers in the treeview?"));
        category.addSetting(new PreferencesSetting(PreferencesType.BOOLEAN,
                "ui", "treeviewActiveBold", "Active node bold",
                "Make the active node bold?"));
        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "ui", "treeviewActiveBackground", "Active node background",
                "Background colour to use for active treeview node"));
        category.addSetting(new PreferencesSetting(PreferencesType.OPTIONALCOLOUR,
                "ui", "treeviewActiveForeground", "Active node foreground",
                "Foreground colour to use for active treeview node"));

        parent.addSubCategory(category);
    }
    //#PreferencesManager.java:525: end of method: void com.dmdirc.config.prefs.PreferencesManager.addTreeviewCategory(PreferencesCategory)

    /**
     * Creates and adds the "Plugins" category.
     */
    private void addPluginsCategory() {
        // TODO: Abstract the panel

        addCategory(new PreferencesCategory("Plugins", "", "category-addons",
    //#PreferencesManager.java:533: method: void com.dmdirc.config.prefs.PreferencesManager.addPluginsCategory()
    //#PreferencesManager.java:533: Warning: method not available - call not analyzed
    //#    call on UIController com.dmdirc.Main:getUI()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addPluginsCategory()
    //#    unanalyzed callee: UIController com.dmdirc.Main:getUI()
    //#PreferencesManager.java:533: Warning: method not available - call not analyzed
    //#    call on PreferencesInterface com.dmdirc.ui.interfaces.UIController:getPluginPrefsPanel()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addPluginsCategory()
    //#    unanalyzed callee: PreferencesInterface com.dmdirc.ui.interfaces.UIController:getPluginPrefsPanel()
    //#input(void addPluginsCategory()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void addPluginsCategory()): __Descendant_Table[others]
    //#input(void addPluginsCategory()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addPluginsCategory()): this
    //#input(void addPluginsCategory()): this.__Tag
    //#input(void addPluginsCategory()): this.categories
    //#pre[2] (void addPluginsCategory()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[3] (void addPluginsCategory()): this.categories != null
    //#presumption(void addPluginsCategory()): com.dmdirc.Main:getUI(...)@533 != null
    //#unanalyzed(void addPluginsCategory()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addPluginsCategory()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addPluginsCategory()): Effects-of-calling:com.dmdirc.util.ListenerList
                Main.getUI().getPluginPrefsPanel()));
    }
    //#PreferencesManager.java:535: end of method: void com.dmdirc.config.prefs.PreferencesManager.addPluginsCategory()

    /**
     * Creates and adds the "Updates" category.
     */
    private void addUpdatesCategory() {
        // TODO: Abstract the panel

        addCategory(new PreferencesCategory("Updates", "", "category-updates",
    //#PreferencesManager.java:543: method: void com.dmdirc.config.prefs.PreferencesManager.addUpdatesCategory()
    //#PreferencesManager.java:543: Warning: method not available - call not analyzed
    //#    call on UIController com.dmdirc.Main:getUI()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addUpdatesCategory()
    //#    unanalyzed callee: UIController com.dmdirc.Main:getUI()
    //#PreferencesManager.java:543: Warning: method not available - call not analyzed
    //#    call on PreferencesInterface com.dmdirc.ui.interfaces.UIController:getUpdatesPrefsPanel()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addUpdatesCategory()
    //#    unanalyzed callee: PreferencesInterface com.dmdirc.ui.interfaces.UIController:getUpdatesPrefsPanel()
    //#input(void addUpdatesCategory()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void addUpdatesCategory()): __Descendant_Table[others]
    //#input(void addUpdatesCategory()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addUpdatesCategory()): this
    //#input(void addUpdatesCategory()): this.__Tag
    //#input(void addUpdatesCategory()): this.categories
    //#pre[2] (void addUpdatesCategory()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[3] (void addUpdatesCategory()): this.categories != null
    //#presumption(void addUpdatesCategory()): com.dmdirc.Main:getUI(...)@543 != null
    //#unanalyzed(void addUpdatesCategory()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addUpdatesCategory()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addUpdatesCategory()): Effects-of-calling:com.dmdirc.util.ListenerList
                Main.getUI().getUpdatesPrefsPanel()));
    }
    //#PreferencesManager.java:545: end of method: void com.dmdirc.config.prefs.PreferencesManager.addUpdatesCategory()

    /**
     * Creates and adds the "URL Handlers" category.
     */
    private void addUrlHandlerCategory() {
        // TODO: Abstract the panel

        addCategory(new PreferencesCategory("URL Handlers",
    //#PreferencesManager.java:553: method: void com.dmdirc.config.prefs.PreferencesManager.addUrlHandlerCategory()
    //#PreferencesManager.java:553: Warning: method not available - call not analyzed
    //#    call on UIController com.dmdirc.Main:getUI()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addUrlHandlerCategory()
    //#    unanalyzed callee: UIController com.dmdirc.Main:getUI()
    //#PreferencesManager.java:553: Warning: method not available - call not analyzed
    //#    call on PreferencesInterface com.dmdirc.ui.interfaces.UIController:getUrlHandlersPrefsPanel()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void addUrlHandlerCategory()
    //#    unanalyzed callee: PreferencesInterface com.dmdirc.ui.interfaces.UIController:getUrlHandlersPrefsPanel()
    //#input(void addUrlHandlerCategory()): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#input(void addUrlHandlerCategory()): __Descendant_Table[others]
    //#input(void addUrlHandlerCategory()): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#input(void addUrlHandlerCategory()): this
    //#input(void addUrlHandlerCategory()): this.__Tag
    //#input(void addUrlHandlerCategory()): this.categories
    //#pre[2] (void addUrlHandlerCategory()): this.__Tag == com/dmdirc/config/prefs/PreferencesManager
    //#pre[3] (void addUrlHandlerCategory()): this.categories != null
    //#presumption(void addUrlHandlerCategory()): com.dmdirc.Main:getUI(...)@553 != null
    //#unanalyzed(void addUrlHandlerCategory()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void addUrlHandlerCategory()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void addUrlHandlerCategory()): Effects-of-calling:com.dmdirc.util.ListenerList
                "Configure how DMDirc handles different types of URLs",
                "category-urlhandlers", Main.getUI().getUrlHandlersPrefsPanel()));
    }
    //#PreferencesManager.java:556: end of method: void com.dmdirc.config.prefs.PreferencesManager.addUrlHandlerCategory()

    /**
     * Registers the specified save listener with this manager.
     *
     * @param listener The listener to be registered
     */
    public void registerSaveListener(final PreferencesInterface listener) {
        listeners.add(PreferencesInterface.class, listener);
    //#PreferencesManager.java:564: method: void com.dmdirc.config.prefs.PreferencesManager.registerSaveListener(PreferencesInterface)
    //#PreferencesManager.java:564: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.util.ListenerList:add(Class, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void registerSaveListener(PreferencesInterface)
    //#    unanalyzed callee: void com.dmdirc.util.ListenerList:add(Class, Object)
    //#input(void registerSaveListener(PreferencesInterface)): listener
    //#input(void registerSaveListener(PreferencesInterface)): this
    //#input(void registerSaveListener(PreferencesInterface)): this.listeners
    //#pre[3] (void registerSaveListener(PreferencesInterface)): this.listeners != null
    }
    //#PreferencesManager.java:565: end of method: void com.dmdirc.config.prefs.PreferencesManager.registerSaveListener(PreferencesInterface)

    /**
     * Fires the "save" methods of all registered listeners.
     */
    public void fireSaveListeners() {
        for (PreferencesInterface iface : listeners.get(PreferencesInterface.class)) {
    //#PreferencesManager.java:571: method: void com.dmdirc.config.prefs.PreferencesManager.fireSaveListeners()
    //#PreferencesManager.java:571: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.ListenerList:get(Class)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void fireSaveListeners()
    //#    unanalyzed callee: List com.dmdirc.util.ListenerList:get(Class)
    //#input(void fireSaveListeners()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void fireSaveListeners()): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void fireSaveListeners()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.getObject()Lcom/dmdirc/config/prefs/PreferencesInterface;
    //#input(void fireSaveListeners()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.getSubcats()Ljava/util/List;
    //#input(void fireSaveListeners()): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void fireSaveListeners()): com/dmdirc/config/prefs/PreferencesInterface.__Descendant_Table[com/dmdirc/config/prefs/PreferencesInterface]
    //#input(void fireSaveListeners()): com/dmdirc/config/prefs/PreferencesInterface.__Descendant_Table[others]
    //#input(void fireSaveListeners()): com/dmdirc/config/prefs/PreferencesInterface.__Dispatch_Table.save()V
    //#input(void fireSaveListeners()): this
    //#input(void fireSaveListeners()): this.categories
    //#input(void fireSaveListeners()): this.listeners
    //#pre[2] (void fireSaveListeners()): this.categories != null
    //#pre[3] (void fireSaveListeners()): this.listeners != null
    //#presumption(void fireSaveListeners()): category.object.__Tag@575 == com/dmdirc/config/prefs/PreferencesInterface
    //#presumption(void fireSaveListeners()): category.subcats@575 != null
    //#presumption(void fireSaveListeners()): com.dmdirc.util.ListenerList:get(...)@571 != null
    //#presumption(void fireSaveListeners()): java.util.Iterator:next(...).__Tag@571 == com/dmdirc/config/prefs/PreferencesInterface
    //#presumption(void fireSaveListeners()): java.util.Iterator:next(...).__Tag@575 == com/dmdirc/config/prefs/PreferencesCategory
    //#presumption(void fireSaveListeners()): java.util.Iterator:next(...)@571 != null
    //#presumption(void fireSaveListeners()): java.util.Iterator:next(...)@575 != null
    //#unanalyzed(void fireSaveListeners()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void fireSaveListeners()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void fireSaveListeners()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void fireSaveListeners()): Effects-of-calling:save
    //#unanalyzed(void fireSaveListeners()): Effects-of-calling:fireSaveListener
    //#test_vector(void fireSaveListeners()): java.util.Iterator:hasNext(...)@571: {0}, {1}
    //#test_vector(void fireSaveListeners()): java.util.Iterator:hasNext(...)@575: {0}, {1}
            iface.save();
    //#PreferencesManager.java:572: Warning: method not available - call not analyzed
    //#    call on void save()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void fireSaveListeners()
    //#    unanalyzed callee: void save()
        }

        for (PreferencesCategory category : categories) {
            fireSaveListener(category);
        }
    }
    //#PreferencesManager.java:578: end of method: void com.dmdirc.config.prefs.PreferencesManager.fireSaveListeners()

    /**
     * Fires the save listener for any objects within the specified category.
     *
     * @param category The category to check
     */
    private void fireSaveListener(final PreferencesCategory category) {
        if (category.hasObject()) {
    //#PreferencesManager.java:586: method: void com.dmdirc.config.prefs.PreferencesManager.fireSaveListener(PreferencesCategory)
    //#input(void fireSaveListener(PreferencesCategory)): category
    //#input(void fireSaveListener(PreferencesCategory)): category.__Tag
    //#input(void fireSaveListener(PreferencesCategory)): category.object
    //#input(void fireSaveListener(PreferencesCategory)): category.object.__Tag
    //#input(void fireSaveListener(PreferencesCategory)): category.subcats
    //#input(void fireSaveListener(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[com/dmdirc/config/prefs/PreferencesCategory]
    //#input(void fireSaveListener(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Descendant_Table[others]
    //#input(void fireSaveListener(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.getObject()Lcom/dmdirc/config/prefs/PreferencesInterface;
    //#input(void fireSaveListener(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.getSubcats()Ljava/util/List;
    //#input(void fireSaveListener(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesCategory.__Dispatch_Table.hasObject()Z
    //#input(void fireSaveListener(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesInterface.__Descendant_Table[com/dmdirc/config/prefs/PreferencesInterface]
    //#input(void fireSaveListener(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesInterface.__Descendant_Table[others]
    //#input(void fireSaveListener(PreferencesCategory)): com/dmdirc/config/prefs/PreferencesInterface.__Dispatch_Table.save()V
    //#input(void fireSaveListener(PreferencesCategory)): this
    //#pre[1] (void fireSaveListener(PreferencesCategory)): category != null
    //#pre[2] (void fireSaveListener(PreferencesCategory)): category.__Tag == com/dmdirc/config/prefs/PreferencesCategory
    //#pre[5] (void fireSaveListener(PreferencesCategory)): category.subcats != null
    //#pre[4] (void fireSaveListener(PreferencesCategory)): (soft) category.object.__Tag == com/dmdirc/config/prefs/PreferencesInterface
    //#presumption(void fireSaveListener(PreferencesCategory)): java.util.Iterator:next(...).__Tag@590 == com/dmdirc/config/prefs/PreferencesCategory
    //#presumption(void fireSaveListener(PreferencesCategory)): java.util.Iterator:next(...)@590 != null
    //#presumption(void fireSaveListener(PreferencesCategory)): subcategory.object.__Tag@590 == com/dmdirc/config/prefs/PreferencesInterface
    //#presumption(void fireSaveListener(PreferencesCategory)): subcategory.subcats@590 != null
    //#unanalyzed(void fireSaveListener(PreferencesCategory)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void fireSaveListener(PreferencesCategory)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void fireSaveListener(PreferencesCategory)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void fireSaveListener(PreferencesCategory)): Effects-of-calling:save
    //#unanalyzed(void fireSaveListener(PreferencesCategory)): Effects-of-calling:fireSaveListener
    //#test_vector(void fireSaveListener(PreferencesCategory)): category.object: Addr_Set{null}, Inverse{null}
    //#test_vector(void fireSaveListener(PreferencesCategory)): java.util.Iterator:hasNext(...)@590: {0}, {1}
            category.getObject().save();
    //#PreferencesManager.java:587: Warning: method not available - call not analyzed
    //#    call on void save()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void fireSaveListener(PreferencesCategory)
    //#    unanalyzed callee: void save()
        }

        for (PreferencesCategory subcategory : category.getSubcats()) {
            fireSaveListener(subcategory);
        }
    }
    //#PreferencesManager.java:593: end of method: void com.dmdirc.config.prefs.PreferencesManager.fireSaveListener(PreferencesCategory)

    /**
     * Fires the CLIENT_PREFS_CLOSED action
     *
     * @since 0.6
     */
    public void close() {
        ActionManager.processEvent(CoreActionType.CLIENT_PREFS_CLOSED, null);
    //#PreferencesManager.java:601: method: void com.dmdirc.config.prefs.PreferencesManager.close()
    //#PreferencesManager.java:601: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.actions.ActionManager:processEvent(ActionType, StringBuffer, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.config.prefs.PreferencesManager
    //#    method: void close()
    //#    unanalyzed callee: void com.dmdirc.actions.ActionManager:processEvent(ActionType, StringBuffer, Object[])
    //#input(void close()): com.dmdirc.actions.CoreActionType.CLIENT_PREFS_CLOSED
    //#presumption(void close()): init'ed(com.dmdirc.actions.CoreActionType.CLIENT_PREFS_CLOSED)
    }
    //#PreferencesManager.java:602: end of method: void com.dmdirc.config.prefs.PreferencesManager.close()

}
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager]
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addAdvancedCategory()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addConnectionCategory()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addDefaultCategories()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addGeneralCategory()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addGuiCategory()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addMessagesCategory()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addNicklistCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addNotificationsCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addPluginsCategory()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addThemesCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addTreeviewCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addUpdatesCategory()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addUrlHandlerCategory()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.close()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.dismiss()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.fireSaveListener(Lcom/dmdirc/config/prefs/PreferencesCategory;)V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.fireSaveListeners()V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.getCategories()Ljava/util/List;
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.getCategory(Ljava/lang/String;)Lcom/dmdirc/config/prefs/PreferencesCategory;
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.registerSaveListener(Lcom/dmdirc/config/prefs/PreferencesInterface;)V
    //#output(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.save()Z
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Descendant_Table[com/dmdirc/config/prefs/PreferencesManager] == &__Dispatch_Table
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addAdvancedCategory()V == &addAdvancedCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V == &addCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addConnectionCategory()V == &addConnectionCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addDefaultCategories()V == &addDefaultCategories
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addGeneralCategory()V == &addGeneralCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addGuiCategory()V == &addGuiCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addMessagesCategory()V == &addMessagesCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addNicklistCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V == &addNicklistCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addNotificationsCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V == &addNotificationsCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addPluginsCategory()V == &addPluginsCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addThemesCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V == &addThemesCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addTreeviewCategory(Lcom/dmdirc/config/prefs/PreferencesCategory;)V == &addTreeviewCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addUpdatesCategory()V == &addUpdatesCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.addUrlHandlerCategory()V == &addUrlHandlerCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.close()V == &close
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.dismiss()V == &dismiss
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.fireSaveListener(Lcom/dmdirc/config/prefs/PreferencesCategory;)V == &fireSaveListener
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.fireSaveListeners()V == &fireSaveListeners
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.getCategories()Ljava/util/List; == &getCategories
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.getCategory(Ljava/lang/String;)Lcom/dmdirc/config/prefs/PreferencesCategory; == &getCategory
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.registerSaveListener(Lcom/dmdirc/config/prefs/PreferencesInterface;)V == &registerSaveListener
    //#post(com.dmdirc.config.prefs.PreferencesManager__static_init): __Dispatch_Table.save()Z == &save
    //#PreferencesManager.java:: end of method: com.dmdirc.config.prefs.PreferencesManager.com.dmdirc.config.prefs.PreferencesManager__static_init
    //#PreferencesManager.java:: end of class: com.dmdirc.config.prefs.PreferencesManager
