//# 4 errors, 397 messages
//#
/*
    //#SwingInputHandler.java:1:1: class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$5
    //#SwingInputHandler.java:1:1: method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$5.com.dmdirc.addons.ui_swing.components.SwingInputHandler$5__static_init
    //#SwingInputHandler.java:1:1: class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4
    //#SwingInputHandler.java:1:1: method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4.com.dmdirc.addons.ui_swing.components.SwingInputHandler$4__static_init
    //#SwingInputHandler.java:1:1: class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1
    //#SwingInputHandler.java:1:1: method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init
    //#SwingInputHandler.java:1:1: class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1
    //#SwingInputHandler.java:1:1: method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init
    //#SwingInputHandler.java:1:1: class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$3
    //#SwingInputHandler.java:1:1: method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$3.com.dmdirc.addons.ui_swing.components.SwingInputHandler$3__static_init
    //#SwingInputHandler.java:1:1: class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$2
    //#SwingInputHandler.java:1:1: method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$2.com.dmdirc.addons.ui_swing.components.SwingInputHandler$2__static_init
    //#SwingInputHandler.java:1:1: class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$1
    //#SwingInputHandler.java:1:1: method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$1__static_init
    //#SwingInputHandler.java:1:1: class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#SwingInputHandler.java:1:1: method: com.dmdirc.addons.ui_swing.components.SwingInputHandler.com.dmdirc.addons.ui_swing.components.SwingInputHandler__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.components;

import com.dmdirc.commandparser.parsers.CommandParser;
import com.dmdirc.ui.input.InputHandler;
import com.dmdirc.ui.interfaces.InputField;
import com.dmdirc.ui.interfaces.InputWindow;
import com.dmdirc.addons.ui_swing.Apple;
import com.dmdirc.addons.ui_swing.UIUtilities;

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.text.JTextComponent;

/**
 * Swing input handler.
 */
public class SwingInputHandler extends InputHandler implements KeyListener {
    //#SwingInputHandler.java:45: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$000(SwingInputHandler)
    //#SwingInputHandler.java:45: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.SwingInputHandler:doBufferUp()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void access$000(SwingInputHandler)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.SwingInputHandler:doBufferUp()
    //#input(void access$000(SwingInputHandler)): x0
    //#pre[1] (void access$000(SwingInputHandler)): x0 != null
    //#SwingInputHandler.java:45: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$000(SwingInputHandler)
    //#SwingInputHandler.java:45: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$100(SwingInputHandler)
    //#SwingInputHandler.java:45: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.SwingInputHandler:doBufferDown()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void access$100(SwingInputHandler)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.SwingInputHandler:doBufferDown()
    //#input(void access$100(SwingInputHandler)): x0
    //#pre[1] (void access$100(SwingInputHandler)): x0 != null
    //#SwingInputHandler.java:45: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$100(SwingInputHandler)
    //#SwingInputHandler.java:45: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$200(SwingInputHandler)
    //#SwingInputHandler.java:45: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.SwingInputHandler:doTabCompletion()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void access$200(SwingInputHandler)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.SwingInputHandler:doTabCompletion()
    //#input(void access$200(SwingInputHandler)): x0
    //#pre[1] (void access$200(SwingInputHandler)): x0 != null
    //#SwingInputHandler.java:45: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$200(SwingInputHandler)
    //#SwingInputHandler.java:45: method: InputField com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$300(SwingInputHandler)
    //#input(InputField access$300(SwingInputHandler)): x0
    //#input(InputField access$300(SwingInputHandler)): x0.target
    //#output(InputField access$300(SwingInputHandler)): return_value
    //#pre[1] (InputField access$300(SwingInputHandler)): x0 != null
    //#pre[2] (InputField access$300(SwingInputHandler)): init'ed(x0.target)
    //#post(InputField access$300(SwingInputHandler)): return_value == x0.target
    //#post(InputField access$300(SwingInputHandler)): init'ed(return_value)
    //#SwingInputHandler.java:45: end of method: InputField com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$300(SwingInputHandler)
    //#SwingInputHandler.java:45: method: InputField com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$400(SwingInputHandler)
    //#input(InputField access$400(SwingInputHandler)): x0
    //#input(InputField access$400(SwingInputHandler)): x0.target
    //#output(InputField access$400(SwingInputHandler)): return_value
    //#pre[1] (InputField access$400(SwingInputHandler)): x0 != null
    //#pre[2] (InputField access$400(SwingInputHandler)): init'ed(x0.target)
    //#post(InputField access$400(SwingInputHandler)): return_value == x0.target
    //#post(InputField access$400(SwingInputHandler)): init'ed(return_value)
    //#SwingInputHandler.java:45: end of method: InputField com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$400(SwingInputHandler)
    //#SwingInputHandler.java:45: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$500(SwingInputHandler, String, int, bool, bool)
    //#SwingInputHandler.java:45: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.SwingInputHandler:handleKeyPressed(String, int, bool, bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void access$500(SwingInputHandler, String, int, bool, bool)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.SwingInputHandler:handleKeyPressed(String, int, bool, bool)
    //#input(void access$500(SwingInputHandler, String, int, bool, bool)): x0
    //#input(void access$500(SwingInputHandler, String, int, bool, bool)): x1
    //#input(void access$500(SwingInputHandler, String, int, bool, bool)): x2
    //#input(void access$500(SwingInputHandler, String, int, bool, bool)): x3
    //#input(void access$500(SwingInputHandler, String, int, bool, bool)): x4
    //#pre[1] (void access$500(SwingInputHandler, String, int, bool, bool)): x0 != null
    //#SwingInputHandler.java:45: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.access$500(SwingInputHandler, String, int, bool, bool)

    /**
     * Creates a new instance of InputHandler. Adds listeners to the target
     * that we need to operate.
     *
     * @param target The text field this input handler is dealing with.
     * @param commandParser The command parser to use for this text field.
     * @param parentWindow The window that owns this input handler
     */
    public SwingInputHandler(final InputField target,
            final CommandParser commandParser, final InputWindow parentWindow) {
        super(target, commandParser, parentWindow);
    //#SwingInputHandler.java:57: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.com.dmdirc.addons.ui_swing.components.SwingInputHandler(InputField, CommandParser, InputWindow)
    //#SwingInputHandler.java:57: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.InputHandler(InputField, CommandParser, InputWindow)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler(InputField, CommandParser, InputWindow)
    //#    unanalyzed callee: void com.dmdirc.ui.input.InputHandler(InputField, CommandParser, InputWindow)
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler(InputField, CommandParser, InputWindow)): commandParser
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler(InputField, CommandParser, InputWindow)): parentWindow
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler(InputField, CommandParser, InputWindow)): target
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler(InputField, CommandParser, InputWindow)): this
    }
    //#SwingInputHandler.java:58: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.com.dmdirc.addons.ui_swing.components.SwingInputHandler(InputField, CommandParser, InputWindow)

    /** {@inheritDoc} */
    @Override
    protected void addUpHandler() {
        JTextComponent localTarget = null;
    //#SwingInputHandler.java:63: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addUpHandler()
    //#input(void addUpHandler()): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void addUpHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputField]
    //#input(void addUpHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[others]
    //#input(void addUpHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Dispatch_Table.getTextField()Ljavax/swing/JTextField;
    //#input(void addUpHandler()): this
    //#input(void addUpHandler()): this.target
    //#input(void addUpHandler()): this.target.__Tag
    //#pre[2] (void addUpHandler()): init'ed(this.target)
    //#presumption(void addUpHandler()): com.dmdirc.util.ReturnableThread:getObject(...)@203 != null
    //#presumption(void addUpHandler()): javax.swing.text.JTextComponent:getActionMap(...)@70 != null
    //#presumption(void addUpHandler()): javax.swing.text.JTextComponent:getInputMap(...)@86 != null
    //#presumption(void addUpHandler()): javax.swing.text.JTextComponent:getInputMap(...)@89 != null
    //#unanalyzed(void addUpHandler()): Effects-of-calling:javax.swing.AbstractAction
    //#unanalyzed(void addUpHandler()): Effects-of-calling:java.lang.System:getProperty
    //#unanalyzed(void addUpHandler()): Effects-of-calling:javax.swing.UIManager:getLookAndFeel
    //#unanalyzed(void addUpHandler()): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void addUpHandler()): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void addUpHandler()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void addUpHandler()): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void addUpHandler()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addUpHandler()): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void addUpHandler()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void addUpHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread:run
    //#unanalyzed(void addUpHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread:getObject
    //#unanalyzed(void addUpHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread
        if (target instanceof JTextComponent) {
            localTarget = (JTextComponent) target;
        } else if (target instanceof SwingInputField) {
            localTarget = ((SwingInputField) target).getTextField();
        }

        localTarget.getActionMap().put("upArrow", new AbstractAction() {
    //#SwingInputHandler.java:70: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$1(SwingInputHandler)
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$1(SwingInputHandler)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$1(SwingInputHandler)): this
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$1(SwingInputHandler)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$1(SwingInputHandler)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$1(SwingInputHandler)): init'ed(this.this$0)
    //#SwingInputHandler.java:70: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$1(SwingInputHandler)
    //#SwingInputHandler.java:70: ?null dereference
    //#    localTarget != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void addUpHandler()
    //#    basic block: bb_5
    //#    assertion: localTarget != null
    //#    VN: localTarget
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad  Uncertain

            /**
             * 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;

            /** {@inheritDoc} */
            @Override
            public void actionPerformed(ActionEvent e) {
                doBufferUp();
    //#SwingInputHandler.java:82: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$1.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.this$0
    //#pre[2] (void actionPerformed(ActionEvent)): this.this$0 != null
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.SwingInputHandler:doBufferUp
            }
    //#SwingInputHandler.java:83: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$1.actionPerformed(ActionEvent)
        });
        if (Apple.isAppleUI()) {
            localTarget.getInputMap(JComponent.WHEN_FOCUSED).
                    put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "upArrow");
        } else {
            localTarget.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
                    put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "upArrow");
        }
    }
    //#SwingInputHandler.java:92: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addUpHandler()

    /** {@inheritDoc} */
    @Override
    protected void addDownHandler() {
        JTextComponent localTarget = null;
    //#SwingInputHandler.java:97: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addDownHandler()
    //#input(void addDownHandler()): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void addDownHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputField]
    //#input(void addDownHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[others]
    //#input(void addDownHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Dispatch_Table.getTextField()Ljavax/swing/JTextField;
    //#input(void addDownHandler()): this
    //#input(void addDownHandler()): this.target
    //#input(void addDownHandler()): this.target.__Tag
    //#pre[2] (void addDownHandler()): init'ed(this.target)
    //#presumption(void addDownHandler()): com.dmdirc.util.ReturnableThread:getObject(...)@203 != null
    //#presumption(void addDownHandler()): javax.swing.text.JTextComponent:getActionMap(...)@103 != null
    //#presumption(void addDownHandler()): javax.swing.text.JTextComponent:getInputMap(...)@119 != null
    //#presumption(void addDownHandler()): javax.swing.text.JTextComponent:getInputMap(...)@122 != null
    //#unanalyzed(void addDownHandler()): Effects-of-calling:javax.swing.AbstractAction
    //#unanalyzed(void addDownHandler()): Effects-of-calling:java.lang.System:getProperty
    //#unanalyzed(void addDownHandler()): Effects-of-calling:javax.swing.UIManager:getLookAndFeel
    //#unanalyzed(void addDownHandler()): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void addDownHandler()): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void addDownHandler()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void addDownHandler()): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void addDownHandler()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addDownHandler()): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void addDownHandler()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void addDownHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread:run
    //#unanalyzed(void addDownHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread:getObject
    //#unanalyzed(void addDownHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread
        if (target instanceof JTextComponent) {
            localTarget = (JTextComponent) target;
        } else if (target instanceof SwingInputField) {
            localTarget = ((SwingInputField) target).getTextField();
        }
        localTarget.getActionMap().put("downArrow", new AbstractAction() {
    //#SwingInputHandler.java:103: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$2.com.dmdirc.addons.ui_swing.components.SwingInputHandler$2(SwingInputHandler)
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$2(SwingInputHandler)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$2(SwingInputHandler)): this
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$2(SwingInputHandler)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$2(SwingInputHandler)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$2(SwingInputHandler)): init'ed(this.this$0)
    //#SwingInputHandler.java:103: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$2.com.dmdirc.addons.ui_swing.components.SwingInputHandler$2(SwingInputHandler)
    //#SwingInputHandler.java:103: ?null dereference
    //#    localTarget != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void addDownHandler()
    //#    basic block: bb_5
    //#    assertion: localTarget != null
    //#    VN: localTarget
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad  Uncertain

            /**
             * 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;

            /** {@inheritDoc} */
            @Override
            public void actionPerformed(ActionEvent e) {
                doBufferDown();
    //#SwingInputHandler.java:115: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$2.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.this$0
    //#pre[2] (void actionPerformed(ActionEvent)): this.this$0 != null
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.SwingInputHandler:doBufferDown
            }
    //#SwingInputHandler.java:116: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$2.actionPerformed(ActionEvent)
        });
        if (Apple.isAppleUI()) {
            localTarget.getInputMap(JComponent.WHEN_FOCUSED).
                    put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "downArrow");
        } else {
            localTarget.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
                    put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "downArrow");
        }
    }
    //#SwingInputHandler.java:125: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addDownHandler()

    /** {@inheritDoc} */
    @Override
    protected void addTabHandler() {
        JTextComponent localTarget = null;
    //#SwingInputHandler.java:130: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addTabHandler()
    //#input(void addTabHandler()): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void addTabHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputField]
    //#input(void addTabHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[others]
    //#input(void addTabHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Dispatch_Table.getTextField()Ljavax/swing/JTextField;
    //#input(void addTabHandler()): this
    //#input(void addTabHandler()): this.target
    //#input(void addTabHandler()): this.target.__Tag
    //#pre[2] (void addTabHandler()): init'ed(this.target)
    //#presumption(void addTabHandler()): com.dmdirc.util.ReturnableThread:getObject(...)@203 != null
    //#presumption(void addTabHandler()): javax.swing.text.JTextComponent:getActionMap(...)@136 != null
    //#presumption(void addTabHandler()): javax.swing.text.JTextComponent:getInputMap(...)@159 != null
    //#unanalyzed(void addTabHandler()): Effects-of-calling:javax.swing.AbstractAction
    //#unanalyzed(void addTabHandler()): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void addTabHandler()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addTabHandler()): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void addTabHandler()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void addTabHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread:run
    //#unanalyzed(void addTabHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread:getObject
    //#unanalyzed(void addTabHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread
        if (target instanceof JTextComponent) {
            localTarget = (JTextComponent) target;
        } else if (target instanceof SwingInputField) {
            localTarget = ((SwingInputField) target).getTextField();
        }
        localTarget.getActionMap().put("tabPressed", new AbstractAction() {
    //#SwingInputHandler.java:136: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3.com.dmdirc.addons.ui_swing.components.SwingInputHandler$3(SwingInputHandler)
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3(SwingInputHandler)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3(SwingInputHandler)): this
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3(SwingInputHandler)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3(SwingInputHandler)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3(SwingInputHandler)): init'ed(this.this$0)
    //#SwingInputHandler.java:136: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3.com.dmdirc.addons.ui_swing.components.SwingInputHandler$3(SwingInputHandler)
    //#SwingInputHandler.java:136: ?null dereference
    //#    localTarget != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void addTabHandler()
    //#    basic block: bb_5
    //#    assertion: localTarget != null
    //#    VN: localTarget
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad  Uncertain

            /**
             * 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;

            /** {@inheritDoc} */
            @Override
            public void actionPerformed(ActionEvent e) {
                new LoggingSwingWorker() {
    //#SwingInputHandler.java:148: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1(SwingInputHandler$3)
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1(SwingInputHandler$3)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1(SwingInputHandler$3)): this
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1(SwingInputHandler$3)): this.this$1
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1(SwingInputHandler$3)): this.this$1 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1(SwingInputHandler$3)): init'ed(this.this$1)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1(SwingInputHandler$3)): Effects-of-calling:javax.swing.SwingWorker
    //#SwingInputHandler.java:148: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1(SwingInputHandler$3)
    //#SwingInputHandler.java:148: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3.actionPerformed(ActionEvent)
    //#SwingInputHandler.java:148: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1:execute()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$3
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1:execute()
    //#input(void actionPerformed(ActionEvent)): this
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.SwingWorker

                    /** {@inheritDoc} */
                    @Override
                    protected Object doInBackground() throws Exception {
                        doTabCompletion();
    //#SwingInputHandler.java:153: method: Object com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1.doInBackground()
    //#input(Object doInBackground()): this
    //#input(Object doInBackground()): this.this$1
    //#input(Object doInBackground()): this.this$1.this$0
    //#output(Object doInBackground()): return_value
    //#pre[2] (Object doInBackground()): this.this$1 != null
    //#pre[3] (Object doInBackground()): this.this$0 != null
    //#post(Object doInBackground()): return_value == null
    //#unanalyzed(Object doInBackground()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.SwingInputHandler:doTabCompletion
                        return null;
    //#SwingInputHandler.java:154: end of method: Object com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1.doInBackground()
                    }
                }.execute();
            }
    //#SwingInputHandler.java:157: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$3.actionPerformed(ActionEvent)
        });
        localTarget.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
                put(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), "tabPressed");
    }
    //#SwingInputHandler.java:161: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addTabHandler()

    /** {@inheritDoc} */
    @Override
    protected void addEnterHandler() {
        JTextComponent localTarget = null;
    //#SwingInputHandler.java:166: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addEnterHandler()
    //#input(void addEnterHandler()): com/dmdirc/addons/ui_swing/UIUtilities.com.dmdirc.logger.ErrorLevel.HIGH
    //#input(void addEnterHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputField]
    //#input(void addEnterHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Descendant_Table[others]
    //#input(void addEnterHandler()): com/dmdirc/addons/ui_swing/components/SwingInputField.__Dispatch_Table.getTextField()Ljavax/swing/JTextField;
    //#input(void addEnterHandler()): this
    //#input(void addEnterHandler()): this.target
    //#input(void addEnterHandler()): this.target.__Tag
    //#pre[2] (void addEnterHandler()): init'ed(this.target)
    //#presumption(void addEnterHandler()): com.dmdirc.util.ReturnableThread:getObject(...)@203 != null
    //#presumption(void addEnterHandler()): javax.swing.text.JTextComponent:getActionMap(...)@172 != null
    //#presumption(void addEnterHandler()): javax.swing.text.JTextComponent:getInputMap(...)@197 != null
    //#unanalyzed(void addEnterHandler()): Effects-of-calling:javax.swing.AbstractAction
    //#unanalyzed(void addEnterHandler()): Effects-of-calling:javax.swing.SwingUtilities:isEventDispatchThread
    //#unanalyzed(void addEnterHandler()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void addEnterHandler()): Effects-of-calling:javax.swing.SwingUtilities:invokeAndWait
    //#unanalyzed(void addEnterHandler()): Effects-of-calling:com.dmdirc.logger.Logger:appError
    //#unanalyzed(void addEnterHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread:run
    //#unanalyzed(void addEnterHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread:getObject
    //#unanalyzed(void addEnterHandler()): Effects-of-calling:com.dmdirc.util.ReturnableThread
        if (target instanceof JTextComponent) {
            localTarget = (JTextComponent) target;
        } else if (target instanceof SwingInputField) {
            localTarget = ((SwingInputField) target).getTextField();
        }
        localTarget.getActionMap().put("enterButton", new AbstractAction() {
    //#SwingInputHandler.java:172: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4.com.dmdirc.addons.ui_swing.components.SwingInputHandler$4(SwingInputHandler)
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4(SwingInputHandler)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4(SwingInputHandler)): this
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4(SwingInputHandler)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4(SwingInputHandler)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4(SwingInputHandler)): init'ed(this.this$0)
    //#SwingInputHandler.java:172: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4.com.dmdirc.addons.ui_swing.components.SwingInputHandler$4(SwingInputHandler)
    //#SwingInputHandler.java:172: ?null dereference
    //#    localTarget != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void addEnterHandler()
    //#    basic block: bb_5
    //#    assertion: localTarget != null
    //#    VN: localTarget
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad  Uncertain

            /**
             * 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;

            /** {@inheritDoc} */
            @Override
            public void actionPerformed(final ActionEvent e) {
                final String line = target.getText();
    //#SwingInputHandler.java:184: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4.actionPerformed(ActionEvent)
    //#SwingInputHandler.java:184: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.ui.interfaces.InputField:getText()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: String com.dmdirc.ui.interfaces.InputField:getText()
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.this$0
    //#input(void actionPerformed(ActionEvent)): this.this$0.target
    //#pre[2] (void actionPerformed(ActionEvent)): this.this$0 != null
    //#pre[3] (void actionPerformed(ActionEvent)): this.target != null
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.LoggingSwingWorker
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.SwingWorker
                target.setText("");
    //#SwingInputHandler.java:185: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputField:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputField:setText(String)
                new LoggingSwingWorker() {
    //#SwingInputHandler.java:186: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1:execute()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1:execute()
    //#SwingInputHandler.java:186: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): this
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): this.this$1
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): this.val$line
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): this.this$1 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): init'ed(this.this$1)
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): this.val$line == Param_2
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): init'ed(this.val$line)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)): Effects-of-calling:javax.swing.SwingWorker
    //#SwingInputHandler.java:186: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1(SwingInputHandler$4, String)

                    /** {@inheritDoc} */
                    @Override
                    protected Object doInBackground() throws Exception {
                        enterPressed(line);
    //#SwingInputHandler.java:191: method: Object com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1.doInBackground()
    //#SwingInputHandler.java:191: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.SwingInputHandler:enterPressed(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1
    //#    method: Object doInBackground()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.SwingInputHandler:enterPressed(String)
    //#input(Object doInBackground()): this
    //#input(Object doInBackground()): this.this$1
    //#input(Object doInBackground()): this.this$1.this$0
    //#input(Object doInBackground()): this.val$line
    //#output(Object doInBackground()): return_value
    //#pre[2] (Object doInBackground()): this.this$1 != null
    //#pre[3] (Object doInBackground()): this.this$0 != null
    //#post(Object doInBackground()): return_value == null
                        return null;
    //#SwingInputHandler.java:192: end of method: Object com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1.doInBackground()
                    }
                    }.execute();
            }
    //#SwingInputHandler.java:195: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$4.actionPerformed(ActionEvent)
        });
        localTarget.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).
                put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "enterButton");
    }
    //#SwingInputHandler.java:199: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addEnterHandler()

    /** {@inheritDoc} */
    @Override
    protected void addKeyHandler() {
        target.addKeyListener(this);
    //#SwingInputHandler.java:204: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addKeyHandler()
    //#SwingInputHandler.java:204: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputField:addKeyListener(KeyListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void addKeyHandler()
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputField:addKeyListener(KeyListener)
    //#input(void addKeyHandler()): this
    //#input(void addKeyHandler()): this.target
    //#pre[2] (void addKeyHandler()): this.target != null
    }
    //#SwingInputHandler.java:205: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.addKeyHandler()

    /** 
     * {@inheritDoc}
     * 
     * @param e Key event
     */
    @Override
    public void keyTyped(final KeyEvent e) {
    //Ignore
    }
    //#SwingInputHandler.java:215: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.keyTyped(KeyEvent)
    //#SwingInputHandler.java:215: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.keyTyped(KeyEvent)

    /** 
     * {@inheritDoc}
     * 
     * @param e Key event
     */
    @Override
    public void keyPressed(final KeyEvent e) {
        if (e.getKeyCode() != KeyEvent.VK_TAB && e.getKeyCode() !=
    //#SwingInputHandler.java:224: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.keyPressed(KeyEvent)
    //#input(void keyPressed(KeyEvent)): e
    //#input(void keyPressed(KeyEvent)): this
    //#input(void keyPressed(KeyEvent)): this.flags
    //#input(void keyPressed(KeyEvent)): this.target
    //#pre[1] (void keyPressed(KeyEvent)): e != null
    //#pre[3] (void keyPressed(KeyEvent)): (soft) init'ed(this.flags)
    //#pre[6] (void keyPressed(KeyEvent)): (soft) this.target != null
    //#unanalyzed(void keyPressed(KeyEvent)): Effects-of-calling:java.lang.System:getProperty
    //#unanalyzed(void keyPressed(KeyEvent)): Effects-of-calling:javax.swing.UIManager:getLookAndFeel
    //#unanalyzed(void keyPressed(KeyEvent)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void keyPressed(KeyEvent)): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void keyPressed(KeyEvent)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void keyPressed(KeyEvent)): Effects-of-calling:java.awt.event.KeyEvent:isMetaDown
    //#unanalyzed(void keyPressed(KeyEvent)): Effects-of-calling:java.awt.event.KeyEvent:isControlDown
    //#test_vector(void keyPressed(KeyEvent)): this.flags & 8: {0..7}, {8}
    //#test_vector(void keyPressed(KeyEvent)): java.awt.event.KeyEvent:getKeyCode(...)@224: {9}, {-2_147_483_648..8, 10..4_294_967_295}
    //#test_vector(void keyPressed(KeyEvent)): java.awt.event.KeyEvent:getKeyCode(...)@224: {38}, {-2_147_483_648..37, 39..4_294_967_295}
    //#test_vector(void keyPressed(KeyEvent)): java.awt.event.KeyEvent:getKeyCode(...)@224: {40}, {-2_147_483_648..39, 41..4_294_967_295}
    //#test_vector(void keyPressed(KeyEvent)): java.awt.event.KeyEvent:getKeyCode(...)@227: {-2_147_483_648..9, 11..4_294_967_295}, {10}
                KeyEvent.VK_UP && e.getKeyCode() != KeyEvent.VK_DOWN) {
            final String line = target.getText();
    //#SwingInputHandler.java:226: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.ui.interfaces.InputField:getText()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void keyPressed(KeyEvent)
    //#    unanalyzed callee: String com.dmdirc.ui.interfaces.InputField:getText()
            if (UIUtilities.isCtrlDown(e) && e.getKeyCode() == KeyEvent.VK_ENTER
                    && (flags & HANDLE_RETURN) == HANDLE_RETURN) {
                target.setText("");
    //#SwingInputHandler.java:229: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.interfaces.InputField:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
    //#    method: void keyPressed(KeyEvent)
    //#    unanalyzed callee: void com.dmdirc.ui.interfaces.InputField:setText(String)
            }
            SwingUtilities.invokeLater(new Runnable() {
    //#SwingInputHandler.java:231: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5.com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): Param_3
    //#input(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): this
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): this.val$e
    //#output(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): this.val$line
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): this.val$e == Param_3
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): init'ed(this.val$e)
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): this.val$line == Param_2
    //#post(void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)): init'ed(this.val$line)
    //#SwingInputHandler.java:231: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5.com.dmdirc.addons.ui_swing.components.SwingInputHandler$5(SwingInputHandler, String, KeyEvent)

                /** {@inheritDoc} */
                @Override
                public void run() {
                    handleKeyPressed(line, e.getKeyCode(), e.isShiftDown(),
    //#SwingInputHandler.java:236: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5.run()
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.val$e
    //#input(void run()): this.val$line
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.val$e != null
    //#unanalyzed(void run()): Effects-of-calling:java.lang.System:getProperty
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.UIManager:getLookAndFeel
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Class:getName
    //#unanalyzed(void run()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void run()): Effects-of-calling:java.awt.event.KeyEvent:isMetaDown
    //#unanalyzed(void run()): Effects-of-calling:java.awt.event.KeyEvent:isControlDown
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.SwingInputHandler:handleKeyPressed
                            UIUtilities.isCtrlDown(e));
                }
    //#SwingInputHandler.java:238: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler$5.run()
            });
        }
    }
    //#SwingInputHandler.java:241: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.keyPressed(KeyEvent)

    /** 
     * {@inheritDoc}
     * 
     * @param e Key event
     */
    @Override
    public void keyReleased(final KeyEvent e) {
    //Ignore
    }
    //#SwingInputHandler.java:251: method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.keyReleased(KeyEvent)
    //#SwingInputHandler.java:251: end of method: void com.dmdirc.addons.ui_swing.components.SwingInputHandler.keyReleased(KeyEvent)
}
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$5__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$5]
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$5__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$5__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$5] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$5__static_init): __Dispatch_Table.run()V == &run
    //#SwingInputHandler.java:: end of method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$5.com.dmdirc.addons.ui_swing.components.SwingInputHandler$5__static_init
    //#SwingInputHandler.java:: end of class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$5
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$4]
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$4] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#SwingInputHandler.java:: end of method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4.com.dmdirc.addons.ui_swing.components.SwingInputHandler$4__static_init
    //#SwingInputHandler.java:: end of class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$4$1]
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object;
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init): __Dispatch_Table.done()V
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init): com/dmdirc/addons/ui_swing/components/LoggingSwingWorker.__Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$4$1]
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$4$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init): com/dmdirc/addons/ui_swing/components/LoggingSwingWorker.__Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$4$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object; == &doInBackground
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init): __Dispatch_Table.done()V == &com/dmdirc/addons/ui_swing/components/LoggingSwingWorker.done
    //#SwingInputHandler.java:: end of method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1__static_init
    //#SwingInputHandler.java:: end of class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$4$1
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$3$1]
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object;
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init): __Dispatch_Table.done()V
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init): com/dmdirc/addons/ui_swing/components/LoggingSwingWorker.__Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$3$1]
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$3$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init): com/dmdirc/addons/ui_swing/components/LoggingSwingWorker.__Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$3$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object; == &doInBackground
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init): __Dispatch_Table.done()V == &com/dmdirc/addons/ui_swing/components/LoggingSwingWorker.done
    //#SwingInputHandler.java:: end of method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1__static_init
    //#SwingInputHandler.java:: end of class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$3$1
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$3]
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$3] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$3__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#SwingInputHandler.java:: end of method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$3.com.dmdirc.addons.ui_swing.components.SwingInputHandler$3__static_init
    //#SwingInputHandler.java:: end of class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$3
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$2]
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$2__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$2] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$2__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#SwingInputHandler.java:: end of method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$2.com.dmdirc.addons.ui_swing.components.SwingInputHandler$2__static_init
    //#SwingInputHandler.java:: end of class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$2
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$1]
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler$1__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler$1__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#SwingInputHandler.java:: end of method: com.dmdirc.addons.ui_swing.components.SwingInputHandler$1.com.dmdirc.addons.ui_swing.components.SwingInputHandler$1__static_init
    //#SwingInputHandler.java:: end of class: com.dmdirc.addons.ui_swing.components.SwingInputHandler$1
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler]
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addDownHandler()V
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addEnterHandler()V
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addKeyHandler()V
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addTabHandler()V
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addUpHandler()V
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.keyPressed(Ljava/awt/event/KeyEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.keyReleased(Ljava/awt/event/KeyEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.keyTyped(Ljava/awt/event/KeyEvent;)V
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/SwingInputHandler] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addDownHandler()V == &addDownHandler
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addEnterHandler()V == &addEnterHandler
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addKeyHandler()V == &addKeyHandler
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addTabHandler()V == &addTabHandler
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.addUpHandler()V == &addUpHandler
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.keyPressed(Ljava/awt/event/KeyEvent;)V == &keyPressed
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.keyReleased(Ljava/awt/event/KeyEvent;)V == &keyReleased
    //#post(com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init): __Dispatch_Table.keyTyped(Ljava/awt/event/KeyEvent;)V == &keyTyped
    //#SwingInputHandler.java:: end of method: com.dmdirc.addons.ui_swing.components.SwingInputHandler.com.dmdirc.addons.ui_swing.components.SwingInputHandler__static_init
    //#SwingInputHandler.java:: end of class: com.dmdirc.addons.ui_swing.components.SwingInputHandler
