//# 0 errors, 478 messages
//#
/*
    //#ValidatingJTextField.java:1:1: class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#ValidatingJTextField.java:1:1: method: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__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.validating;

import com.dmdirc.config.prefs.validator.Validator;
import com.dmdirc.ui.IconManager;
import com.dmdirc.config.prefs.validator.ValidationResponse;

import java.awt.Font;
import java.awt.event.KeyListener;

import java.awt.event.MouseListener;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.TransferHandler;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

import net.miginfocom.swing.MigLayout;

/**
 * Validating Text field.
 */
public class ValidatingJTextField extends JComponent implements DocumentListener {

    /**
     * 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;
    /** TextField. */
    private final JTextField textField;
    /** Validator. */
    private Validator<String> validator;
    /** Error icon. */
    private final JLabel errorIcon;

    /**
     * Instantiates a new Validating text field.
     * 
     * @param validator Validator instance
     */
    public ValidatingJTextField(final Validator<String> validator) {
        this(new JTextField(), validator);
    //#ValidatingJTextField.java:68: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): __Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): __Dispatch_Table.checkError()V
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.__Tag
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): validator
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): new JLabel(ValidatingJTextField#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): new JTextField(ValidatingJTextField#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.__Tag
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.errorIcon
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.textField
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.validator
    //#new obj(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): new JLabel(ValidatingJTextField#1)
    //#new obj(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): new JTextField(ValidatingJTextField#1)
    //#pre[1] (void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[3] (void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): (soft) validator != null
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.errorIcon == &new JLabel(ValidatingJTextField#1)
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.textField == &new JTextField(ValidatingJTextField#1)
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.validator == validator
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): this.validator != null
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): new JLabel(ValidatingJTextField#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): new JTextField(ValidatingJTextField#1) num objects == 1
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:javax.swing.JLabel:setVisible
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:javax.swing.JTextField:getDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:javax.swing.JComponent
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:setLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)): Effects-of-calling:javax.swing.text.Document:addDocumentListener
    }
    //#ValidatingJTextField.java:69: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(Validator)

    /**
     * Instantiates a new Validating text field.
     * 
     * @param textField JTextField to wrap
     * @param validator Validator instance
     */
    public ValidatingJTextField(final JTextField textField,
            final Validator<String> validator) {
        super();
    //#ValidatingJTextField.java:79: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): __Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): __Dispatch_Table.checkError()V
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): textField
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.__Tag
    //#input(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): validator
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): new JLabel(ValidatingJTextField#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.__Tag
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.errorIcon
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.textField
    //#output(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.validator
    //#new obj(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): new JLabel(ValidatingJTextField#1)
    //#pre[1] (void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[2] (void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): textField != null
    //#pre[4] (void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): (soft) validator != null
    //#presumption(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): com.dmdirc.ui.IconManager:getIconManager(...)@82 != null
    //#presumption(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): javax.swing.JTextField:getDocument(...)@91 != null
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.errorIcon == &new JLabel(ValidatingJTextField#1)
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.textField == textField
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.textField != null
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.validator == validator
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): this.validator != null
    //#post(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): new JLabel(ValidatingJTextField#1) num objects == 1
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)): Effects-of-calling:javax.swing.JLabel:setVisible
        this.textField = textField;
        this.validator = validator;
        errorIcon =
    //#ValidatingJTextField.java:82: Warning: method not available - call not analyzed
    //#    call on IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)
    //#    unanalyzed callee: IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#ValidatingJTextField.java:82: Warning: method not available - call not analyzed
    //#    call on Icon com.dmdirc.ui.IconManager:getIcon(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)
    //#    unanalyzed callee: Icon com.dmdirc.ui.IconManager:getIcon(String)
                new JLabel(IconManager.getIconManager().getIcon("input-error"));

        setLayout(new MigLayout("fill, ins 0, hidemode 3, gap 0"));
    //#ValidatingJTextField.java:85: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#ValidatingJTextField.java:85: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:setLayout(LayoutManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:setLayout(LayoutManager)
        add(textField, "grow, pushx");
    //#ValidatingJTextField.java:86: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:add(Component, Object)
        add(errorIcon);
    //#ValidatingJTextField.java:87: Warning: method not available - call not analyzed
    //#    call on Component com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:add(Component)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)
    //#    unanalyzed callee: Component com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:add(Component)

        checkError();

        textField.getDocument().addDocumentListener(this);
    }
    //#ValidatingJTextField.java:92: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField(JTextField, Validator)

    /**
     * Checks the text for errors and sets the error state accordingly.
     */
    public void checkError() {
        if (textField.isEnabled()) {
    //#ValidatingJTextField.java:98: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.checkError()
    //#input(void checkError()): this
    //#input(void checkError()): this.errorIcon
    //#input(void checkError()): this.textField
    //#input(void checkError()): this.validator
    //#pre[2] (void checkError()): this.errorIcon != null
    //#pre[3] (void checkError()): this.textField != null
    //#pre[4] (void checkError()): (soft) this.validator != null
    //#presumption(void checkError()): com.dmdirc.config.prefs.validator.Validator:validate(...)@99 != null
    //#test_vector(void checkError()): javax.swing.JTextField:isEnabled(...)@98: {0}, {1}
            final ValidationResponse vr =
    //#ValidatingJTextField.java:99: Warning: method not available - call not analyzed
    //#    call on ValidationResponse com.dmdirc.config.prefs.validator.Validator:validate(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void checkError()
    //#    unanalyzed callee: ValidationResponse com.dmdirc.config.prefs.validator.Validator:validate(Object)
                    validator.validate(textField.getText());
            errorIcon.setToolTipText(vr.getFailureReason());
    //#ValidatingJTextField.java:101: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void checkError()
    //#    unanalyzed callee: String com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason()
            firePropertyChange("validationResult", !errorIcon.isVisible(), !vr.isFailure());
    //#ValidatingJTextField.java:102: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.prefs.validator.ValidationResponse:isFailure()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void checkError()
    //#    unanalyzed callee: bool com.dmdirc.config.prefs.validator.ValidationResponse:isFailure()
    //#ValidatingJTextField.java:102: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange(String, bool, bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void checkError()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange(String, bool, bool)
            errorIcon.setVisible(vr.isFailure());
    //#ValidatingJTextField.java:103: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.prefs.validator.ValidationResponse:isFailure()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void checkError()
    //#    unanalyzed callee: bool com.dmdirc.config.prefs.validator.ValidationResponse:isFailure()
        } else {
            firePropertyChange("validationResult", !errorIcon.isVisible(), true);
    //#ValidatingJTextField.java:105: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange(String, bool, bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: void checkError()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange(String, bool, bool)
            errorIcon.setVisible(false);
        }
    }
    //#ValidatingJTextField.java:108: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.checkError()

    /**
     * Checks if the text validates.
     * 
     * @see com.dmdirc.ui.swing.components.validating.Validator#validate(Object)
     * 
     * @return true iif the text validates
     */
    public boolean validateText() {
        if (textField.isEnabled()) {
    //#ValidatingJTextField.java:118: method: bool com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.validateText()
    //#input(bool validateText()): __Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(bool validateText()): __Descendant_Table[others]
    //#input(bool validateText()): __Dispatch_Table.getText()Ljava/lang/String;
    //#input(bool validateText()): this
    //#input(bool validateText()): this.__Tag
    //#input(bool validateText()): this.textField
    //#input(bool validateText()): this.validator
    //#output(bool validateText()): return_value
    //#pre[3] (bool validateText()): this.textField != null
    //#pre[2] (bool validateText()): (soft) this.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[4] (bool validateText()): (soft) this.validator != null
    //#presumption(bool validateText()): com.dmdirc.config.prefs.validator.Validator:validate(...)@119 != null
    //#post(bool validateText()): init'ed(return_value)
    //#unanalyzed(bool validateText()): Effects-of-calling:javax.swing.JTextField:getText
    //#test_vector(bool validateText()): javax.swing.JTextField:isEnabled(...)@118: {0}, {1}
            return !validator.validate(getText()).isFailure();
    //#ValidatingJTextField.java:119: Warning: method not available - call not analyzed
    //#    call on ValidationResponse com.dmdirc.config.prefs.validator.Validator:validate(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: bool validateText()
    //#    unanalyzed callee: ValidationResponse com.dmdirc.config.prefs.validator.Validator:validate(Object)
    //#ValidatingJTextField.java:119: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.prefs.validator.ValidationResponse:isFailure()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
    //#    method: bool validateText()
    //#    unanalyzed callee: bool com.dmdirc.config.prefs.validator.ValidationResponse:isFailure()
        } else {
            return true;
    //#ValidatingJTextField.java:121: end of method: bool com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.validateText()
        }
    }

    /** {@inheritDoc} */
    @Override
    public void changedUpdate(final DocumentEvent e) {
        checkError();
    //#ValidatingJTextField.java:128: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.changedUpdate(DocumentEvent)
    //#input(void changedUpdate(DocumentEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void changedUpdate(DocumentEvent)): __Descendant_Table[others]
    //#input(void changedUpdate(DocumentEvent)): __Dispatch_Table.checkError()V
    //#input(void changedUpdate(DocumentEvent)): this
    //#input(void changedUpdate(DocumentEvent)): this.__Tag
    //#input(void changedUpdate(DocumentEvent)): this.errorIcon
    //#input(void changedUpdate(DocumentEvent)): this.textField
    //#input(void changedUpdate(DocumentEvent)): this.validator
    //#pre[2] (void changedUpdate(DocumentEvent)): this.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[3] (void changedUpdate(DocumentEvent)): this.errorIcon != null
    //#pre[4] (void changedUpdate(DocumentEvent)): this.textField != null
    //#pre[5] (void changedUpdate(DocumentEvent)): (soft) this.validator != null
    //#unanalyzed(void changedUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void changedUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void changedUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void changedUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void changedUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void changedUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void changedUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void changedUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void changedUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setVisible
    }
    //#ValidatingJTextField.java:129: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.changedUpdate(DocumentEvent)

    /** {@inheritDoc} */
    @Override
    public void insertUpdate(final DocumentEvent e) {
        checkError();
    //#ValidatingJTextField.java:134: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.insertUpdate(DocumentEvent)
    //#input(void insertUpdate(DocumentEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void insertUpdate(DocumentEvent)): __Descendant_Table[others]
    //#input(void insertUpdate(DocumentEvent)): __Dispatch_Table.checkError()V
    //#input(void insertUpdate(DocumentEvent)): this
    //#input(void insertUpdate(DocumentEvent)): this.__Tag
    //#input(void insertUpdate(DocumentEvent)): this.errorIcon
    //#input(void insertUpdate(DocumentEvent)): this.textField
    //#input(void insertUpdate(DocumentEvent)): this.validator
    //#pre[2] (void insertUpdate(DocumentEvent)): this.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[3] (void insertUpdate(DocumentEvent)): this.errorIcon != null
    //#pre[4] (void insertUpdate(DocumentEvent)): this.textField != null
    //#pre[5] (void insertUpdate(DocumentEvent)): (soft) this.validator != null
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setVisible
    }
    //#ValidatingJTextField.java:135: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.insertUpdate(DocumentEvent)

    /** {@inheritDoc} */
    @Override
    public void removeUpdate(final DocumentEvent e) {
        checkError();
    //#ValidatingJTextField.java:140: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.removeUpdate(DocumentEvent)
    //#input(void removeUpdate(DocumentEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void removeUpdate(DocumentEvent)): __Descendant_Table[others]
    //#input(void removeUpdate(DocumentEvent)): __Dispatch_Table.checkError()V
    //#input(void removeUpdate(DocumentEvent)): this
    //#input(void removeUpdate(DocumentEvent)): this.__Tag
    //#input(void removeUpdate(DocumentEvent)): this.errorIcon
    //#input(void removeUpdate(DocumentEvent)): this.textField
    //#input(void removeUpdate(DocumentEvent)): this.validator
    //#pre[2] (void removeUpdate(DocumentEvent)): this.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[3] (void removeUpdate(DocumentEvent)): this.errorIcon != null
    //#pre[4] (void removeUpdate(DocumentEvent)): this.textField != null
    //#pre[5] (void removeUpdate(DocumentEvent)): (soft) this.validator != null
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JLabel:setVisible
    }
    //#ValidatingJTextField.java:141: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.removeUpdate(DocumentEvent)

    /** {@inheritDoc} */
    @Override
    public void setToolTipText(final String text) {
        textField.setToolTipText(text);
    //#ValidatingJTextField.java:146: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setToolTipText(String)
    //#input(void setToolTipText(String)): text
    //#input(void setToolTipText(String)): this
    //#input(void setToolTipText(String)): this.textField
    //#pre[3] (void setToolTipText(String)): this.textField != null
    }
    //#ValidatingJTextField.java:147: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setToolTipText(String)

    /** {@inheritDoc} */
    @Override
    public void setEnabled(final boolean enabled) {
        textField.setEnabled(enabled);
    //#ValidatingJTextField.java:152: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setEnabled(bool)
    //#input(void setEnabled(bool)): __Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#input(void setEnabled(bool)): __Descendant_Table[others]
    //#input(void setEnabled(bool)): __Dispatch_Table.checkError()V
    //#input(void setEnabled(bool)): enabled
    //#input(void setEnabled(bool)): this
    //#input(void setEnabled(bool)): this.__Tag
    //#input(void setEnabled(bool)): this.errorIcon
    //#input(void setEnabled(bool)): this.textField
    //#input(void setEnabled(bool)): this.validator
    //#pre[3] (void setEnabled(bool)): this.__Tag == com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField
    //#pre[4] (void setEnabled(bool)): this.errorIcon != null
    //#pre[5] (void setEnabled(bool)): this.textField != null
    //#pre[6] (void setEnabled(bool)): (soft) this.validator != null
    //#unanalyzed(void setEnabled(bool)): Effects-of-calling:javax.swing.JTextField:isEnabled
    //#unanalyzed(void setEnabled(bool)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void setEnabled(bool)): Effects-of-calling:com.dmdirc.config.prefs.validator.Validator:validate
    //#unanalyzed(void setEnabled(bool)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:getFailureReason
    //#unanalyzed(void setEnabled(bool)): Effects-of-calling:javax.swing.JLabel:setToolTipText
    //#unanalyzed(void setEnabled(bool)): Effects-of-calling:javax.swing.JLabel:isVisible
    //#unanalyzed(void setEnabled(bool)): Effects-of-calling:com.dmdirc.config.prefs.validator.ValidationResponse:isFailure
    //#unanalyzed(void setEnabled(bool)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField:firePropertyChange
    //#unanalyzed(void setEnabled(bool)): Effects-of-calling:javax.swing.JLabel:setVisible
        checkError();
    }
    //#ValidatingJTextField.java:154: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setEnabled(bool)
    
    /** {@inheritDoc} */
    @Override
    public void requestFocus() {
        textField.requestFocus();
    //#ValidatingJTextField.java:159: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.requestFocus()
    //#input(void requestFocus()): this
    //#input(void requestFocus()): this.textField
    //#pre[2] (void requestFocus()): this.textField != null
    }
    //#ValidatingJTextField.java:160: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.requestFocus()

    /** {@inheritDoc} */
    @Override
    public boolean requestFocusInWindow() {
        return textField.requestFocusInWindow();
    //#ValidatingJTextField.java:165: method: bool com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.requestFocusInWindow()
    //#input(bool requestFocusInWindow()): this
    //#input(bool requestFocusInWindow()): this.textField
    //#output(bool requestFocusInWindow()): return_value
    //#pre[2] (bool requestFocusInWindow()): this.textField != null
    //#post(bool requestFocusInWindow()): init'ed(return_value)
    //#ValidatingJTextField.java:165: end of method: bool com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.requestFocusInWindow()
    }

    /**
     * Sets the text in the textfield.
     * 
     * @see javax.swing.JTextField#setText(String)
     * 
     * @param t Text to set
     */
    public void setText(final String t) {
        textField.setText(t);
    //#ValidatingJTextField.java:176: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setText(String)
    //#input(void setText(String)): t
    //#input(void setText(String)): this
    //#input(void setText(String)): this.textField
    //#pre[3] (void setText(String)): this.textField != null
    }
    //#ValidatingJTextField.java:177: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setText(String)

    /**
     * Sets the selection start.
     * 
     * @see javax.swing.JTextField#setSelectionStart(int)
     * 
     * @param selectionStart Start of the selection
     */
    public void setSelectionStart(final int selectionStart) {
        textField.setSelectionStart(selectionStart);
    //#ValidatingJTextField.java:187: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setSelectionStart(int)
    //#input(void setSelectionStart(int)): selectionStart
    //#input(void setSelectionStart(int)): this
    //#input(void setSelectionStart(int)): this.textField
    //#pre[3] (void setSelectionStart(int)): this.textField != null
    }
    //#ValidatingJTextField.java:188: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setSelectionStart(int)

    /**
     * Sets the selection end.
     * 
     * @see javax.swing.JTextField#setSelectionEnd(int)
     * 
     * @param selectionEnd End of the selection
     */
    public void setSelectionEnd(final int selectionEnd) {
        textField.setSelectionEnd(selectionEnd);
    //#ValidatingJTextField.java:198: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setSelectionEnd(int)
    //#input(void setSelectionEnd(int)): selectionEnd
    //#input(void setSelectionEnd(int)): this
    //#input(void setSelectionEnd(int)): this.textField
    //#pre[3] (void setSelectionEnd(int)): this.textField != null
    }
    //#ValidatingJTextField.java:199: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setSelectionEnd(int)

    /**
     * Sets whether the component is editable.
     * 
     * @see javax.swing.JTextField#setEditable(boolean)
     * 
     * @param b editable state for the component
     */
    public void setEditable(final boolean b) {
        textField.setEditable(b);
    //#ValidatingJTextField.java:209: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setEditable(bool)
    //#input(void setEditable(bool)): b
    //#input(void setEditable(bool)): this
    //#input(void setEditable(bool)): this.textField
    //#pre[3] (void setEditable(bool)): this.textField != null
    }
    //#ValidatingJTextField.java:210: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setEditable(bool)

    /**
     * Selects all text in the textfield.
     * 
     * @see javax.swing.JTextField#selectAll()
     */
    public void selectAll() {
        textField.selectAll();
    //#ValidatingJTextField.java:218: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.selectAll()
    //#input(void selectAll()): this
    //#input(void selectAll()): this.textField
    //#pre[2] (void selectAll()): this.textField != null
    }
    //#ValidatingJTextField.java:219: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.selectAll()

    /**
     * Selects the specified text in the textfield.
     * 
     * @see javax.swing.JTextField#select(int, int)
     * 
     * @param selectionStart Selection start
     * @param selectionEnd Selection end
     */
    public void select(final int selectionStart, final int selectionEnd) {
        textField.select(selectionStart, selectionEnd);
    //#ValidatingJTextField.java:230: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.select(int, int)
    //#input(void select(int, int)): selectionEnd
    //#input(void select(int, int)): selectionStart
    //#input(void select(int, int)): this
    //#input(void select(int, int)): this.textField
    //#pre[4] (void select(int, int)): this.textField != null
    }
    //#ValidatingJTextField.java:231: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.select(int, int)

    /**
     * Replaces the textfields selection with the specified content.
     * 
     * @see javax.swing.JTextField#replaceSelection(String)
     * 
     * @param content Text to replace selection with
     */
    public void replaceSelection(final String content) {
        textField.replaceSelection(content);
    //#ValidatingJTextField.java:241: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.replaceSelection(String)
    //#input(void replaceSelection(String)): content
    //#input(void replaceSelection(String)): this
    //#input(void replaceSelection(String)): this.textField
    //#pre[3] (void replaceSelection(String)): this.textField != null
    }
    //#ValidatingJTextField.java:242: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.replaceSelection(String)

    /**
     * Paste's the system clipboard into the textfield.
     * 
     * @see javax.swing.JTextField#paste()
     */
    public void paste() {
        textField.paste();
    //#ValidatingJTextField.java:250: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.paste()
    //#input(void paste()): this
    //#input(void paste()): this.textField
    //#pre[2] (void paste()): this.textField != null
    }
    //#ValidatingJTextField.java:251: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.paste()

    /**
     * Checks if the textfield is editable.
     * 
     * @see javax.swing.JTextField#isEditable()
     * 
     * @return true iif the textfield is editable
     */
    public boolean isEditable() {
        return textField.isEditable();
    //#ValidatingJTextField.java:261: method: bool com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.isEditable()
    //#input(bool isEditable()): this
    //#input(bool isEditable()): this.textField
    //#output(bool isEditable()): return_value
    //#pre[2] (bool isEditable()): this.textField != null
    //#post(bool isEditable()): init'ed(return_value)
    //#ValidatingJTextField.java:261: end of method: bool com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.isEditable()
    }

    /**
     * Returns the text in the textfield.
     * 
     * @see javax.swing.JTextField#getText()
     * 
     * @return Textfield content
     */
    public String getText() {
        return textField.getText();
    //#ValidatingJTextField.java:272: method: String com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getText()
    //#input(String getText()): this
    //#input(String getText()): this.textField
    //#output(String getText()): return_value
    //#pre[2] (String getText()): this.textField != null
    //#post(String getText()): init'ed(return_value)
    //#ValidatingJTextField.java:272: end of method: String com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getText()
    }

    /**
     * Returns the specified section of text in the textfield.
     * 
     * @see javax.swing.JTextField#getText(int, int)
     * 
     * @param offs Start offset
     * @param len section length
     * 
     * @return Specified textfield content
     * 
     * @throws javax.swing.text.BadLocationException
     */
    public String getText(final int offs, final int len) throws BadLocationException {
        return textField.getText(offs, len);
    //#ValidatingJTextField.java:288: method: String com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getText(int, int)
    //#input(String getText(int, int)): len
    //#input(String getText(int, int)): offs
    //#input(String getText(int, int)): this
    //#input(String getText(int, int)): this.textField
    //#output(String getText(int, int)): return_value
    //#pre[4] (String getText(int, int)): this.textField != null
    //#post(String getText(int, int)): init'ed(return_value)
    //#ValidatingJTextField.java:288: end of method: String com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getText(int, int)
    }

    /**
     * Returns the start of the selection in the textfield.
     * 
     * @see javax.swing.JTextField#getSelectionStart()
     * 
     * @return Selection start
     */
    public int getSelectionStart() {
        return textField.getSelectionStart();
    //#ValidatingJTextField.java:299: method: int com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getSelectionStart()
    //#input(int getSelectionStart()): this
    //#input(int getSelectionStart()): this.textField
    //#output(int getSelectionStart()): return_value
    //#pre[2] (int getSelectionStart()): this.textField != null
    //#post(int getSelectionStart()): init'ed(return_value)
    //#ValidatingJTextField.java:299: end of method: int com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getSelectionStart()
    }

    /**
     * Returns the end of the textfield selection.
     * 
     * @see javax.swing.JTextField#getSelectionEnd()
     * 
     * @return Selection end
     */
    public int getSelectionEnd() {
        return textField.getSelectionEnd();
    //#ValidatingJTextField.java:310: method: int com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getSelectionEnd()
    //#input(int getSelectionEnd()): this
    //#input(int getSelectionEnd()): this.textField
    //#output(int getSelectionEnd()): return_value
    //#pre[2] (int getSelectionEnd()): this.textField != null
    //#post(int getSelectionEnd()): init'ed(return_value)
    //#ValidatingJTextField.java:310: end of method: int com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getSelectionEnd()
    }

    /**
     * Returns the selected text in the textfield.
     * 
     * @see javax.swing.JTextField#getSelectedText()
     * 
     * @return Selected text
     */
    public String getSelectedText() {
        return textField.getSelectedText();
    //#ValidatingJTextField.java:321: method: String com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getSelectedText()
    //#input(String getSelectedText()): this
    //#input(String getSelectedText()): this.textField
    //#output(String getSelectedText()): return_value
    //#pre[2] (String getSelectedText()): this.textField != null
    //#post(String getSelectedText()): init'ed(return_value)
    //#ValidatingJTextField.java:321: end of method: String com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getSelectedText()
    }

    /**
     * Returns the textfield's document.
     * 
     * @see javax.swing.JTextField#getDocument()
     * 
     * @return Textfield's document
     */
    public Document getDocument() {
        return textField.getDocument();
    //#ValidatingJTextField.java:332: method: Document com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getDocument()
    //#input(Document getDocument()): this
    //#input(Document getDocument()): this.textField
    //#output(Document getDocument()): return_value
    //#pre[2] (Document getDocument()): this.textField != null
    //#post(Document getDocument()): init'ed(return_value)
    //#ValidatingJTextField.java:332: end of method: Document com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getDocument()
    }

    /**
     * Cuts the selected text from the textfield into the clipboard.
     * 
     * @see javax.swing.JTextField#cut()
     */
    public void cut() {
        textField.cut();
    //#ValidatingJTextField.java:341: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.cut()
    //#input(void cut()): this
    //#input(void cut()): this.textField
    //#pre[2] (void cut()): this.textField != null
    }
    //#ValidatingJTextField.java:342: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.cut()

    /**
     * Copies the selected text from the textfield into the clipboard.
     * 
     * @see javax.swing.JTextField#copy()
     */
    public void copy() {
        textField.copy();
    //#ValidatingJTextField.java:350: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.copy()
    //#input(void copy()): this
    //#input(void copy()): this.textField
    //#pre[2] (void copy()): this.textField != null
    }
    //#ValidatingJTextField.java:351: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.copy()

    /**
     * Returns the font for the textfield.
     * 
     * @see javax.swing.JTextField#copy()
     */
    @Override
    public Font getFont() {
        return textField.getFont();
    //#ValidatingJTextField.java:360: method: Font com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getFont()
    //#input(Font getFont()): this
    //#input(Font getFont()): this.textField
    //#output(Font getFont()): return_value
    //#pre[2] (Font getFont()): this.textField != null
    //#post(Font getFont()): init'ed(return_value)
    //#ValidatingJTextField.java:360: end of method: Font com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getFont()
    }

    /** {@inheritDoc} */
    @Override
    public synchronized void addKeyListener(final KeyListener l) {
        textField.addKeyListener(l);
    //#ValidatingJTextField.java:366: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.addKeyListener(KeyListener)
    //#input(void addKeyListener(KeyListener)): l
    //#input(void addKeyListener(KeyListener)): this
    //#input(void addKeyListener(KeyListener)): this.__Lock
    //#input(void addKeyListener(KeyListener)): this.textField
    //#pre[3] (void addKeyListener(KeyListener)): this.textField != null
    }
    //#ValidatingJTextField.java:367: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.addKeyListener(KeyListener)

    /** {@inheritDoc} */
    @Override
    public synchronized void removeKeyListener(final KeyListener l) {
        textField.removeKeyListener(l);
    //#ValidatingJTextField.java:372: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.removeKeyListener(KeyListener)
    //#input(void removeKeyListener(KeyListener)): l
    //#input(void removeKeyListener(KeyListener)): this
    //#input(void removeKeyListener(KeyListener)): this.__Lock
    //#input(void removeKeyListener(KeyListener)): this.textField
    //#pre[3] (void removeKeyListener(KeyListener)): this.textField != null
    }
    //#ValidatingJTextField.java:373: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.removeKeyListener(KeyListener)

    /** {@inheritDoc} */
    @Override
    public synchronized void addMouseListener(final MouseListener l) {
        textField.addMouseListener(l);
    //#ValidatingJTextField.java:378: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.addMouseListener(MouseListener)
    //#input(void addMouseListener(MouseListener)): l
    //#input(void addMouseListener(MouseListener)): this
    //#input(void addMouseListener(MouseListener)): this.__Lock
    //#input(void addMouseListener(MouseListener)): this.textField
    //#pre[3] (void addMouseListener(MouseListener)): this.textField != null
    }
    //#ValidatingJTextField.java:379: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.addMouseListener(MouseListener)

    /** {@inheritDoc} */
    @Override
    public synchronized void removeMouseListener(final MouseListener l) {
        textField.removeMouseListener(l);
    //#ValidatingJTextField.java:384: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.removeMouseListener(MouseListener)
    //#input(void removeMouseListener(MouseListener)): l
    //#input(void removeMouseListener(MouseListener)): this
    //#input(void removeMouseListener(MouseListener)): this.__Lock
    //#input(void removeMouseListener(MouseListener)): this.textField
    //#pre[3] (void removeMouseListener(MouseListener)): this.textField != null
    }
    //#ValidatingJTextField.java:385: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.removeMouseListener(MouseListener)
    
    /**
     * Sets the drag enabled property on the textfield.
     * 
     * @param enabled Enabled?
     */
    public void setDragEnabled(final boolean enabled) {
        textField.setDragEnabled(enabled);
    //#ValidatingJTextField.java:393: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setDragEnabled(bool)
    //#input(void setDragEnabled(bool)): enabled
    //#input(void setDragEnabled(bool)): this
    //#input(void setDragEnabled(bool)): this.textField
    //#pre[3] (void setDragEnabled(bool)): this.textField != null
    }
    //#ValidatingJTextField.java:394: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setDragEnabled(bool)
    
    /** {@inheritDoc} */
    @Override
    public void setTransferHandler(final TransferHandler newHandler) {
        textField.setTransferHandler(newHandler);
    //#ValidatingJTextField.java:399: method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setTransferHandler(TransferHandler)
    //#input(void setTransferHandler(TransferHandler)): newHandler
    //#input(void setTransferHandler(TransferHandler)): this
    //#input(void setTransferHandler(TransferHandler)): this.textField
    //#pre[3] (void setTransferHandler(TransferHandler)): this.textField != null
    }
    //#ValidatingJTextField.java:400: end of method: void com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.setTransferHandler(TransferHandler)

    /**
     * Returns the validator used by this text field.
     * 
     * @since 0.6.3m1
     * 
     * @return This field's validator
     */
    public Validator<String> getValidator() {
        return validator;
    //#ValidatingJTextField.java:410: method: Validator com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getValidator()
    //#input(Validator getValidator()): this
    //#input(Validator getValidator()): this.validator
    //#output(Validator getValidator()): return_value
    //#pre[2] (Validator getValidator()): init'ed(this.validator)
    //#post(Validator getValidator()): return_value == this.validator
    //#post(Validator getValidator()): init'ed(return_value)
    //#ValidatingJTextField.java:410: end of method: Validator com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getValidator()
    }

    /**
     * Returns the text field used by this validating text field.
     *
     * @since 0.6.3m1
     *
     * @return This field's text field
     */
    public JTextField getTextField() {
        return textField;
    //#ValidatingJTextField.java:421: method: JTextField com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getTextField()
    //#input(JTextField getTextField()): this
    //#input(JTextField getTextField()): this.textField
    //#output(JTextField getTextField()): return_value
    //#post(JTextField getTextField()): return_value == this.textField
    //#post(JTextField getTextField()): init'ed(return_value)
    //#ValidatingJTextField.java:421: end of method: JTextField com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.getTextField()
    }
}
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField]
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.addKeyListener(Ljava/awt/event/KeyListener;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.addMouseListener(Ljava/awt/event/MouseListener;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.changedUpdate(Ljavax/swing/event/DocumentEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.checkError()V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.copy()V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.cut()V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getDocument()Ljavax/swing/text/Document;
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getFont()Ljava/awt/Font;
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getSelectedText()Ljava/lang/String;
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getSelectionEnd()I
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getSelectionStart()I
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getText()Ljava/lang/String;
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getText(II)Ljava/lang/String;
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getTextField()Ljavax/swing/JTextField;
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getValidator()Lcom/dmdirc/config/prefs/validator/Validator;
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.insertUpdate(Ljavax/swing/event/DocumentEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.isEditable()Z
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.paste()V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.removeKeyListener(Ljava/awt/event/KeyListener;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.removeMouseListener(Ljava/awt/event/MouseListener;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.removeUpdate(Ljavax/swing/event/DocumentEvent;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.replaceSelection(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.requestFocus()V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.requestFocusInWindow()Z
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.select(II)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.selectAll()V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setDragEnabled(Z)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setEditable(Z)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setEnabled(Z)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setSelectionEnd(I)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setSelectionStart(I)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setText(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setToolTipText(Ljava/lang/String;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setTransferHandler(Ljavax/swing/TransferHandler;)V
    //#output(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.validateText()Z
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/components/validating/ValidatingJTextField] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.addKeyListener(Ljava/awt/event/KeyListener;)V == &addKeyListener
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.addMouseListener(Ljava/awt/event/MouseListener;)V == &addMouseListener
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.changedUpdate(Ljavax/swing/event/DocumentEvent;)V == &changedUpdate
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.checkError()V == &checkError
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.copy()V == &copy
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.cut()V == &cut
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getDocument()Ljavax/swing/text/Document; == &getDocument
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getFont()Ljava/awt/Font; == &getFont
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getSelectedText()Ljava/lang/String; == &getSelectedText
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getSelectionEnd()I == &getSelectionEnd
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getSelectionStart()I == &getSelectionStart
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getText()Ljava/lang/String; == &getText
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getText(II)Ljava/lang/String; == &getText
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getTextField()Ljavax/swing/JTextField; == &getTextField
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.getValidator()Lcom/dmdirc/config/prefs/validator/Validator; == &getValidator
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.insertUpdate(Ljavax/swing/event/DocumentEvent;)V == &insertUpdate
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.isEditable()Z == &isEditable
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.paste()V == &paste
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.removeKeyListener(Ljava/awt/event/KeyListener;)V == &removeKeyListener
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.removeMouseListener(Ljava/awt/event/MouseListener;)V == &removeMouseListener
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.removeUpdate(Ljavax/swing/event/DocumentEvent;)V == &removeUpdate
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.replaceSelection(Ljava/lang/String;)V == &replaceSelection
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.requestFocus()V == &requestFocus
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.requestFocusInWindow()Z == &requestFocusInWindow
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.select(II)V == &select
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.selectAll()V == &selectAll
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setDragEnabled(Z)V == &setDragEnabled
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setEditable(Z)V == &setEditable
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setEnabled(Z)V == &setEnabled
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setSelectionEnd(I)V == &setSelectionEnd
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setSelectionStart(I)V == &setSelectionStart
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setText(Ljava/lang/String;)V == &setText
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setToolTipText(Ljava/lang/String;)V == &setToolTipText
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.setTransferHandler(Ljavax/swing/TransferHandler;)V == &setTransferHandler
    //#post(com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init): __Dispatch_Table.validateText()Z == &validateText
    //#ValidatingJTextField.java:: end of method: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField.com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField__static_init
    //#ValidatingJTextField.java:: end of class: com.dmdirc.addons.ui_swing.components.validating.ValidatingJTextField
