//# 0 errors, 611 messages
//#
/*
    //#Tree.java:1:1: class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2
    //#Tree.java:1:1: method: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2.com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2__static_init
    //#Tree.java:1:1: class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1
    //#Tree.java:1:1: method: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1.com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1__static_init
    //#Tree.java:1:1: class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#Tree.java:1:1: method: com.dmdirc.addons.ui_swing.framemanager.tree.Tree.com.dmdirc.addons.ui_swing.framemanager.tree.Tree__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.addons.ui_swing.UIUtilities;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.interfaces.ConfigChangeListener;
import com.dmdirc.addons.ui_swing.actions.CloseFrameContainerAction;
import com.dmdirc.addons.ui_swing.components.TreeScroller;
import com.dmdirc.addons.ui_swing.components.frames.TextFrame;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;

import net.miginfocom.layout.PlatformDefaults;

/**
 * Specialised JTree for the frame manager.
 */
public class Tree extends JTree implements MouseMotionListener,
        ConfigChangeListener, MouseListener {

    /**
     * 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;
    /** Drag selection enabled? */
    private boolean dragSelect;
    /** Drag button 1? */
    private boolean dragButton;
    /** Tree frame manager. */
    private TreeFrameManager manager;
    /** Current selection path. */
    private TreePath path;

    /**
     * Specialised JTree for frame manager.
     *
     * @param manager Frame manager
     * @param model tree model.
     */
    public Tree(final TreeFrameManager manager, final TreeModel model) {
        super(model);
    //#Tree.java:74: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): ""._tainted
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): "."._tainted
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): "<Unknown>"._tainted
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): "@"._tainted
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): "Config option not found: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): "dragSelection"._tainted
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): "treeview"._tainted
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigManager.__Dispatch_Table.addChangeListener(Ljava/lang/String;Ljava/lang/String;Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOptionBool(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigManager.stats
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigSource]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigSource.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigSource.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig.__Lock
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig.file
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig.listeners
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig.listeners.__Lock
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig.sources.__Lock
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.identities
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.managers
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): manager
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): model
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): this
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ArrayList(getSources#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ArrayList(getSources#1).__Lock
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).__Lock
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).file
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).network
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).server
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new MapList(ConfigManager#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new MapList(ConfigManager#1).__Lock
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): this.dragSelect
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): this.manager
    //#new obj(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): java.lang.StringBuilder:toString(...)
    //#new obj(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ArrayList(getSources#1)
    //#new obj(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new MapList(ConfigManager#1)
    //#pre[6] (void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[1] (void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): (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.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@88) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@88) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@88) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@88) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(...)@79 != null
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(...)@80 != null
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(...)@81 != null
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(...)@82 != null
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getSelectionModel(...)@83 != null
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): getGlobalConfig(...).listeners != null
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): net.miginfocom.layout.PlatformDefaults:getUnitValueX(...)@88 != null
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): net.miginfocom.layout.PlatformDefaults:getUnitValueX(...)@88 != null
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): net.miginfocom.layout.PlatformDefaults:getUnitValueX(...)@88 != null
    //#presumption(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): net.miginfocom.layout.PlatformDefaults:getUnitValueX(...)@88 != null
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ArrayList(getSources#1) num objects == 0
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1) num objects == 0
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new MapList(ConfigManager#1) num objects == 0
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(this.dragSelect)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): this.manager == manager
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(this.manager)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ArrayList(getSources#1) num objects <= 1
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ConfigManager(getGlobalConfig#1).__Lock)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ConfigManager(getGlobalConfig#1).__Tag)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ConfigManager(getGlobalConfig#1).channel)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ConfigManager(getGlobalConfig#1).file)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ConfigManager(getGlobalConfig#1).ircd)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ConfigManager(getGlobalConfig#1).listeners)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ConfigManager(getGlobalConfig#1).network)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ConfigManager(getGlobalConfig#1).server)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new ConfigManager(getGlobalConfig#1).sources)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): init'ed(new MapList(ConfigManager#1).__Lock)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:getTarget
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:addListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:getSources
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:addConfigManager
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:hasOption
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:getOption
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:java.lang.Boolean:parseBoolean
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.TreeScroller
    //#unanalyzed(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)): Effects-of-calling:com.dmdirc.util.MapList:add

        this.manager = manager;

        putClientProperty("JTree.lineStyle", "Angled");
    //#Tree.java:78: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:putClientProperty(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:putClientProperty(Object, Object)
        getInputMap().setParent(null);
    //#Tree.java:79: Warning: method not available - call not analyzed
    //#    call on InputMap com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: InputMap com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap()
        getInputMap(JComponent.WHEN_FOCUSED).clear();
    //#Tree.java:80: Warning: method not available - call not analyzed
    //#    call on InputMap com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: InputMap com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(int)
        getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).clear();
    //#Tree.java:81: Warning: method not available - call not analyzed
    //#    call on InputMap com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: InputMap com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(int)
        getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).clear();
    //#Tree.java:82: Warning: method not available - call not analyzed
    //#    call on InputMap com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: InputMap com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getInputMap(int)
        getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
    //#Tree.java:83: Warning: method not available - call not analyzed
    //#    call on TreeSelectionModel com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getSelectionModel()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: TreeSelectionModel com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getSelectionModel()
        setRootVisible(false);
    //#Tree.java:84: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setRootVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setRootVisible(bool)
        setRowHeight(0);
    //#Tree.java:85: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setRowHeight(int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setRowHeight(int)
        setShowsRootHandles(false);
    //#Tree.java:86: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setShowsRootHandles(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setShowsRootHandles(bool)
        setOpaque(true);
    //#Tree.java:87: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setOpaque(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setOpaque(bool)
        setBorder(BorderFactory.createEmptyBorder(
    //#Tree.java:88: Warning: method not available - call not analyzed
    //#    call on UnitValue net.miginfocom.layout.PlatformDefaults:getUnitValueX(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: UnitValue net.miginfocom.layout.PlatformDefaults:getUnitValueX(String)
    //#Tree.java:88: Warning: method not available - call not analyzed
    //#    call on float net.miginfocom.layout.UnitValue:getValue()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: float net.miginfocom.layout.UnitValue:getValue()
    //#Tree.java:88: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setBorder(Border)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setBorder(Border)
                (int) PlatformDefaults.getUnitValueX("related").getValue(),
                (int) PlatformDefaults.getUnitValueX("related").getValue(),
                (int) PlatformDefaults.getUnitValueX("related").getValue(),
                (int) PlatformDefaults.getUnitValueX("related").getValue()));
        new TreeScroller(this) {
    //#Tree.java:93: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1.com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1(Tree, JTree)
    //#Tree.java:93: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TreeScroller(JTree)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1(Tree, JTree)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TreeScroller(JTree)
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1(Tree, JTree)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1(Tree, JTree)): this
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1(Tree, JTree)): x0
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1(Tree, JTree)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1(Tree, JTree)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1(Tree, JTree)): init'ed(this.this$0)
    //#Tree.java:93: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1.com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1(Tree, JTree)

            /** {@inheritDoc} */
            @Override
            protected void setPath(final TreePath path) {
                super.setPath(path);
    //#Tree.java:98: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1.setPath(TreePath)
    //#Tree.java:98: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.TreeScroller:setPath(TreePath)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1
    //#    method: void setPath(TreePath)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.TreeScroller:setPath(TreePath)
    //#input(void setPath(TreePath)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(void setPath(TreePath)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(void setPath(TreePath)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(void setPath(TreePath)): path
    //#input(void setPath(TreePath)): this
    //#pre[1] (void setPath(TreePath)): path != null
    //#presumption(void setPath(TreePath)): javax.swing.tree.TreePath:getLastPathComponent(...).__Tag@99 == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#presumption(void setPath(TreePath)): javax.swing.tree.TreePath:getLastPathComponent(...).frameContainer@99 != null
    //#presumption(void setPath(TreePath)): javax.swing.tree.TreePath:getLastPathComponent(...)@99 != null
                ((TreeViewNode) path.getLastPathComponent()).getFrameContainer().activateFrame();
    //#Tree.java:99: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.FrameContainer:activateFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1
    //#    method: void setPath(TreePath)
    //#    unanalyzed callee: void com.dmdirc.FrameContainer:activateFrame()
            }
    //#Tree.java:100: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1.setPath(TreePath)
        };
        setFocusable(false);
    //#Tree.java:102: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setFocusable(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setFocusable(bool)

        dragSelect = IdentityManager.getGlobalConfig().getOptionBool("treeview",
                "dragSelection");
        IdentityManager.getGlobalConfig().addChangeListener("treeview",
                "dragSelection", this);

        addMouseListener(this);
    //#Tree.java:109: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:addMouseListener(MouseListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:addMouseListener(MouseListener)
        addMouseMotionListener(this);
    //#Tree.java:110: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:addMouseMotionListener(MouseMotionListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:addMouseMotionListener(MouseMotionListener)
    }
    //#Tree.java:111: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.com.dmdirc.addons.ui_swing.framemanager.tree.Tree(TreeFrameManager, TreeModel)

    /**
     * Set path.
     *
     * @param path Path
     */
    public void setTreePath(final TreePath path) {
        this.path = path;
    //#Tree.java:119: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.setTreePath(TreePath)
    //#input(void setTreePath(TreePath)): path
    //#input(void setTreePath(TreePath)): this
    //#output(void setTreePath(TreePath)): this.path
    //#post(void setTreePath(TreePath)): this.path == path
    //#post(void setTreePath(TreePath)): init'ed(this.path)
        UIUtilities.invokeLater(new Runnable() {
    //#Tree.java:120: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2.com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)): this
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)): this.val$path
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)): this.val$path == Param_2
    //#post(void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)): init'ed(this.val$path)
    //#Tree.java:120: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2.com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2(Tree, TreePath)
    //#Tree.java:120: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:invokeLater(Runnable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void setTreePath(TreePath)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:invokeLater(Runnable)

            @Override
            public void run() {
                setSelectionPath(path);
    //#Tree.java:124: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2.run()
    //#Tree.java:124: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setSelectionPath(TreePath)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree:setSelectionPath(TreePath)
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.val$path
    //#pre[2] (void run()): this.this$0 != null
            }
    //#Tree.java:125: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2.run()
        });
    }
    //#Tree.java:127: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.setTreePath(TreePath)

    /**
     * Returns the node for the specified location, returning null if rollover
     * is disabled or there is no node at the specified location.
     *
     * @param x x coordiantes
     * @param y y coordiantes
     *
     * @return node or null
     */
    public TreeViewNode getNodeForLocation(final int x,
            final int y) {
        TreeViewNode node = null;
    //#Tree.java:140: method: TreeViewNode com.dmdirc.addons.ui_swing.framemanager.tree.Tree.getNodeForLocation(int, int)
    //#input(TreeViewNode getNodeForLocation(int, int)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(TreeViewNode getNodeForLocation(int, int)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(TreeViewNode getNodeForLocation(int, int)): this
    //#input(TreeViewNode getNodeForLocation(int, int)): x
    //#input(TreeViewNode getNodeForLocation(int, int)): y
    //#output(TreeViewNode getNodeForLocation(int, int)): return_value
    //#presumption(TreeViewNode getNodeForLocation(int, int)): javax.swing.tree.TreePath:getLastPathComponent(...).__Tag@143 == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#post(TreeViewNode getNodeForLocation(int, int)): init'ed(return_value)
    //#test_vector(TreeViewNode getNodeForLocation(int, int)): com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation(...)@141: Addr_Set{null}, Inverse{null}
        final TreePath selectedPath = getPathForLocation(x, y);
    //#Tree.java:141: Warning: method not available - call not analyzed
    //#    call on TreePath com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation(int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: TreeViewNode getNodeForLocation(int, int)
    //#    unanalyzed callee: TreePath com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation(int, int)
        if (selectedPath != null) {
            node = (TreeViewNode) selectedPath.getLastPathComponent();
        }
        return node;
    //#Tree.java:145: end of method: TreeViewNode com.dmdirc.addons.ui_swing.framemanager.tree.Tree.getNodeForLocation(int, int)
    }

    /** {@inheritDoc} */
    @Override
    public void configChanged(final String domain, final String key) {
        dragSelect = IdentityManager.getGlobalConfig().getOptionBool("treeview",
    //#Tree.java:151: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.configChanged(String, String)
    //#input(void configChanged(String, String)): ""._tainted
    //#input(void configChanged(String, String)): "."._tainted
    //#input(void configChanged(String, String)): "<Unknown>"._tainted
    //#input(void configChanged(String, String)): "@"._tainted
    //#input(void configChanged(String, String)): "Config option not found: "._tainted
    //#input(void configChanged(String, String)): "dragSelection"._tainted
    //#input(void configChanged(String, String)): "treeview"._tainted
    //#input(void configChanged(String, String)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1).length
    //#input(void configChanged(String, String)): com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295]
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigManager$1.$SwitchMap$com$dmdirc$config$ConfigTarget$TYPE
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigManager.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigManager.__Descendant_Table[others]
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigManager.__Dispatch_Table.getOptionBool(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigManager.__Dispatch_Table.identityApplies(Lcom/dmdirc/config/Identity;)Z
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigManager.stats
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigManager]
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/ConfigSource]
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigSource.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigSource.__Descendant_Table[others]
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigSource.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigTarget.__Descendant_Table[com/dmdirc/config/ConfigTarget]
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigTarget.__Descendant_Table[others]
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getData()Ljava/lang/String;
    //#input(void configChanged(String, String)): com/dmdirc/config/ConfigTarget.__Dispatch_Table.getType()Lcom/dmdirc/config/ConfigTarget$TYPE;
    //#input(void configChanged(String, String)): com/dmdirc/config/Identity.__Descendant_Table[com/dmdirc/config/Identity]
    //#input(void configChanged(String, String)): com/dmdirc/config/Identity.__Descendant_Table[others]
    //#input(void configChanged(String, String)): com/dmdirc/config/Identity.__Dispatch_Table.addListener(Lcom/dmdirc/interfaces/ConfigChangeListener;)V
    //#input(void configChanged(String, String)): com/dmdirc/config/Identity.__Dispatch_Table.getOption(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    //#input(void configChanged(String, String)): com/dmdirc/config/Identity.__Dispatch_Table.getTarget()Lcom/dmdirc/config/ConfigTarget;
    //#input(void configChanged(String, String)): com/dmdirc/config/Identity.__Dispatch_Table.hasOption(Ljava/lang/String;Ljava/lang/String;)Z
    //#input(void configChanged(String, String)): com/dmdirc/config/IdentityManager.__Class_Obj.__Lock
    //#input(void configChanged(String, String)): com/dmdirc/config/IdentityManager.globalconfig
    //#input(void configChanged(String, String)): com/dmdirc/config/IdentityManager.globalconfig.__Lock
    //#input(void configChanged(String, String)): com/dmdirc/config/IdentityManager.globalconfig.__Tag
    //#input(void configChanged(String, String)): com/dmdirc/config/IdentityManager.globalconfig.file
    //#input(void configChanged(String, String)): com/dmdirc/config/IdentityManager.globalconfig.sources
    //#input(void configChanged(String, String)): com/dmdirc/config/IdentityManager.globalconfig.sources.__Lock
    //#input(void configChanged(String, String)): com/dmdirc/config/IdentityManager.identities
    //#input(void configChanged(String, String)): com/dmdirc/config/IdentityManager.managers
    //#input(void configChanged(String, String)): this
    //#output(void configChanged(String, String)): com/dmdirc/config/IdentityManager.globalconfig
    //#output(void configChanged(String, String)): java.lang.StringBuilder:toString(...)._tainted
    //#output(void configChanged(String, String)): new ArrayList(getSources#1) num objects
    //#output(void configChanged(String, String)): new ArrayList(getSources#1).__Lock
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1) num objects
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).__Lock
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).__Tag
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).channel
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).file
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).ircd
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).listeners
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).network
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).server
    //#output(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).sources
    //#output(void configChanged(String, String)): new MapList(ConfigManager#1) num objects
    //#output(void configChanged(String, String)): this.dragSelect
    //#new obj(void configChanged(String, String)): java.lang.StringBuilder:toString(...)
    //#new obj(void configChanged(String, String)): new ArrayList(getSources#1)
    //#new obj(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1)
    //#new obj(void configChanged(String, String)): new MapList(ConfigManager#1)
    //#pre[4] (void configChanged(String, String)): init'ed(com/dmdirc/config/IdentityManager.globalconfig)
    //#pre[1] (void configChanged(String, String)): (soft) init'ed(com.dmdirc.config.ConfigManager$1__static_init.new int[](ConfigManager$1__static_init#1)[0..4_294_967_295])
    //#presumption(void configChanged(String, String)): getGlobalConfig(...).__Tag == com/dmdirc/config/ConfigManager
    //#post(void configChanged(String, String)): com/dmdirc/config/IdentityManager.globalconfig == One-of{old com/dmdirc/config/IdentityManager.globalconfig, &new ConfigManager(getGlobalConfig#1)}
    //#post(void configChanged(String, String)): com/dmdirc/config/IdentityManager.globalconfig != null
    //#post(void configChanged(String, String)): java.lang.StringBuilder:toString(...)._tainted == 0
    //#post(void configChanged(String, String)): init'ed(this.dragSelect)
    //#post(void configChanged(String, String)): new ArrayList(getSources#1) num objects <= 1
    //#post(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void configChanged(String, String)): new MapList(ConfigManager#1) num objects == new ArrayList(getSources#1) num objects
    //#post(void configChanged(String, String)): init'ed(new ArrayList(getSources#1).__Lock)
    //#post(void configChanged(String, String)): init'ed(new ConfigManager(getGlobalConfig#1).__Lock)
    //#post(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).__Tag == com/dmdirc/config/ConfigManager
    //#post(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).channel == &java.lang.StringBuilder:toString(...)
    //#post(void configChanged(String, String)): init'ed(new ConfigManager(getGlobalConfig#1).file)
    //#post(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).ircd == &""
    //#post(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).network == &""
    //#post(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).server == &""
    //#post(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).listeners == &new MapList(ConfigManager#1)
    //#post(void configChanged(String, String)): new ConfigManager(getGlobalConfig#1).sources == &new ArrayList(getSources#1)
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.util.List:add
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:getTarget
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:com.dmdirc.config.ConfigTarget$TYPE:ordinal
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:addListener
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:getSources
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:com.dmdirc.config.ConfigSource
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:com.dmdirc.util.MapList
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:addConfigManager
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.util.Collections:sort
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.util.Map:containsKey
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.util.Map:get
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.Integer:intValue
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.Integer:valueOf
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:hasOption
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:getOption
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.IllegalArgumentException
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:java.lang.Boolean:parseBoolean
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:com.dmdirc.util.ConfigFile:getKeyDomain
    //#unanalyzed(void configChanged(String, String)): Effects-of-calling:com.dmdirc.util.ConfigFile:isKeyDomain
                "dragSelection");
    }
    //#Tree.java:153: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.configChanged(String, String)

    /** 
     * {@inheritDoc}
     * 
     * @param e Mouse event
     */
    @Override
    public void mouseDragged(final MouseEvent e) {
        if (dragSelect && dragButton) {
    //#Tree.java:162: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseDragged(MouseEvent)
    //#input(void mouseDragged(MouseEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree]
    //#input(void mouseDragged(MouseEvent)): __Descendant_Table[others]
    //#input(void mouseDragged(MouseEvent)): __Dispatch_Table.getNodeForLocation(II)Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;
    //#input(void mouseDragged(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel]
    //#input(void mouseDragged(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel.__Descendant_Table[others]
    //#input(void mouseDragged(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel.__Dispatch_Table.setRollover(Z)V
    //#input(void mouseDragged(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(void mouseDragged(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(void mouseDragged(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(void mouseDragged(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getLabel()Lcom/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel;
    //#input(void mouseDragged(MouseEvent)): e
    //#input(void mouseDragged(MouseEvent)): this
    //#input(void mouseDragged(MouseEvent)): this...__Tag
    //#input(void mouseDragged(MouseEvent)): this.__Tag
    //#input(void mouseDragged(MouseEvent)): this.dragButton
    //#input(void mouseDragged(MouseEvent)): this.dragSelect
    //#input(void mouseDragged(MouseEvent)): this.manager
    //#input(void mouseDragged(MouseEvent)): this.manager.nodes
    //#input(void mouseDragged(MouseEvent)): this.manager.tree
    //#pre[6] (void mouseDragged(MouseEvent)): init'ed(this.dragSelect)
    //#pre[9] (void mouseDragged(MouseEvent)): this.manager != null
    //#pre[10] (void mouseDragged(MouseEvent)): this.manager.nodes != null
    //#pre[12] (void mouseDragged(MouseEvent)): this.manager.tree != null
    //#pre[1] (void mouseDragged(MouseEvent)): (soft) e != null
    //#pre[3] (void mouseDragged(MouseEvent)): (soft) this...__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/Tree
    //#pre[4] (void mouseDragged(MouseEvent)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/Tree
    //#pre[5] (void mouseDragged(MouseEvent)): (soft) init'ed(this.dragButton)
    //#presumption(void mouseDragged(MouseEvent)): javax.swing.tree.TreePath:getLastPathComponent(...).__Tag@165 == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#presumption(void mouseDragged(MouseEvent)): javax.swing.tree.TreePath:getLastPathComponent(...).frameContainer@165 != null
    //#presumption(void mouseDragged(MouseEvent)): javax.swing.tree.TreePath:getLastPathComponent(...)@165 != null
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getX
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getY
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:getNodeForLocation
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.Tree:repaint
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation
    //#unanalyzed(void mouseDragged(MouseEvent)): Effects-of-calling:javax.swing.tree.TreePath:getLastPathComponent
    //#test_vector(void mouseDragged(MouseEvent)): this.dragButton: {0}, {1}
    //#test_vector(void mouseDragged(MouseEvent)): this.dragSelect: {0}, {1}
            final TreeViewNode node = getNodeForLocation(e.getX(), e.getY());
            if (node != null) {
                ((TreeViewNode) new TreePath(node.getPath()).getLastPathComponent()).getFrameContainer().activateFrame();
    //#Tree.java:165: Warning: method not available - call not analyzed
    //#    call on TreeNode[] com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getPath()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void mouseDragged(MouseEvent)
    //#    unanalyzed callee: TreeNode[] com.dmdirc.addons.ui_swing.framemanager.tree.TreeViewNode:getPath()
    //#Tree.java:165: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.FrameContainer:activateFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void mouseDragged(MouseEvent)
    //#    unanalyzed callee: void com.dmdirc.FrameContainer:activateFrame()
            }
        }
        manager.checkRollover(e);
    }
    //#Tree.java:169: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseDragged(MouseEvent)

    /** 
     * {@inheritDoc}
     * 
     * @param e Mouse event
     */
    @Override
    public void mouseMoved(final MouseEvent e) {
        manager.checkRollover(e);
    //#Tree.java:178: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseMoved(MouseEvent)
    //#input(void mouseMoved(MouseEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree]
    //#input(void mouseMoved(MouseEvent)): __Descendant_Table[others]
    //#input(void mouseMoved(MouseEvent)): __Dispatch_Table.getNodeForLocation(II)Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;
    //#input(void mouseMoved(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel]
    //#input(void mouseMoved(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel.__Descendant_Table[others]
    //#input(void mouseMoved(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel.__Dispatch_Table.setRollover(Z)V
    //#input(void mouseMoved(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(void mouseMoved(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(void mouseMoved(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getLabel()Lcom/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel;
    //#input(void mouseMoved(MouseEvent)): e
    //#input(void mouseMoved(MouseEvent)): this
    //#input(void mouseMoved(MouseEvent)): this...__Tag
    //#input(void mouseMoved(MouseEvent)): this.manager
    //#input(void mouseMoved(MouseEvent)): this.manager.nodes
    //#input(void mouseMoved(MouseEvent)): this.manager.tree
    //#pre[4] (void mouseMoved(MouseEvent)): this.manager != null
    //#pre[5] (void mouseMoved(MouseEvent)): this.manager.nodes != null
    //#pre[7] (void mouseMoved(MouseEvent)): this.manager.tree != null
    //#pre[3] (void mouseMoved(MouseEvent)): (soft) this...__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/Tree
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getX
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getY
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:getNodeForLocation
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.Tree:repaint
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation
    //#unanalyzed(void mouseMoved(MouseEvent)): Effects-of-calling:javax.swing.tree.TreePath:getLastPathComponent
    }
    //#Tree.java:179: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseMoved(MouseEvent)

    /** 
     * {@inheritDoc}
     * 
     * @param e Mouse event
     */
    @Override
    public void mouseClicked(MouseEvent e) {
        processMouseEvents(e);
    //#Tree.java:188: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseClicked(MouseEvent)
    //#input(void mouseClicked(MouseEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree]
    //#input(void mouseClicked(MouseEvent)): __Descendant_Table[others]
    //#input(void mouseClicked(MouseEvent)): __Dispatch_Table.processMouseEvents(Ljava/awt/event/MouseEvent;)V
    //#input(void mouseClicked(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(void mouseClicked(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(void mouseClicked(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(void mouseClicked(MouseEvent)): e
    //#input(void mouseClicked(MouseEvent)): this
    //#input(void mouseClicked(MouseEvent)): this.__Tag
    //#pre[1] (void mouseClicked(MouseEvent)): e != null
    //#pre[3] (void mouseClicked(MouseEvent)): this.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/Tree
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:javax.swing.tree.TreePath:getLastPathComponent
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getX
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getY
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:isPopupTrigger
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:com.dmdirc.FrameContainer:getFrame
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getPopupMenu
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:addCustomPopupItems
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:getComponentCount
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:addSeparator
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContainer
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.actions.CloseFrameContainerAction
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:javax.swing.JMenuItem
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:add
    //#unanalyzed(void mouseClicked(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:show
    }
    //#Tree.java:189: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseClicked(MouseEvent)

    /** 
     * {@inheritDoc}
     * 
     * @param e Mouse event
     */
    @Override
    public void mousePressed(MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON1) {
    //#Tree.java:198: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mousePressed(MouseEvent)
    //#input(void mousePressed(MouseEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree]
    //#input(void mousePressed(MouseEvent)): __Descendant_Table[others]
    //#input(void mousePressed(MouseEvent)): __Dispatch_Table.processMouseEvents(Ljava/awt/event/MouseEvent;)V
    //#input(void mousePressed(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(void mousePressed(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(void mousePressed(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(void mousePressed(MouseEvent)): e
    //#input(void mousePressed(MouseEvent)): this
    //#input(void mousePressed(MouseEvent)): this.__Tag
    //#output(void mousePressed(MouseEvent)): this.dragButton
    //#pre[1] (void mousePressed(MouseEvent)): e != null
    //#pre[4] (void mousePressed(MouseEvent)): this.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/Tree
    //#presumption(void mousePressed(MouseEvent)): javax.swing.tree.TreePath:getLastPathComponent(...).__Tag@202 == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#presumption(void mousePressed(MouseEvent)): javax.swing.tree.TreePath:getLastPathComponent(...).frameContainer@202 != null
    //#presumption(void mousePressed(MouseEvent)): javax.swing.tree.TreePath:getLastPathComponent(...)@202 != null
    //#post(void mousePressed(MouseEvent)): possibly_updated(this.dragButton)
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:javax.swing.tree.TreePath:getLastPathComponent
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getX
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getY
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:isPopupTrigger
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:com.dmdirc.FrameContainer:getFrame
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getPopupMenu
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:addCustomPopupItems
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:getComponentCount
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:addSeparator
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContainer
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.actions.CloseFrameContainerAction
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:javax.swing.JMenuItem
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:add
    //#unanalyzed(void mousePressed(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:show
    //#test_vector(void mousePressed(MouseEvent)): com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation(...)@200: Addr_Set{null}, Inverse{null}
    //#test_vector(void mousePressed(MouseEvent)): java.awt.event.MouseEvent:getButton(...)@198: {-2_147_483_648..0, 2..4_294_967_295}, {1}
            dragButton = true;
            final TreePath selectedPath = getPathForLocation(e.getX(), e.getY());
    //#Tree.java:200: Warning: method not available - call not analyzed
    //#    call on TreePath com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation(int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void mousePressed(MouseEvent)
    //#    unanalyzed callee: TreePath com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation(int, int)
            if (selectedPath != null) {
                ((TreeViewNode) selectedPath.getLastPathComponent()).getFrameContainer().activateFrame();
    //#Tree.java:202: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.FrameContainer:activateFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void mousePressed(MouseEvent)
    //#    unanalyzed callee: void com.dmdirc.FrameContainer:activateFrame()
            }
        }
        processMouseEvents(e);
    }
    //#Tree.java:206: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mousePressed(MouseEvent)

    /** 
     * {@inheritDoc}
     * 
     * @param e Mouse event
     */
    @Override
    public void mouseReleased(MouseEvent e) {
        dragButton = false;
    //#Tree.java:215: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseReleased(MouseEvent)
    //#input(void mouseReleased(MouseEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree]
    //#input(void mouseReleased(MouseEvent)): __Descendant_Table[others]
    //#input(void mouseReleased(MouseEvent)): __Dispatch_Table.processMouseEvents(Ljava/awt/event/MouseEvent;)V
    //#input(void mouseReleased(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(void mouseReleased(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(void mouseReleased(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(void mouseReleased(MouseEvent)): e
    //#input(void mouseReleased(MouseEvent)): this
    //#input(void mouseReleased(MouseEvent)): this.__Tag
    //#output(void mouseReleased(MouseEvent)): this.dragButton
    //#pre[1] (void mouseReleased(MouseEvent)): e != null
    //#pre[3] (void mouseReleased(MouseEvent)): this.__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/Tree
    //#post(void mouseReleased(MouseEvent)): this.dragButton == 0
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:javax.swing.tree.TreePath:getLastPathComponent
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getX
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getY
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:isPopupTrigger
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:com.dmdirc.FrameContainer:getFrame
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getPopupMenu
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:addCustomPopupItems
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:getComponentCount
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:addSeparator
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContainer
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.actions.CloseFrameContainerAction
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:javax.swing.JMenuItem
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:add
    //#unanalyzed(void mouseReleased(MouseEvent)): Effects-of-calling:javax.swing.JPopupMenu:show
        processMouseEvents(e);
    }
    //#Tree.java:217: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseReleased(MouseEvent)

    /** 
     * {@inheritDoc}
     * 
     * @param e Mouse event
     */
    @Override
    public void mouseEntered(MouseEvent e) {
        //Ignore
    }
    //#Tree.java:227: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseEntered(MouseEvent)
    //#Tree.java:227: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseEntered(MouseEvent)

    /** 
     * {@inheritDoc}
     * 
     * @param e Mouse event
     */
    @Override
    public void mouseExited(MouseEvent e) {
        manager.checkRollover(null);
    //#Tree.java:236: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseExited(MouseEvent)
    //#input(void mouseExited(MouseEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree]
    //#input(void mouseExited(MouseEvent)): __Descendant_Table[others]
    //#input(void mouseExited(MouseEvent)): __Dispatch_Table.getNodeForLocation(II)Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;
    //#input(void mouseExited(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel]
    //#input(void mouseExited(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel.__Descendant_Table[others]
    //#input(void mouseExited(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel.__Dispatch_Table.setRollover(Z)V
    //#input(void mouseExited(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(void mouseExited(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(void mouseExited(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getLabel()Lcom/dmdirc/addons/ui_swing/framemanager/tree/NodeLabel;
    //#input(void mouseExited(MouseEvent)): this
    //#input(void mouseExited(MouseEvent)): this...__Tag
    //#input(void mouseExited(MouseEvent)): this.manager
    //#input(void mouseExited(MouseEvent)): this.manager.nodes
    //#input(void mouseExited(MouseEvent)): this.manager.tree
    //#pre[3] (void mouseExited(MouseEvent)): this.manager != null
    //#pre[4] (void mouseExited(MouseEvent)): this.manager.nodes != null
    //#pre[6] (void mouseExited(MouseEvent)): this.manager.tree != null
    //#pre[2] (void mouseExited(MouseEvent)): (soft) this...__Tag == com/dmdirc/addons/ui_swing/framemanager/tree/Tree
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:java.util.Map:values
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:java.util.Collection:iterator
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getX
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:java.awt.event.MouseEvent:getY
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:getNodeForLocation
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.Tree:repaint
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation
    //#unanalyzed(void mouseExited(MouseEvent)): Effects-of-calling:javax.swing.tree.TreePath:getLastPathComponent
    }
    //#Tree.java:237: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.mouseExited(MouseEvent)

    /**
     * Processes every mouse button event to check for a popup trigger.
     * @param e mouse event
     */
    public void processMouseEvents(final MouseEvent e) {
        final TreePath localPath = getPathForLocation(e.getX(), e.getY());
    //#Tree.java:244: method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.processMouseEvents(MouseEvent)
    //#Tree.java:244: Warning: method not available - call not analyzed
    //#    call on TreePath com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation(int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void processMouseEvents(MouseEvent)
    //#    unanalyzed callee: TreePath com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation(int, int)
    //#input(void processMouseEvents(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode]
    //#input(void processMouseEvents(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Descendant_Table[others]
    //#input(void processMouseEvents(MouseEvent)): com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode.__Dispatch_Table.getFrameContainer()Lcom/dmdirc/FrameContainer;
    //#input(void processMouseEvents(MouseEvent)): e
    //#input(void processMouseEvents(MouseEvent)): this
    //#pre[1] (void processMouseEvents(MouseEvent)): e != null
    //#presumption(void processMouseEvents(MouseEvent)): com.dmdirc.FrameContainer:getFrame(...)@247 != null
    //#presumption(void processMouseEvents(MouseEvent)): com.dmdirc.addons.ui_swing.components.frames.TextFrame:getPopupMenu(...)@249 != null
    //#presumption(void processMouseEvents(MouseEvent)): javax.swing.tree.TreePath:getLastPathComponent(...).__Tag@247 == com/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode
    //#presumption(void processMouseEvents(MouseEvent)): javax.swing.tree.TreePath:getLastPathComponent(...).frameContainer@247 != null
    //#presumption(void processMouseEvents(MouseEvent)): javax.swing.tree.TreePath:getLastPathComponent(...)@247 != null
    //#test_vector(void processMouseEvents(MouseEvent)): com.dmdirc.addons.ui_swing.framemanager.tree.Tree:getPathForLocation(...)@244: Addr_Set{null}, Inverse{null}
    //#test_vector(void processMouseEvents(MouseEvent)): java.awt.event.MouseEvent:isPopupTrigger(...)@246: {0}, {1}
    //#test_vector(void processMouseEvents(MouseEvent)): javax.swing.JPopupMenu:getComponentCount(...)@251: {-2_147_483_648..0}, {1..4_294_967_295}
        if (localPath != null) {
            if (e.isPopupTrigger()) {
                final TextFrame frame = (TextFrame) ((TreeViewNode) localPath.getLastPathComponent()).getFrameContainer().
    //#Tree.java:247: Warning: method not available - call not analyzed
    //#    call on Window com.dmdirc.FrameContainer:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void processMouseEvents(MouseEvent)
    //#    unanalyzed callee: Window com.dmdirc.FrameContainer:getFrame()
                        getFrame();
                final JPopupMenu popupMenu = frame.getPopupMenu(null, "");
    //#Tree.java:249: Warning: method not available - call not analyzed
    //#    call on JPopupMenu com.dmdirc.addons.ui_swing.components.frames.TextFrame:getPopupMenu(PopupType, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void processMouseEvents(MouseEvent)
    //#    unanalyzed callee: JPopupMenu com.dmdirc.addons.ui_swing.components.frames.TextFrame:getPopupMenu(PopupType, Object[])
                frame.addCustomPopupItems(popupMenu);
    //#Tree.java:250: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.frames.TextFrame:addCustomPopupItems(JPopupMenu)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void processMouseEvents(MouseEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.frames.TextFrame:addCustomPopupItems(JPopupMenu)
                if (popupMenu.getComponentCount() > 0) {
                    popupMenu.addSeparator();
                }
                popupMenu.add(new JMenuItem(new CloseFrameContainerAction(frame.getContainer())));
    //#Tree.java:254: Warning: method not available - call not analyzed
    //#    call on FrameContainer com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContainer()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void processMouseEvents(MouseEvent)
    //#    unanalyzed callee: FrameContainer com.dmdirc.addons.ui_swing.components.frames.TextFrame:getContainer()
    //#Tree.java:254: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.actions.CloseFrameContainerAction(FrameContainer)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
    //#    method: void processMouseEvents(MouseEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.actions.CloseFrameContainerAction(FrameContainer)
                popupMenu.show(this, e.getX(), e.getY());
            }
        }
    }
    //#Tree.java:258: end of method: void com.dmdirc.addons.ui_swing.framemanager.tree.Tree.processMouseEvents(MouseEvent)
}
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree$2]
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree$2] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2__static_init): __Dispatch_Table.run()V == &run
    //#Tree.java:: end of method: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2.com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2__static_init
    //#Tree.java:: end of class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$2
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree$1]
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1__static_init): __Dispatch_Table.setPath(Ljavax/swing/tree/TreePath;)V
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1__static_init): __Dispatch_Table.setPath(Ljavax/swing/tree/TreePath;)V == &setPath
    //#Tree.java:: end of method: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1.com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1__static_init
    //#Tree.java:: end of class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree$1
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree]
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.configChanged(Ljava/lang/String;Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.getNodeForLocation(II)Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode;
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseClicked(Ljava/awt/event/MouseEvent;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseDragged(Ljava/awt/event/MouseEvent;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseEntered(Ljava/awt/event/MouseEvent;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseExited(Ljava/awt/event/MouseEvent;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseMoved(Ljava/awt/event/MouseEvent;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mousePressed(Ljava/awt/event/MouseEvent;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseReleased(Ljava/awt/event/MouseEvent;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.processMouseEvents(Ljava/awt/event/MouseEvent;)V
    //#output(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.setTreePath(Ljavax/swing/tree/TreePath;)V
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/framemanager/tree/Tree] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.configChanged(Ljava/lang/String;Ljava/lang/String;)V == &configChanged
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.getNodeForLocation(II)Lcom/dmdirc/addons/ui_swing/framemanager/tree/TreeViewNode; == &getNodeForLocation
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseClicked(Ljava/awt/event/MouseEvent;)V == &mouseClicked
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseDragged(Ljava/awt/event/MouseEvent;)V == &mouseDragged
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseEntered(Ljava/awt/event/MouseEvent;)V == &mouseEntered
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseExited(Ljava/awt/event/MouseEvent;)V == &mouseExited
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseMoved(Ljava/awt/event/MouseEvent;)V == &mouseMoved
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mousePressed(Ljava/awt/event/MouseEvent;)V == &mousePressed
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.mouseReleased(Ljava/awt/event/MouseEvent;)V == &mouseReleased
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.processMouseEvents(Ljava/awt/event/MouseEvent;)V == &processMouseEvents
    //#post(com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init): __Dispatch_Table.setTreePath(Ljavax/swing/tree/TreePath;)V == &setTreePath
    //#Tree.java:: end of method: com.dmdirc.addons.ui_swing.framemanager.tree.Tree.com.dmdirc.addons.ui_swing.framemanager.tree.Tree__static_init
    //#Tree.java:: end of class: com.dmdirc.addons.ui_swing.framemanager.tree.Tree
