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

package com.dmdirc.addons.ui_swing.framemanager.tree;

import com.dmdirc.FrameContainerComparator;
import com.dmdirc.GlobalWindow;
import com.dmdirc.config.IdentityManager;

import javax.swing.tree.DefaultTreeModel;

/**
 * A simple sorted tree data model based on DefaultTreeModel.
 */
public class TreeViewModel extends DefaultTreeModel {

    /**
     * A version number for this class. It should be changed whenever the class
     * structure is changed (or anything else that would prevent serialized
     * objects being unserialized with the new class).
     */
    private static final long serialVersionUID = 1;
    /** Frame container comparator. */
    private final FrameContainerComparator comparator;

    /**
     * Creates a tree in which any node can have children.
     *
     * @param root a TreeNode object that is the root of the tree.
     */
    public TreeViewModel(final TreeViewNode root) {
        this(root, false);
    //#TreeViewModel.java:51: method: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)): root
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)): this
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)): new FrameContainerComparator(TreeViewModel#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)): this.comparator
    //#new obj(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)): new FrameContainerComparator(TreeViewModel#1)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)): this.comparator == &new FrameContainerComparator(TreeViewModel#1)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)): new FrameContainerComparator(TreeViewModel#1) num objects == 1
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)): Effects-of-calling:javax.swing.tree.DefaultTreeModel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)): Effects-of-calling:com.dmdirc.FrameContainerComparator
    }
    //#TreeViewModel.java:52: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode)

    /**
     * Creates a tree specifying whether any node can have children,
     * or whether only certain nodes can have children.
     *
     * @param asksAllowsChildren true = ask whether child can have chilren,
     * false all nodes can have chilren.
     * @param root a root TreeNode.
     */
    public TreeViewModel(final TreeViewNode root,
            final boolean asksAllowsChildren) {
        super(root, asksAllowsChildren);
    //#TreeViewModel.java:64: method: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)): asksAllowsChildren
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)): root
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)): this
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)): new FrameContainerComparator(TreeViewModel#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)): this.comparator
    //#new obj(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)): new FrameContainerComparator(TreeViewModel#1)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)): this.comparator == &new FrameContainerComparator(TreeViewModel#1)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)): new FrameContainerComparator(TreeViewModel#1) num objects == 1

        comparator = new FrameContainerComparator();
    //#TreeViewModel.java:66: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.FrameContainerComparator()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)
    //#    unanalyzed callee: void com.dmdirc.FrameContainerComparator()
    }
    //#TreeViewModel.java:67: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel(TreeViewNode, bool)

    /**
     * Inserts a new node into the tree and fires the appropriate events.
     *
     * @param newChild child to be added.
     * @param parent parent child is to be added too.
     */
    public final void insertNodeInto(final TreeViewNode newChild,
            final TreeViewNode parent) {
        int index = 0;
    //#TreeViewModel.java:77: method: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.insertNodeInto(TreeViewNode, TreeViewNode)
    //#TreeViewModel.java:77: Warning: unused assignment
    //#    Unused assignment into index
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: void insertNodeInto(TreeViewNode, TreeViewNode)
    //#    Attribs:  Uncertain
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): ""._tainted
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): "."._tainted
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): "<Unknown>"._tainted
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): "@"._tainted
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): "Config option not found: "._tainted
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): "sortservers"._tainted
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): "sortwindows"._tainted
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): "treeview"._tainted
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOptionBool(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.stats
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigSource]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Descendant_Table[others]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig.file
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.identities
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.managers
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): newChild
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): newChild.__Tag
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): newChild.frameContainer
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): parent
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): this
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): this.comparator
    //#input(void insertNodeInto(TreeViewNode, TreeViewNode)): this.root
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ArrayList(getSources#1) num objects
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ArrayList(getSources#1).__Lock
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).__Lock
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).file
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).network
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).server
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void insertNodeInto(TreeViewNode, TreeViewNode)): new MapList(ConfigManager#1) num objects
    //#new obj(void insertNodeInto(TreeViewNode, TreeViewNode)): java.lang.StringBuilder:toString(...)
    //#new obj(void insertNodeInto(TreeViewNode, TreeViewNode)): new ArrayList(getSources#1)
    //#new obj(void insertNodeInto(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void insertNodeInto(TreeViewNode, TreeViewNode)): new MapList(ConfigManager#1)
    //#pre[9] (void insertNodeInto(TreeViewNode, TreeViewNode)): newChild != null
    //#pre[10] (void insertNodeInto(TreeViewNode, TreeViewNode)): newChild.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#pre[11] (void insertNodeInto(TreeViewNode, TreeViewNode)): init'ed(newChild.frameContainer)
    //#pre[1] (void insertNodeInto(TreeViewNode, TreeViewNode)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#pre[5] (void insertNodeInto(TreeViewNode, TreeViewNode)): (soft) com/dmdirc/config/IdentityManager.globalconfig.__Tag == com/dmdirc/config/ConfigManager
    //#pre[12] (void insertNodeInto(TreeViewNode, TreeViewNode)): (soft) init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[13] (void insertNodeInto(TreeViewNode, TreeViewNode)): (soft) parent != null
    //#pre[15] (void insertNodeInto(TreeViewNode, TreeViewNode)): (soft) this.comparator != null
    //#pre[16] (void insertNodeInto(TreeViewNode, TreeViewNode)): (soft) init'ed(this.root)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): init'ed(new ArrayList(getSources#1) num objects)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ArrayList(getSources#1).__Lock)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1) num objects)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ConfigManager(getGlobalConfig#1).__Lock)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ConfigManager(getGlobalConfig#1).file)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ConfigManager(getGlobalConfig#1).network)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ConfigManager(getGlobalConfig#1).server)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): possibly_updated(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void insertNodeInto(TreeViewNode, TreeViewNode)): init'ed(new MapList(ConfigManager#1) num objects)
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.FrameContainerComparator:compare
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.GlobalWindow:instanceof
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Object:equals
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:getTarget
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:addListener
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:getSources
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:addConfigManager
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:hasOption
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:getOption
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Boolean:parseBoolean
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildCount
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildAt
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getUserObject
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(void insertNodeInto(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.String:compareToIgnoreCase
        index = getIndex(newChild, parent);
        super.insertNodeInto(newChild, parent, index);
    }
    //#TreeViewModel.java:80: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.insertNodeInto(TreeViewNode, TreeViewNode)

    /**
     * Compares the new child with the existing children or parent to decide
     * where it needs to be inserted.
     *
     * @param newChild new node to be inserted.
     * @param parent node the new node will be inserted into.
     *
     * @return index where new node is to be inserted.
     */
    private int getIndex(final TreeViewNode newChild, final TreeViewNode parent) {
        if (newChild.getFrameContainer() instanceof GlobalWindow) {
    //#TreeViewModel.java:92: method: int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.getIndex(TreeViewNode, TreeViewNode)
    //#input(int getIndex(TreeViewNode, TreeViewNode)): ""._tainted
    //#input(int getIndex(TreeViewNode, TreeViewNode)): "."._tainted
    //#input(int getIndex(TreeViewNode, TreeViewNode)): "<Unknown>"._tainted
    //#input(int getIndex(TreeViewNode, TreeViewNode)): "@"._tainted
    //#input(int getIndex(TreeViewNode, TreeViewNode)): "Config option not found: "._tainted
    //#input(int getIndex(TreeViewNode, TreeViewNode)): "sortservers"._tainted
    //#input(int getIndex(TreeViewNode, TreeViewNode)): "sortwindows"._tainted
    //#input(int getIndex(TreeViewNode, TreeViewNode)): "treeview"._tainted
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOptionBool(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigManager.stats
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigSource]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Descendant_Table[others]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigSource.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig.file
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.identities
    //#input(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.managers
    //#input(int getIndex(TreeViewNode, TreeViewNode)): newChild
    //#input(int getIndex(TreeViewNode, TreeViewNode)): newChild.__Tag
    //#input(int getIndex(TreeViewNode, TreeViewNode)): newChild.frameContainer
    //#input(int getIndex(TreeViewNode, TreeViewNode)): parent
    //#input(int getIndex(TreeViewNode, TreeViewNode)): this
    //#input(int getIndex(TreeViewNode, TreeViewNode)): this.comparator
    //#input(int getIndex(TreeViewNode, TreeViewNode)): this.root
    //#output(int getIndex(TreeViewNode, TreeViewNode)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(int getIndex(TreeViewNode, TreeViewNode)): java.lang.StringBuilder:toString(...)._tainted
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ArrayList(getSources#1) num objects
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ArrayList(getSources#1).__Lock
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).__Lock
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).channel
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).file
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).network
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).server
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1).sources
    //#output(int getIndex(TreeViewNode, TreeViewNode)): new MapList(ConfigManager#1) num objects
    //#output(int getIndex(TreeViewNode, TreeViewNode)): return_value
    //#new obj(int getIndex(TreeViewNode, TreeViewNode)): java.lang.StringBuilder:toString(...)
    //#new obj(int getIndex(TreeViewNode, TreeViewNode)): new ArrayList(getSources#1)
    //#new obj(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1)
    //#new obj(int getIndex(TreeViewNode, TreeViewNode)): new MapList(ConfigManager#1)
    //#pre[8] (int getIndex(TreeViewNode, TreeViewNode)): newChild != null
    //#pre[9] (int getIndex(TreeViewNode, TreeViewNode)): newChild.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#pre[10] (int getIndex(TreeViewNode, TreeViewNode)): init'ed(newChild.frameContainer)
    //#pre[1] (int getIndex(TreeViewNode, TreeViewNode)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#pre[5] (int getIndex(TreeViewNode, TreeViewNode)): (soft) com/dmdirc/config/IdentityManager.globalconfig.__Tag == com/dmdirc/config/ConfigManager
    //#pre[11] (int getIndex(TreeViewNode, TreeViewNode)): (soft) init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[12] (int getIndex(TreeViewNode, TreeViewNode)): (soft) parent != null
    //#pre[14] (int getIndex(TreeViewNode, TreeViewNode)): (soft) this.comparator != null
    //#pre[15] (int getIndex(TreeViewNode, TreeViewNode)): (soft) init'ed(this.root)
    //#presumption(int getIndex(TreeViewNode, TreeViewNode)): com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildAt(...).__Tag@102 == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#presumption(int getIndex(TreeViewNode, TreeViewNode)): com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildAt(...)@102 != null
    //#presumption(int getIndex(TreeViewNode, TreeViewNode)): com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getUserObject(...)@105 != null
    //#presumption(int getIndex(TreeViewNode, TreeViewNode)): com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getUserObject(...)@105 != null
    //#presumption(int getIndex(TreeViewNode, TreeViewNode)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(return_value)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): new ArrayList(getSources#1) num objects <= 1
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ArrayList(getSources#1) num objects)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): new ConfigManager(getGlobalConfig#1) num objects <= 1
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1) num objects)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1).__Lock)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1).file)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(int getIndex(TreeViewNode, TreeViewNode)): new MapList(ConfigManager#1) num objects <= 1
    //#post(int getIndex(TreeViewNode, TreeViewNode)): init'ed(new MapList(ConfigManager#1) num objects)
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.FrameContainerComparator:compare
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.List:add
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:getTarget
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:addListener
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:getSources
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:addConfigManager
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:hasOption
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:getOption
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:java.lang.Boolean:parseBoolean
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(int getIndex(TreeViewNode, TreeViewNode)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#test_vector(int getIndex(TreeViewNode, TreeViewNode)): java.lang.Boolean:parseBoolean(...)@159: {1}, {0}
    //#test_vector(int getIndex(TreeViewNode, TreeViewNode)): java.lang.Boolean:parseBoolean(...)@159: {0}, {1}
    //#test_vector(int getIndex(TreeViewNode, TreeViewNode)): java.lang.Object:equals(...)@96: {0}, {1}
    //#test_vector(int getIndex(TreeViewNode, TreeViewNode)): java.lang.String:compareToIgnoreCase(...)@105: {0..4_294_967_295}, {-2_147_483_648..-1}
            return 0;
        }

        if (parent.equals(root) && !IdentityManager.getGlobalConfig().
                getOptionBool("treeview", "sortservers")) {
            return parent.getChildCount();
    //#TreeViewModel.java:98: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildCount()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: int getIndex(TreeViewNode, TreeViewNode)
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildCount()
        }

        for (int i = 0; i < parent.getChildCount(); i++) {
    //#TreeViewModel.java:101: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildCount()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: int getIndex(TreeViewNode, TreeViewNode)
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildCount()
            final TreeViewNode child = (TreeViewNode) parent.getChildAt(i);
    //#TreeViewModel.java:102: Warning: method not available - call not analyzed
    //#    call on TreeNode com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildAt(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: int getIndex(TreeViewNode, TreeViewNode)
    //#    unanalyzed callee: TreeNode com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildAt(int)
            if (sortBefore(newChild, child)) {
                return i;
            } else if (!sortAfter(newChild, child) && IdentityManager.getGlobalConfig().
    //#TreeViewModel.java:105: ?use of default init
    //#    init'ed(getGlobalConfig(...).__Tag)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: int getIndex(TreeViewNode, TreeViewNode)
    //#    basic block: bb_11
    //#    assertion: init'ed(getGlobalConfig(...).__Tag)
    //#    VN: getGlobalConfig(...).__Tag
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid  Uncertain
    //#TreeViewModel.java:105: ?null dereference
    //#    com/dmdirc/config/ConfigManager.__Descendant_Table[getGlobalConfig(...).__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: int getIndex(TreeViewNode, TreeViewNode)
    //#    basic block: bb_11
    //#    assertion: com/dmdirc/config/ConfigManager.__Descendant_Table[getGlobalConfig(...).__Tag] != null
    //#    VN: com/dmdirc/config/ConfigManager.__Descendant_Table[getGlobalConfig(...).__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#TreeViewModel.java:105: Warning: method not available - call not analyzed
    //#    call on Object com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getUserObject()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: int getIndex(TreeViewNode, TreeViewNode)
    //#    unanalyzed callee: Object com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getUserObject()
                    getOptionBool("treeview", "sortwindows") && newChild.getUserObject().
                    toString().compareToIgnoreCase(child.getUserObject().toString()) < 0) {
                return i;
            }
        }

        return parent.getChildCount();
    //#TreeViewModel.java:112: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildCount()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: int getIndex(TreeViewNode, TreeViewNode)
    //#    unanalyzed callee: int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getChildCount()
    //#TreeViewModel.java:112: end of method: int com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.getIndex(TreeViewNode, TreeViewNode)
    }

    /**
     * Compares the types of the specified nodes' objects to see if the new
     * node should be sorted before the other.
     *
     * @param newChild The new child to be tested
     * @param child The existing child that it's being tested against
     *
     * @return True iff newChild should be sorted before child
     */
    private boolean sortBefore(final TreeViewNode newChild, final TreeViewNode child) {
        return comparator.compare(newChild.getFrameContainer(), child.getFrameContainer()) <= -1;
    //#TreeViewModel.java:125: method: bool com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.sortBefore(TreeViewNode, TreeViewNode)
    //#TreeViewModel.java:125: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.FrameContainerComparator:compare(FrameContainer, FrameContainer)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: bool sortBefore(TreeViewNode, TreeViewNode)
    //#    unanalyzed callee: int com.dmdirc.FrameContainerComparator:compare(FrameContainer, FrameContainer)
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): child
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): child.__Tag
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): child.frameContainer
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): newChild
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): newChild.__Tag
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): newChild.frameContainer
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): this
    //#input(bool sortBefore(TreeViewNode, TreeViewNode)): this.comparator
    //#output(bool sortBefore(TreeViewNode, TreeViewNode)): return_value
    //#pre[1] (bool sortBefore(TreeViewNode, TreeViewNode)): child != null
    //#pre[2] (bool sortBefore(TreeViewNode, TreeViewNode)): child.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#pre[3] (bool sortBefore(TreeViewNode, TreeViewNode)): init'ed(child.frameContainer)
    //#pre[4] (bool sortBefore(TreeViewNode, TreeViewNode)): newChild != null
    //#pre[5] (bool sortBefore(TreeViewNode, TreeViewNode)): newChild.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#pre[6] (bool sortBefore(TreeViewNode, TreeViewNode)): init'ed(newChild.frameContainer)
    //#pre[8] (bool sortBefore(TreeViewNode, TreeViewNode)): this.comparator != null
    //#post(bool sortBefore(TreeViewNode, TreeViewNode)): init'ed(return_value)
    //#TreeViewModel.java:125: end of method: bool com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.sortBefore(TreeViewNode, TreeViewNode)
    }

    /**
     * Compares the types of the specified nodes' objects to see if the new
     * node should be sorted after the other.
     *
     * @param newChild The new child to be tested
     * @param child The existing child that it's being tested against
     *
     * @return True iff newChild should be sorted before child
     */
    private boolean sortAfter(final TreeViewNode newChild,final TreeViewNode child) {
        return comparator.compare(newChild.getFrameContainer(), child.getFrameContainer()) >= 1;
    //#TreeViewModel.java:138: method: bool com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.sortAfter(TreeViewNode, TreeViewNode)
    //#TreeViewModel.java:138: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.FrameContainerComparator:compare(FrameContainer, FrameContainer)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: bool sortAfter(TreeViewNode, TreeViewNode)
    //#    unanalyzed callee: int com.dmdirc.FrameContainerComparator:compare(FrameContainer, FrameContainer)
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): child
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): child.__Tag
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): child.frameContainer
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): newChild
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): newChild.__Tag
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): newChild.frameContainer
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): this
    //#input(bool sortAfter(TreeViewNode, TreeViewNode)): this.comparator
    //#output(bool sortAfter(TreeViewNode, TreeViewNode)): return_value
    //#pre[1] (bool sortAfter(TreeViewNode, TreeViewNode)): child != null
    //#pre[2] (bool sortAfter(TreeViewNode, TreeViewNode)): child.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#pre[3] (bool sortAfter(TreeViewNode, TreeViewNode)): init'ed(child.frameContainer)
    //#pre[4] (bool sortAfter(TreeViewNode, TreeViewNode)): newChild != null
    //#pre[5] (bool sortAfter(TreeViewNode, TreeViewNode)): newChild.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#pre[6] (bool sortAfter(TreeViewNode, TreeViewNode)): init'ed(newChild.frameContainer)
    //#pre[8] (bool sortAfter(TreeViewNode, TreeViewNode)): this.comparator != null
    //#post(bool sortAfter(TreeViewNode, TreeViewNode)): init'ed(return_value)
    //#TreeViewModel.java:138: end of method: bool com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.sortAfter(TreeViewNode, TreeViewNode)
    }
    
    /**
     * Returns the root node for this model.
     * 
     * @return Root node
     */
    public TreeViewNode getRootNode() {
        return (TreeViewNode) getRoot();
    //#TreeViewModel.java:147: method: TreeViewNode com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.getRootNode()
    //#TreeViewModel.java:147: Warning: method not available - call not analyzed
    //#    call on Object com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:getRoot()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
    //#    method: TreeViewNode getRootNode()
    //#    unanalyzed callee: Object com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:getRoot()
    //#input(TreeViewNode getRootNode()): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(TreeViewNode getRootNode()): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(TreeViewNode getRootNode()): this
    //#output(TreeViewNode getRootNode()): return_value
    //#presumption(TreeViewNode getRootNode()): com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel:getRoot(...).__Tag@147 == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#post(TreeViewNode getRootNode()): init'ed(return_value)
    //#TreeViewModel.java:147: end of method: TreeViewNode com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.getRootNode()
    }
}
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewModel]
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.getIndex(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;)I
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.getRootNode()Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.insertNodeInto(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.sortAfter(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;)Z
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.sortBefore(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;)Z
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewModel] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.getIndex(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;)I == &getIndex
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.getRootNode()Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode; == &getRootNode
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.insertNodeInto(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;)V == &insertNodeInto
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.sortAfter(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;)Z == &sortAfter
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init): __Dispatch_Table.sortBefore(Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;)Z == &sortBefore
    //#TreeViewModel.java:: end of method: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel.com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel__static_init
    //#TreeViewModel.java:: end of class: com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewModel
