//# 0 errors, 876 messages
//#
/*
    //#FeedbackDialog.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.SendWorker
    //#FeedbackDialog.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.SendWorker.com.dmdirc.addons.ui_swing.dialogs.SendWorker__static_init
    //#FeedbackDialog.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#FeedbackDialog.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__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.dialogs;

import com.dmdirc.Main;
import com.dmdirc.Server;
import com.dmdirc.ServerManager;
import com.dmdirc.ui.core.util.Info;
import com.dmdirc.addons.ui_swing.SwingController;
import com.dmdirc.addons.ui_swing.UIUtilities;
import com.dmdirc.addons.ui_swing.components.LoggingSwingWorker;
import com.dmdirc.addons.ui_swing.components.StandardDialog;
import com.dmdirc.addons.ui_swing.components.text.TextLabel;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.util.Downloader;

import java.awt.Insets;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import net.miginfocom.swing.MigLayout;

/** Feedback form. */
public class FeedbackDialog extends StandardDialog implements ActionListener,
        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;
    /** A previously created instance of FeedbackDialog. */
    private static volatile FeedbackDialog me;
    /** Information label. */
    private TextLabel info;
    /** Name field. */
    private JTextField name;
    /** Email field. */
    private JTextField email;
    /** Feedback area. */
    private JTextArea feedback;
    /** Server info checkbox. */
    private JCheckBox serverCheckbox;
    /** DMDirc info checkbox. */
    private JCheckBox DMDircCheckbox;

    /** 
     * Instantiates the feedback dialog. 
     * 
     * @param parentWindow Parent window
     */
    private FeedbackDialog(final Window parentWindow) {
        super(parentWindow, ModalityType.MODELESS);
    //#FeedbackDialog.java:90: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)
    //#FeedbackDialog.java:90: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.StandardDialog(Window, Dialog$ModalityType)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.StandardDialog(Window, Dialog$ModalityType)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): "; "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): "body { font-family: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): "font-size: "._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): "pt; }"._tainted
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): java.awt.Dialog$ModalityType.MODELESS
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): parentWindow
    //#input(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JCheckBox(initComponents#7) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JCheckBox(initComponents#8) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JTextArea(initComponents#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JTextField(initComponents#4) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JTextField(initComponents#5) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new SimpleAttributeSet(TextLabel#6) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new TextLabel(initComponents#3) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new TextLabel(initComponents#3).__Tag
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new TextLabel(initComponents#3).sas
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.DMDircCheckbox
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.email
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.feedback
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.info
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.serverCheckbox
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JCheckBox(initComponents#7)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JCheckBox(initComponents#8)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JTextArea(initComponents#6)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JTextField(initComponents#4)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JTextField(initComponents#5)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new SimpleAttributeSet(TextLabel#6)
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new TextLabel(initComponents#3)
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): init'ed(java.awt.Dialog$ModalityType.MODELESS)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.DMDircCheckbox == &new JCheckBox(initComponents#8)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.email == &new JTextField(initComponents#5)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.feedback == &new JTextArea(initComponents#6)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.info == &new TextLabel(initComponents#3)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.name == &new JTextField(initComponents#4)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): this.serverCheckbox == &new JCheckBox(initComponents#7)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JCheckBox(initComponents#7) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JCheckBox(initComponents#8) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JTextArea(initComponents#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JTextField(initComponents#4) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new JTextField(initComponents#5) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new SimpleAttributeSet(TextLabel#6) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new TextLabel(initComponents#3) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new TextLabel(initComponents#3).__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#post(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): new TextLabel(initComponents#3).sas == &new SimpleAttributeSet(TextLabel#6)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:orderButtons
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:setActionCommand
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextField
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextArea
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox:setMargin
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.BorderFactory:createEmptyBorder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox:setBorder
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLayout
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextArea:getDocument
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)): Effects-of-calling:javax.swing.text.Document:addDocumentListener

        initComponents();
        layoutComponents();
        addListeners();

        setTitle("DMDirc: Feedback");
    //#FeedbackDialog.java:96: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setTitle(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setTitle(String)
        setResizable(false);
    //#FeedbackDialog.java:97: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setResizable(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setResizable(bool)

        pack();
    //#FeedbackDialog.java:99: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:pack()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:pack()
    }
    //#FeedbackDialog.java:100: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog(Window)

    /**
     * Creates the new feedback dialog if one doesn't exist, and displays it.
     * 
     * @param parentWindow Parent window
     */
    public static void showFeedbackDialog(final Window parentWindow) {
        me = getFeedbackDialog(parentWindow);
    //#FeedbackDialog.java:108: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.showFeedbackDialog(Window)
    //#input(void showFeedbackDialog(Window)): "; "._tainted
    //#input(void showFeedbackDialog(Window)): "body { font-family: "._tainted
    //#input(void showFeedbackDialog(Window)): "font-size: "._tainted
    //#input(void showFeedbackDialog(Window)): "pt; }"._tainted
    //#input(void showFeedbackDialog(Window)): __Class_Obj.__Lock
    //#input(void showFeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void showFeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void showFeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void showFeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void showFeedbackDialog(Window)): java.awt.Dialog$ModalityType.MODELESS
    //#input(void showFeedbackDialog(Window)): me
    //#input(void showFeedbackDialog(Window)): parentWindow
    //#output(void showFeedbackDialog(Window)): me
    //#output(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1) num objects
    //#output(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).DMDircCheckbox
    //#output(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).__Tag
    //#output(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).email
    //#output(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).feedback
    //#output(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).info
    //#output(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).name
    //#output(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).serverCheckbox
    //#output(void showFeedbackDialog(Window)): new JCheckBox(initComponents#7) num objects
    //#output(void showFeedbackDialog(Window)): new JCheckBox(initComponents#8) num objects
    //#output(void showFeedbackDialog(Window)): new JTextArea(initComponents#6) num objects
    //#output(void showFeedbackDialog(Window)): new JTextField(initComponents#4) num objects
    //#output(void showFeedbackDialog(Window)): new JTextField(initComponents#5) num objects
    //#output(void showFeedbackDialog(Window)): new SimpleAttributeSet(TextLabel#6) num objects
    //#output(void showFeedbackDialog(Window)): new TextLabel(initComponents#3) num objects
    //#output(void showFeedbackDialog(Window)): new TextLabel(initComponents#3).__Tag
    //#output(void showFeedbackDialog(Window)): new TextLabel(initComponents#3).sas
    //#new obj(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1)
    //#new obj(void showFeedbackDialog(Window)): new JCheckBox(initComponents#7)
    //#new obj(void showFeedbackDialog(Window)): new JCheckBox(initComponents#8)
    //#new obj(void showFeedbackDialog(Window)): new JTextArea(initComponents#6)
    //#new obj(void showFeedbackDialog(Window)): new JTextField(initComponents#4)
    //#new obj(void showFeedbackDialog(Window)): new JTextField(initComponents#5)
    //#new obj(void showFeedbackDialog(Window)): new SimpleAttributeSet(TextLabel#6)
    //#new obj(void showFeedbackDialog(Window)): new TextLabel(initComponents#3)
    //#pre[2] (void showFeedbackDialog(Window)): init'ed(me)
    //#post(void showFeedbackDialog(Window)): me == One-of{old me, &new FeedbackDialog(getFeedbackDialog#1)}
    //#post(void showFeedbackDialog(Window)): me != null
    //#post(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1) num objects <= 1
    //#post(void showFeedbackDialog(Window)): new JCheckBox(initComponents#7) num objects == new FeedbackDialog(getFeedbackDialog#1) num objects
    //#post(void showFeedbackDialog(Window)): new JCheckBox(initComponents#8) num objects == new FeedbackDialog(getFeedbackDialog#1) num objects
    //#post(void showFeedbackDialog(Window)): new JTextArea(initComponents#6) num objects == new FeedbackDialog(getFeedbackDialog#1) num objects
    //#post(void showFeedbackDialog(Window)): new JTextField(initComponents#4) num objects == new FeedbackDialog(getFeedbackDialog#1) num objects
    //#post(void showFeedbackDialog(Window)): new JTextField(initComponents#5) num objects == new FeedbackDialog(getFeedbackDialog#1) num objects
    //#post(void showFeedbackDialog(Window)): new SimpleAttributeSet(TextLabel#6) num objects == new FeedbackDialog(getFeedbackDialog#1) num objects
    //#post(void showFeedbackDialog(Window)): new TextLabel(initComponents#3) num objects == new FeedbackDialog(getFeedbackDialog#1) num objects
    //#post(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).DMDircCheckbox == &new JCheckBox(initComponents#8)
    //#post(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).__Tag == com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog
    //#post(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).email == &new JTextField(initComponents#5)
    //#post(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).feedback == &new JTextArea(initComponents#6)
    //#post(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).info == &new TextLabel(initComponents#3)
    //#post(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).name == &new JTextField(initComponents#4)
    //#post(void showFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).serverCheckbox == &new JCheckBox(initComponents#7)
    //#post(void showFeedbackDialog(Window)): new TextLabel(initComponents#3).__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#post(void showFeedbackDialog(Window)): new TextLabel(initComponents#3).sas == &new SimpleAttributeSet(TextLabel#6)
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:orderButtons
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:setActionCommand
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextField
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextArea
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox:setMargin
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.BorderFactory:createEmptyBorder
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox:setBorder
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLayout
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextArea:getDocument
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.Document:addDocumentListener
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.StandardDialog
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setTitle
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setResizable
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:pack
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.ServerManager:getServerManager
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.ServerManager:numServers
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox:setEnabled
    //#unanalyzed(void showFeedbackDialog(Window)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj

        me.setLocationRelativeTo(parentWindow);
    //#FeedbackDialog.java:110: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLocationRelativeTo(Component)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void showFeedbackDialog(Window)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLocationRelativeTo(Component)
        me.setVisible(true);
    //#FeedbackDialog.java:111: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void showFeedbackDialog(Window)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setVisible(bool)
        me.requestFocusInWindow();
    //#FeedbackDialog.java:112: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:requestFocusInWindow()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void showFeedbackDialog(Window)
    //#    unanalyzed callee: bool com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:requestFocusInWindow()
    }
    //#FeedbackDialog.java:113: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.showFeedbackDialog(Window)

    /**
     * Returns the current instance of the FeedbackDialog.
     * 
     * @param parentWindow Parent window
     *
     * @return The current FeedbackDialog instance
     */
    public static FeedbackDialog getFeedbackDialog(final Window parentWindow) {
        synchronized (FeedbackDialog.class) {
    //#FeedbackDialog.java:123: method: FeedbackDialog com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.getFeedbackDialog(Window)
    //#input(FeedbackDialog getFeedbackDialog(Window)): "; "._tainted
    //#input(FeedbackDialog getFeedbackDialog(Window)): "body { font-family: "._tainted
    //#input(FeedbackDialog getFeedbackDialog(Window)): "font-size: "._tainted
    //#input(FeedbackDialog getFeedbackDialog(Window)): "pt; }"._tainted
    //#input(FeedbackDialog getFeedbackDialog(Window)): __Class_Obj.__Lock
    //#input(FeedbackDialog getFeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(FeedbackDialog getFeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(FeedbackDialog getFeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(FeedbackDialog getFeedbackDialog(Window)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(FeedbackDialog getFeedbackDialog(Window)): java.awt.Dialog$ModalityType.MODELESS
    //#input(FeedbackDialog getFeedbackDialog(Window)): me
    //#input(FeedbackDialog getFeedbackDialog(Window)): parentWindow
    //#output(FeedbackDialog getFeedbackDialog(Window)): me
    //#output(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1) num objects
    //#output(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).DMDircCheckbox
    //#output(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).__Tag
    //#output(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).email
    //#output(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).feedback
    //#output(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).info
    //#output(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).name
    //#output(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).serverCheckbox
    //#output(FeedbackDialog getFeedbackDialog(Window)): new JCheckBox(initComponents#7) num objects
    //#output(FeedbackDialog getFeedbackDialog(Window)): new JCheckBox(initComponents#8) num objects
    //#output(FeedbackDialog getFeedbackDialog(Window)): new JTextArea(initComponents#6) num objects
    //#output(FeedbackDialog getFeedbackDialog(Window)): new JTextField(initComponents#4) num objects
    //#output(FeedbackDialog getFeedbackDialog(Window)): new JTextField(initComponents#5) num objects
    //#output(FeedbackDialog getFeedbackDialog(Window)): new SimpleAttributeSet(TextLabel#6) num objects
    //#output(FeedbackDialog getFeedbackDialog(Window)): new TextLabel(initComponents#3) num objects
    //#output(FeedbackDialog getFeedbackDialog(Window)): new TextLabel(initComponents#3).__Tag
    //#output(FeedbackDialog getFeedbackDialog(Window)): new TextLabel(initComponents#3).sas
    //#output(FeedbackDialog getFeedbackDialog(Window)): return_value
    //#new obj(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1)
    //#new obj(FeedbackDialog getFeedbackDialog(Window)): new JCheckBox(initComponents#7)
    //#new obj(FeedbackDialog getFeedbackDialog(Window)): new JCheckBox(initComponents#8)
    //#new obj(FeedbackDialog getFeedbackDialog(Window)): new JTextArea(initComponents#6)
    //#new obj(FeedbackDialog getFeedbackDialog(Window)): new JTextField(initComponents#4)
    //#new obj(FeedbackDialog getFeedbackDialog(Window)): new JTextField(initComponents#5)
    //#new obj(FeedbackDialog getFeedbackDialog(Window)): new SimpleAttributeSet(TextLabel#6)
    //#new obj(FeedbackDialog getFeedbackDialog(Window)): new TextLabel(initComponents#3)
    //#pre[2] (FeedbackDialog getFeedbackDialog(Window)): init'ed(me)
    //#presumption(FeedbackDialog getFeedbackDialog(Window)): com.dmdirc.ServerManager:getServerManager(...)@126 != null
    //#presumption(FeedbackDialog getFeedbackDialog(Window)): me.serverCheckbox != null
    //#post(FeedbackDialog getFeedbackDialog(Window)): me == One-of{old me, &new FeedbackDialog(getFeedbackDialog#1)}
    //#post(FeedbackDialog getFeedbackDialog(Window)): me != null
    //#post(FeedbackDialog getFeedbackDialog(Window)): return_value == One-of{old me, &new FeedbackDialog(getFeedbackDialog#1)}
    //#post(FeedbackDialog getFeedbackDialog(Window)): return_value != null
    //#post(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1) num objects <= 1
    //#post(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).DMDircCheckbox == &new JCheckBox(initComponents#8)
    //#post(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).__Tag == com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog
    //#post(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).email == &new JTextField(initComponents#5)
    //#post(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).feedback == &new JTextArea(initComponents#6)
    //#post(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).info == &new TextLabel(initComponents#3)
    //#post(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).name == &new JTextField(initComponents#4)
    //#post(FeedbackDialog getFeedbackDialog(Window)): new FeedbackDialog(getFeedbackDialog#1).serverCheckbox == &new JCheckBox(initComponents#7)
    //#post(FeedbackDialog getFeedbackDialog(Window)): new JCheckBox(initComponents#7) num objects <= 1
    //#post(FeedbackDialog getFeedbackDialog(Window)): new JCheckBox(initComponents#8) num objects <= 1
    //#post(FeedbackDialog getFeedbackDialog(Window)): new JTextArea(initComponents#6) num objects <= 1
    //#post(FeedbackDialog getFeedbackDialog(Window)): new JTextField(initComponents#4) num objects <= 1
    //#post(FeedbackDialog getFeedbackDialog(Window)): new JTextField(initComponents#5) num objects <= 1
    //#post(FeedbackDialog getFeedbackDialog(Window)): new SimpleAttributeSet(TextLabel#6) num objects <= 1
    //#post(FeedbackDialog getFeedbackDialog(Window)): new TextLabel(initComponents#3) num objects <= 1
    //#post(FeedbackDialog getFeedbackDialog(Window)): new TextLabel(initComponents#3).__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#post(FeedbackDialog getFeedbackDialog(Window)): new TextLabel(initComponents#3).sas == &new SimpleAttributeSet(TextLabel#6)
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:orderButtons
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:setActionCommand
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:java.awt.Insets
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextField
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextArea
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox:setMargin
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.BorderFactory:createEmptyBorder
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JCheckBox:setBorder
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLayout
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JScrollPane
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JButton:addActionListener
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.JTextArea:getDocument
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:javax.swing.text.Document:addDocumentListener
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.StandardDialog
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setTitle
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setResizable
    //#unanalyzed(FeedbackDialog getFeedbackDialog(Window)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:pack
            if (me == null) {
                me = new FeedbackDialog(parentWindow);
                me.serverCheckbox.setEnabled(ServerManager.getServerManager().
    //#FeedbackDialog.java:126: Warning: method not available - call not analyzed
    //#    call on ServerManager com.dmdirc.ServerManager:getServerManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: FeedbackDialog getFeedbackDialog(Window)
    //#    unanalyzed callee: ServerManager com.dmdirc.ServerManager:getServerManager()
    //#FeedbackDialog.java:126: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.ServerManager:numServers()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: FeedbackDialog getFeedbackDialog(Window)
    //#    unanalyzed callee: int com.dmdirc.ServerManager:numServers()
                        numServers() > 0);
            }
        }

        return me;
    //#FeedbackDialog.java:131: end of method: FeedbackDialog com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.getFeedbackDialog(Window)
    }

    /** Initialises the components. */
    private void initComponents() {
        orderButtons(new JButton(), new JButton());
    //#FeedbackDialog.java:136: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.initComponents()
    //#FeedbackDialog.java:136: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:orderButtons(JButton, JButton)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void initComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:orderButtons(JButton, JButton)
    //#input(void initComponents()): "; "._tainted
    //#input(void initComponents()): "body { font-family: "._tainted
    //#input(void initComponents()): "font-size: "._tainted
    //#input(void initComponents()): "pt; }"._tainted
    //#input(void initComponents()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void initComponents()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void initComponents()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void initComponents()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void initComponents()): this
    //#output(void initComponents()): new JCheckBox(initComponents#7) num objects
    //#output(void initComponents()): new JCheckBox(initComponents#8) num objects
    //#output(void initComponents()): new JTextArea(initComponents#6) num objects
    //#output(void initComponents()): new JTextField(initComponents#4) num objects
    //#output(void initComponents()): new JTextField(initComponents#5) num objects
    //#output(void initComponents()): new SimpleAttributeSet(TextLabel#6) num objects
    //#output(void initComponents()): new TextLabel(initComponents#3) num objects
    //#output(void initComponents()): this.info.__Tag
    //#output(void initComponents()): this.info.sas
    //#output(void initComponents()): this.DMDircCheckbox
    //#output(void initComponents()): this.email
    //#output(void initComponents()): this.feedback
    //#output(void initComponents()): this.info
    //#output(void initComponents()): this.name
    //#output(void initComponents()): this.serverCheckbox
    //#new obj(void initComponents()): new JCheckBox(initComponents#7)
    //#new obj(void initComponents()): new JCheckBox(initComponents#8)
    //#new obj(void initComponents()): new JTextArea(initComponents#6)
    //#new obj(void initComponents()): new JTextField(initComponents#4)
    //#new obj(void initComponents()): new JTextField(initComponents#5)
    //#new obj(void initComponents()): new SimpleAttributeSet(TextLabel#6)
    //#new obj(void initComponents()): new TextLabel(initComponents#3)
    //#presumption(void initComponents()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton(...)@141 != null
    //#presumption(void initComponents()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@138 != null
    //#presumption(void initComponents()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@139 != null
    //#presumption(void initComponents()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@140 != null
    //#post(void initComponents()): this.DMDircCheckbox == &new JCheckBox(initComponents#8)
    //#post(void initComponents()): this.email == &new JTextField(initComponents#5)
    //#post(void initComponents()): this.feedback == &new JTextArea(initComponents#6)
    //#post(void initComponents()): this.info == &new TextLabel(initComponents#3)
    //#post(void initComponents()): this.name == &new JTextField(initComponents#4)
    //#post(void initComponents()): this.serverCheckbox == &new JCheckBox(initComponents#7)
    //#post(void initComponents()): new JCheckBox(initComponents#7) num objects == 1
    //#post(void initComponents()): new JCheckBox(initComponents#8) num objects == 1
    //#post(void initComponents()): new JTextArea(initComponents#6) num objects == 1
    //#post(void initComponents()): new JTextField(initComponents#4) num objects == 1
    //#post(void initComponents()): new JTextField(initComponents#5) num objects == 1
    //#post(void initComponents()): new SimpleAttributeSet(TextLabel#6) num objects == 1
    //#post(void initComponents()): new TextLabel(initComponents#3) num objects == 1
    //#post(void initComponents()): this.info.__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#post(void initComponents()): this.info.sas == &new SimpleAttributeSet(TextLabel#6)
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.DefaultStyledDocument
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.JTextPane
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.html.HTMLEditorKit
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditorKit
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.plaf.basic.BasicTextPaneUI
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setUI
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.UIManager:getFont
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.html.HTMLDocument:getStyleSheet
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void initComponents()): Effects-of-calling:java.awt.Font:getFamily
    //#unanalyzed(void initComponents()): Effects-of-calling:java.awt.Font:getSize
    //#unanalyzed(void initComponents()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.html.StyleSheet:addRule
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setOpaque
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setEditable
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setHighlighter
    //#unanalyzed(void initComponents()): Effects-of-calling:java.awt.Insets
    //#unanalyzed(void initComponents()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.text.TextLabel:setMargin
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.SimpleAttributeSet
    //#unanalyzed(void initComponents()): Effects-of-calling:javax.swing.text.StyleConstants:setAlignment

        getOkButton().setText("Send");
    //#FeedbackDialog.java:138: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void initComponents()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
        getOkButton().setActionCommand("Send");
    //#FeedbackDialog.java:139: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void initComponents()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
        getOkButton().setEnabled(false);
    //#FeedbackDialog.java:140: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void initComponents()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
        getCancelButton().setActionCommand("Close");
    //#FeedbackDialog.java:141: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void initComponents()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton()

        info = new TextLabel("Thank you for using DMDirc. If you have any " +
                "feedback about the client, such as bug reports or feature " +
                "requests, please send it to us using the form below.  " +
                "The name and e-mail address fields are optional if you " +
                "don't want us to contact you about your feedback.\n\n" +
                "Please note that this is for feedback such as bug reports " +
                "and suggestions, not for technical support. For " +
                "technical support, please join #DMDirc using the button " +
                "in the help menu.");
        name = new JTextField();
        email = new JTextField();
        feedback = new JTextArea();
        serverCheckbox =
                new JCheckBox("Include information about connected servers.");
        DMDircCheckbox = new JCheckBox("Include information about DMDirc.");

        UIUtilities.addUndoManager(name);
    //#FeedbackDialog.java:159: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager(JTextComponent)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void initComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager(JTextComponent)
        UIUtilities.addUndoManager(email);
    //#FeedbackDialog.java:160: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager(JTextComponent)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void initComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager(JTextComponent)
        UIUtilities.addUndoManager(feedback);
    //#FeedbackDialog.java:161: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager(JTextComponent)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void initComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:addUndoManager(JTextComponent)
    }
    //#FeedbackDialog.java:162: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.initComponents()

    /** Lays out the components. */
    private void layoutComponents() {
        serverCheckbox.setMargin(new Insets(0, 0, 0, 0));
    //#FeedbackDialog.java:166: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.layoutComponents()
    //#input(void layoutComponents()): this
    //#input(void layoutComponents()): this.DMDircCheckbox
    //#input(void layoutComponents()): this.email
    //#input(void layoutComponents()): this.feedback
    //#input(void layoutComponents()): this.info
    //#input(void layoutComponents()): this.name
    //#input(void layoutComponents()): this.serverCheckbox
    //#pre[2] (void layoutComponents()): this.DMDircCheckbox != null
    //#pre[3] (void layoutComponents()): init'ed(this.email)
    //#pre[4] (void layoutComponents()): init'ed(this.feedback)
    //#pre[5] (void layoutComponents()): init'ed(this.info)
    //#pre[6] (void layoutComponents()): init'ed(this.name)
    //#pre[7] (void layoutComponents()): this.serverCheckbox != null
        serverCheckbox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
        DMDircCheckbox.setMargin(new Insets(0, 0, 0, 0));
        DMDircCheckbox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));

        setLayout(new MigLayout("fill, wmin 600, wmax 600, hmin 400, hmax 400"));
    //#FeedbackDialog.java:171: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#FeedbackDialog.java:171: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLayout(LayoutManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLayout(LayoutManager)

        add(info, "span, growx, wrap, gapbottom unrel");
    //#FeedbackDialog.java:173: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)

        add(new JLabel("Name: "), "aligny top, shrink");
    //#FeedbackDialog.java:175: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
        add(name, "growx, pushx, wrap");
    //#FeedbackDialog.java:176: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)

        add(new JLabel("Email: "), "aligny top, shrink");
    //#FeedbackDialog.java:178: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
        add(email, "growx, pushx, wrap");
    //#FeedbackDialog.java:179: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)

        add(new JLabel("Feedback: "), "aligny top, shrink");
    //#FeedbackDialog.java:181: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
        add(new JScrollPane(feedback), "grow, push, wrap");
    //#FeedbackDialog.java:182: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
        add(serverCheckbox, "skip 1, growx, wrap");
    //#FeedbackDialog.java:183: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
        add(DMDircCheckbox, "skip 1, growx, wrap");
    //#FeedbackDialog.java:184: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)

        add(getCancelButton(), "skip, split 2, right, sg button");
    //#FeedbackDialog.java:186: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton()
    //#FeedbackDialog.java:186: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
        add(getOkButton(), "right, sg button");
    //#FeedbackDialog.java:187: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#FeedbackDialog.java:187: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    }
    //#FeedbackDialog.java:188: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.layoutComponents()

    /**
     * Lays out the components.
     *
     * @param error Did the submission error?
     */
    protected void layoutComponents2(final StringBuilder error) {
        getContentPane().setVisible(false);
    //#FeedbackDialog.java:196: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.layoutComponents2(StringBuilder)
    //#FeedbackDialog.java:196: Warning: method not available - call not analyzed
    //#    call on Container com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: Container com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane()
    //#input(void layoutComponents2(StringBuilder)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void layoutComponents2(StringBuilder)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void layoutComponents2(StringBuilder)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void layoutComponents2(StringBuilder)): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void layoutComponents2(StringBuilder)): error
    //#input(void layoutComponents2(StringBuilder)): error._tainted
    //#input(void layoutComponents2(StringBuilder)): this
    //#input(void layoutComponents2(StringBuilder)): this.info
    //#input(void layoutComponents2(StringBuilder)): this.info.__Tag
    //#input(void layoutComponents2(StringBuilder)): this.info.sas
    //#pre[1] (void layoutComponents2(StringBuilder)): error != null
    //#pre[4] (void layoutComponents2(StringBuilder)): this.info != null
    //#pre[5] (void layoutComponents2(StringBuilder)): (soft) this.info.__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#pre[6] (void layoutComponents2(StringBuilder)): (soft) init'ed(this.info.sas)
    //#presumption(void layoutComponents2(StringBuilder)): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane(...)@196 != null
    //#presumption(void layoutComponents2(StringBuilder)): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane(...)@197 != null
    //#presumption(void layoutComponents2(StringBuilder)): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane(...)@209 != null
    //#presumption(void layoutComponents2(StringBuilder)): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@198 != null
    //#presumption(void layoutComponents2(StringBuilder)): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@199 != null
    //#presumption(void layoutComponents2(StringBuilder)): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@200 != null
    //#unanalyzed(void layoutComponents2(StringBuilder)): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void layoutComponents2(StringBuilder)): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void layoutComponents2(StringBuilder)): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void layoutComponents2(StringBuilder)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void layoutComponents2(StringBuilder)): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
        getContentPane().removeAll();
    //#FeedbackDialog.java:197: Warning: method not available - call not analyzed
    //#    call on Container com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: Container com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane()
        getOkButton().setEnabled(true);
    //#FeedbackDialog.java:198: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
        getOkButton().setText("Close");
    //#FeedbackDialog.java:199: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
        getOkButton().setActionCommand("Close");
    //#FeedbackDialog.java:200: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()

        setLayout(new MigLayout("fill, wmin 600, wmax 600, hmin 400, hmax 400"));
    //#FeedbackDialog.java:202: Warning: method not available - call not analyzed
    //#    call on void net.miginfocom.swing.MigLayout(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: void net.miginfocom.swing.MigLayout(String)
    //#FeedbackDialog.java:202: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLayout(LayoutManager)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLayout(LayoutManager)

        info.setText(error.toString());

        add(info, "span 3, grow, push, wrap");
    //#FeedbackDialog.java:206: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)

        add(getOkButton(), "skip, right, tag ok, sg button");
    //#FeedbackDialog.java:208: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#FeedbackDialog.java:208: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add(Component, Object)
        getContentPane().setVisible(true);
    //#FeedbackDialog.java:209: Warning: method not available - call not analyzed
    //#    call on Container com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void layoutComponents2(StringBuilder)
    //#    unanalyzed callee: Container com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane()
    }
    //#FeedbackDialog.java:210: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.layoutComponents2(StringBuilder)

    /** Adds listeners to the components. */
    private void addListeners() {
        getOkButton().addActionListener(this);
    //#FeedbackDialog.java:214: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.addListeners()
    //#FeedbackDialog.java:214: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void addListeners()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#input(void addListeners()): this
    //#input(void addListeners()): this.feedback
    //#pre[2] (void addListeners()): this.feedback != null
    //#presumption(void addListeners()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton(...)@215 != null
    //#presumption(void addListeners()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@214 != null
    //#presumption(void addListeners()): javax.swing.JTextArea:getDocument(...)@216 != null
        getCancelButton().addActionListener(this);
    //#FeedbackDialog.java:215: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void addListeners()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton()
        feedback.getDocument().addDocumentListener(this);
    }
    //#FeedbackDialog.java:217: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.addListeners()

    /** Checks and sends the feedback. */
    private void send() {
        getOkButton().setEnabled(false);
    //#FeedbackDialog.java:221: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.send()
    //#FeedbackDialog.java:221: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#input(void send()): " "._tainted
    //#input(void send()): " - "._tainted
    //#input(void send()): "&#10;"._tainted
    //#input(void send()): "Actual name: "._tainted
    //#input(void send()): "DMDirc version: "._tainted
    //#input(void send()): "IRCd: "._tainted
    //#input(void send()): "Java version: "._tainted
    //#input(void send()): "Look &amp; Feel: "._tainted
    //#input(void send()): "Modes: "._tainted
    //#input(void send()): "Network: "._tainted
    //#input(void send()): "OS Version: "._tainted
    //#input(void send()): "Profile directory: "._tainted
    //#input(void send()): "Server name: "._tainted
    //#input(void send()): me
    //#input(void send()): this
    //#input(void send()): this.DMDircCheckbox
    //#input(void send()): this.email
    //#input(void send()): this.feedback
    //#input(void send()): this.name
    //#input(void send()): this.serverCheckbox
    //#pre[1] (void send()): init'ed(me)
    //#pre[3] (void send()): this.DMDircCheckbox != null
    //#pre[4] (void send()): this.email != null
    //#pre[5] (void send()): this.feedback != null
    //#pre[6] (void send()): this.name != null
    //#pre[7] (void send()): this.serverCheckbox != null
    //#presumption(void send()): com.dmdirc.Server:getParser(...)@229 != null
    //#presumption(void send()): com.dmdirc.Server:getParser(...)@233 != null
    //#presumption(void send()): com.dmdirc.Server:getParser(...)@235 != null
    //#presumption(void send()): com.dmdirc.Server:getParser(...)@236 != null
    //#presumption(void send()): com.dmdirc.Server:getParser(...)@239 != null
    //#presumption(void send()): com.dmdirc.Server:getParser(...)@240 != null
    //#presumption(void send()): com.dmdirc.Server:getParser(...)@242 != null
    //#presumption(void send()): com.dmdirc.ServerManager:getServerManager(...)@226 != null
    //#presumption(void send()): com.dmdirc.ServerManager:getServers(...)@226 != null
    //#presumption(void send()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton(...)@222 != null
    //#presumption(void send()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@221 != null
    //#presumption(void send()): java.util.Iterator:next(...)@226 != null
    //#presumption(void send()): javax.swing.JTextArea:getText(...)@254 != null
    //#presumption(void send()): javax.swing.JTextField:getText(...)@254 != null
    //#presumption(void send()): javax.swing.JTextField:getText(...)@254 != null
    //#unanalyzed(void send()): Effects-of-calling:com.dmdirc.addons.ui_swing.components.LoggingSwingWorker
    //#unanalyzed(void send()): Effects-of-calling:java.lang.StringBuilder
    //#test_vector(void send()): java.util.Iterator:hasNext(...)@226: {0}, {1}
    //#test_vector(void send()): javax.swing.JCheckBox:isSelected(...)@225: {0}, {1}
    //#test_vector(void send()): javax.swing.JCheckBox:isSelected(...)@245: {0}, {1}
        getCancelButton().setEnabled(false);
    //#FeedbackDialog.java:222: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton()
        final StringBuilder serverInfo = new StringBuilder();
        final StringBuilder dmdircInfo = new StringBuilder();
        if (serverCheckbox.isSelected()) {
            for (Server server : ServerManager.getServerManager().getServers()) {
    //#FeedbackDialog.java:226: Warning: method not available - call not analyzed
    //#    call on ServerManager com.dmdirc.ServerManager:getServerManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: ServerManager com.dmdirc.ServerManager:getServerManager()
    //#FeedbackDialog.java:226: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.ServerManager:getServers()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: List com.dmdirc.ServerManager:getServers()
                serverInfo.append("Server name: ").append(server.getName()).
    //#FeedbackDialog.java:227: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Server:getName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.Server:getName()
                        append("\n");
                serverInfo.append("Actual name: ").
    //#FeedbackDialog.java:229: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#FeedbackDialog.java:229: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getServerName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getServerName()
                        append(server.getParser().getServerName()).append("\n");
                serverInfo.append("Network: ").append(server.getNetwork()).
    //#FeedbackDialog.java:231: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Server:getNetwork()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.Server:getNetwork()
                        append("\n");
                serverInfo.append("IRCd: ").append(server.getParser().getIRCD(false)).
    //#FeedbackDialog.java:233: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#FeedbackDialog.java:233: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
                        append(" - ");
                serverInfo.append(server.getParser().getIRCD(true)).append("\n");
    //#FeedbackDialog.java:235: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#FeedbackDialog.java:235: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getIRCD(bool)
                serverInfo.append("Modes: ").
    //#FeedbackDialog.java:236: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#FeedbackDialog.java:236: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getBoolChanModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getBoolChanModes()
                        append(server.getParser().getBoolChanModes()).
                        append(" ");
                serverInfo.append(server.getParser().getListChanModes()).append(" ");
    //#FeedbackDialog.java:239: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#FeedbackDialog.java:239: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getListChanModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getListChanModes()
                serverInfo.append(server.getParser().getSetOnlyChanModes()).
    //#FeedbackDialog.java:240: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#FeedbackDialog.java:240: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getSetOnlyChanModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getSetOnlyChanModes()
                        append(" ");
                serverInfo.append(server.getParser().getSetUnsetChanModes());
    //#FeedbackDialog.java:242: Warning: method not available - call not analyzed
    //#    call on IRCParser com.dmdirc.Server:getParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: IRCParser com.dmdirc.Server:getParser()
    //#FeedbackDialog.java:242: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.parser.irc.IRCParser:getSetUnsetChanModes()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.parser.irc.IRCParser:getSetUnsetChanModes()
            }
        }
        if (DMDircCheckbox.isSelected()) {
            dmdircInfo.append("DMDirc version: " + Info.getDMDircVersion()).
    //#FeedbackDialog.java:246: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.ui.core.util.Info:getDMDircVersion()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.ui.core.util.Info:getDMDircVersion()
                    append("\n");
            dmdircInfo.append("Profile directory: " + Main.getConfigDir()).
    //#FeedbackDialog.java:248: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.Main:getConfigDir()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.Main:getConfigDir()
                    append("\n");
            dmdircInfo.append("Java version: " + Info.getJavaVersion()).append("\n");
    //#FeedbackDialog.java:250: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.ui.core.util.Info:getJavaVersion()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.ui.core.util.Info:getJavaVersion()
            dmdircInfo.append("OS Version: " + Info.getOSVersion()).append("\n");
    //#FeedbackDialog.java:251: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.ui.core.util.Info:getOSVersion()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.ui.core.util.Info:getOSVersion()
            dmdircInfo.append("Look & Feel: " + SwingController.getLookAndFeel());
    //#FeedbackDialog.java:252: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.ui_swing.SwingController:getLookAndFeel()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: String com.dmdirc.addons.ui_swing.SwingController:getLookAndFeel()
        }
        new SendWorker(me, name.getText().trim(),
    //#FeedbackDialog.java:254: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.SendWorker:execute()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void send()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.SendWorker:execute()
                email.getText().trim(), feedback.getText().trim(), serverInfo.toString().
                trim(), dmdircInfo.toString().trim()).execute();
    }
    //#FeedbackDialog.java:257: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.send()

    /** Validates the input. */
    private void validateInput() {
        if (feedback.getDocument().getLength() > 0) {
    //#FeedbackDialog.java:261: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.validateInput()
    //#input(void validateInput()): this
    //#input(void validateInput()): this.feedback
    //#pre[2] (void validateInput()): this.feedback != null
    //#presumption(void validateInput()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@262 != null
    //#presumption(void validateInput()): com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton(...)@264 != null
    //#presumption(void validateInput()): javax.swing.JTextArea:getDocument(...)@261 != null
    //#test_vector(void validateInput()): javax.swing.text.Document:getLength(...)@261: {-2_147_483_648..0}, {1..4_294_967_295}
            getOkButton().setEnabled(true);
    //#FeedbackDialog.java:262: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void validateInput()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
        } else {
            getOkButton().setEnabled(false);
    //#FeedbackDialog.java:264: Warning: method not available - call not analyzed
    //#    call on JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void validateInput()
    //#    unanalyzed callee: JButton com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton()
        }
    }
    //#FeedbackDialog.java:266: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.validateInput()

    /**
     * {@inheritDoc}
     *
     * @param e action event
     */
    @Override
    public void actionPerformed(final ActionEvent e) {
        if (e.getActionCommand().equals("Send")) {
    //#FeedbackDialog.java:275: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): " "._tainted
    //#input(void actionPerformed(ActionEvent)): " - "._tainted
    //#input(void actionPerformed(ActionEvent)): "&#10;"._tainted
    //#input(void actionPerformed(ActionEvent)): "Actual name: "._tainted
    //#input(void actionPerformed(ActionEvent)): "DMDirc version: "._tainted
    //#input(void actionPerformed(ActionEvent)): "IRCd: "._tainted
    //#input(void actionPerformed(ActionEvent)): "Java version: "._tainted
    //#input(void actionPerformed(ActionEvent)): "Look &amp; Feel: "._tainted
    //#input(void actionPerformed(ActionEvent)): "Modes: "._tainted
    //#input(void actionPerformed(ActionEvent)): "Network: "._tainted
    //#input(void actionPerformed(ActionEvent)): "OS Version: "._tainted
    //#input(void actionPerformed(ActionEvent)): "Profile directory: "._tainted
    //#input(void actionPerformed(ActionEvent)): "Server name: "._tainted
    //#input(void actionPerformed(ActionEvent)): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog]
    //#input(void actionPerformed(ActionEvent)): __Descendant_Table[others]
    //#input(void actionPerformed(ActionEvent)): __Dispatch_Table.dispose()V
    //#input(void actionPerformed(ActionEvent)): e
    //#input(void actionPerformed(ActionEvent)): me
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.DMDircCheckbox
    //#input(void actionPerformed(ActionEvent)): this.__Tag
    //#input(void actionPerformed(ActionEvent)): this.email
    //#input(void actionPerformed(ActionEvent)): this.feedback
    //#input(void actionPerformed(ActionEvent)): this.name
    //#input(void actionPerformed(ActionEvent)): this.serverCheckbox
    //#output(void actionPerformed(ActionEvent)): me
    //#pre[1] (void actionPerformed(ActionEvent)): e != null
    //#pre[3] (void actionPerformed(ActionEvent)): (soft) init'ed(me)
    //#pre[5] (void actionPerformed(ActionEvent)): (soft) this.DMDircCheckbox != null
    //#pre[6] (void actionPerformed(ActionEvent)): (soft) this.__Tag == com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog
    //#pre[7] (void actionPerformed(ActionEvent)): (soft) this.email != null
    //#pre[8] (void actionPerformed(ActionEvent)): (soft) this.feedback != null
    //#pre[9] (void actionPerformed(ActionEvent)): (soft) this.name != null
    //#pre[10] (void actionPerformed(ActionEvent)): (soft) this.serverCheckbox != null
    //#presumption(void actionPerformed(ActionEvent)): java.awt.event.ActionEvent:getActionCommand(...)@275 != null
    //#presumption(void actionPerformed(ActionEvent)): java.awt.event.ActionEvent:getActionCommand(...)@277 != null
    //#post(void actionPerformed(ActionEvent)): me == One-of{old me, null}
    //#post(void actionPerformed(ActionEvent)): init'ed(me)
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getCancelButton
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.ServerManager:getServerManager
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JCheckBox:isSelected
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.ServerManager:getServers
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.Server:getName
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.Server:getParser
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getServerName
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.Server:getNetwork
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getIRCD
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getBoolChanModes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getListChanModes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getSetOnlyChanModes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.parser.irc.IRCParser:getSetUnsetChanModes
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.ui.core.util.Info:getDMDircVersion
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.Main:getConfigDir
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.ui.core.util.Info:getJavaVersion
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.ui.core.util.Info:getOSVersion
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.SwingController:getLookAndFeel
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JTextField:getText
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:java.lang.String:trim
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.JTextArea:getText
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.LoggingSwingWorker
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.SendWorker:execute
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.StandardDialog:dispose
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.String:equals(...)@275: {0}, {1}
    //#test_vector(void actionPerformed(ActionEvent)): java.lang.String:equals(...)@277: {0}, {1}
            send();
        } else if (e.getActionCommand().equals("Close")) {
            dispose();
        }
    }
    //#FeedbackDialog.java:280: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.actionPerformed(ActionEvent)

    /** {@inheritDoc} */
    @Override
    public void insertUpdate(DocumentEvent e) {
        validateInput();
    //#FeedbackDialog.java:285: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.insertUpdate(DocumentEvent)
    //#input(void insertUpdate(DocumentEvent)): this
    //#input(void insertUpdate(DocumentEvent)): this.feedback
    //#pre[2] (void insertUpdate(DocumentEvent)): this.feedback != null
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JTextArea:getDocument
    //#unanalyzed(void insertUpdate(DocumentEvent)): Effects-of-calling:javax.swing.text.Document:getLength
    }
    //#FeedbackDialog.java:286: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.insertUpdate(DocumentEvent)

    /** {@inheritDoc} */
    @Override
    public void removeUpdate(DocumentEvent e) {
        validateInput();
    //#FeedbackDialog.java:291: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.removeUpdate(DocumentEvent)
    //#input(void removeUpdate(DocumentEvent)): this
    //#input(void removeUpdate(DocumentEvent)): this.feedback
    //#pre[2] (void removeUpdate(DocumentEvent)): this.feedback != null
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.JTextArea:getDocument
    //#unanalyzed(void removeUpdate(DocumentEvent)): Effects-of-calling:javax.swing.text.Document:getLength
    }
    //#FeedbackDialog.java:292: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.removeUpdate(DocumentEvent)

    /** {@inheritDoc} */
    @Override
    public void changedUpdate(DocumentEvent e) {
    //Ignore
    }
    //#FeedbackDialog.java:298: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.changedUpdate(DocumentEvent)
    //#FeedbackDialog.java:298: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.changedUpdate(DocumentEvent)

    /** {@inheritDoc} */
    @Override
    public void dispose() {
        if (me == null) {
    //#FeedbackDialog.java:303: method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.dispose()
    //#input(void dispose()): me
    //#input(void dispose()): me.__Lock
    //#input(void dispose()): this
    //#output(void dispose()): me
    //#pre[1] (void dispose()): init'ed(me)
    //#post(void dispose()): me == null
    //#test_vector(void dispose()): me: Inverse{null}, Addr_Set{null}
            return;
        }
        synchronized (me) {
            super.dispose();
    //#FeedbackDialog.java:307: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.StandardDialog:dispose()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
    //#    method: void dispose()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.StandardDialog:dispose()
            me = null;
        }
    }
    //#FeedbackDialog.java:310: end of method: void com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.dispose()
}

/**
 * Sends feedback worker thread.
 */
class SendWorker extends LoggingSwingWorker {

    /** Parent feedback dialog. */
    private FeedbackDialog dialog;
    /** Name. */
    private String name;
    /** Email. */
    private String email;
    /** Feedback. */
    private String feedback;
    /** Server name. */
    private String serverInfo;
    /** DMDirc Info. */
    private String dmdircInfo;
    /** Error/Success message. */
    private StringBuilder error;

    /**
     * Creates a new send worker to send feedback.
     *
     * @param dialog Parent feedback dialog
     * @param name Name
     * @param email Email
     * @param feedback Feedback
     */
    public SendWorker(FeedbackDialog dialog, String name, String email,
            String feedback) {
        this(dialog, name, email, feedback, "", "");
    //#FeedbackDialog.java:343: method: void com.dmdirc.addons.ui_swing.dialogs.SendWorker.com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): dialog
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): email
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): feedback
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): name
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): new StringBuilder(SendWorker#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): new StringBuilder(SendWorker#1)._tainted
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.dialog
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.dmdircInfo
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.email
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.error
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.feedback
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.serverInfo
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): new StringBuilder(SendWorker#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.dialog == dialog
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): init'ed(this.dialog)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.dmdircInfo == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.serverInfo == &""
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.email == email
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): init'ed(this.email)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.error == &new StringBuilder(SendWorker#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.feedback == feedback
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): init'ed(this.feedback)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): this.name == name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): init'ed(this.name)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): new StringBuilder(SendWorker#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): new StringBuilder(SendWorker#1)._tainted == 0
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): Effects-of-calling:com.dmdirc.addons.ui_swing.components.LoggingSwingWorker
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)): Effects-of-calling:java.lang.StringBuilder
    }
    //#FeedbackDialog.java:344: end of method: void com.dmdirc.addons.ui_swing.dialogs.SendWorker.com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String)

    /**
     * Creates a new send worker to send feedback.
     *
     * @param dialog Parent feedback dialog
     * @param name Name
     * @param email Email
     * @param feedback Feedback
     * @param serverInfo serverInfo
     * @param dmdircInfo DMDirc info
     */
    public SendWorker(final FeedbackDialog dialog, final String name,
            final String email, final String feedback,
            final String serverInfo, final String dmdircInfo) {
    //#FeedbackDialog.java:358: method: void com.dmdirc.addons.ui_swing.dialogs.SendWorker.com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)
    //#FeedbackDialog.java:358: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.LoggingSwingWorker()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.SendWorker
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.LoggingSwingWorker()
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): dialog
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): dmdircInfo
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): email
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): feedback
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): name
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): serverInfo
    //#input(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): new StringBuilder(SendWorker#1) num objects
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.error._tainted
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.dialog
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.dmdircInfo
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.email
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.error
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.feedback
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.name
    //#output(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.serverInfo
    //#new obj(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): new StringBuilder(SendWorker#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.dialog == dialog
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): init'ed(this.dialog)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.dmdircInfo == dmdircInfo
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): init'ed(this.dmdircInfo)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.email == email
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): init'ed(this.email)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.error == &new StringBuilder(SendWorker#1)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.feedback == feedback
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): init'ed(this.feedback)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.name == name
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): init'ed(this.name)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.serverInfo == serverInfo
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): init'ed(this.serverInfo)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): new StringBuilder(SendWorker#1) num objects == 1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)): this.error._tainted == 0
        this.dialog = dialog;
        this.name = name;
        this.email = email;
        this.feedback = feedback;
        this.serverInfo = serverInfo;
        this.dmdircInfo = dmdircInfo;

        error = new StringBuilder();
    }
    //#FeedbackDialog.java:367: end of method: void com.dmdirc.addons.ui_swing.dialogs.SendWorker.com.dmdirc.addons.ui_swing.dialogs.SendWorker(FeedbackDialog, String, String, String, String, String)

    /**
     * {@inheritDoc}
     *
     * @throws java.lang.Exception If unable to return a result
     */
    @Override
    protected Object doInBackground() throws Exception {
        final Map<String, String> postData =
    //#FeedbackDialog.java:376: method: Object com.dmdirc.addons.ui_swing.dialogs.SendWorker.doInBackground()
    //#input(Object doInBackground()): "&#10;"._tainted
    //#input(Object doInBackground()): "Failure: "._tainted
    //#input(Object doInBackground()): "Failure: Unknown response from the server."._tainted
    //#input(Object doInBackground()): "Malformed feedback URL."._tainted
    //#input(Object doInBackground()): this
    //#input(Object doInBackground()): this.dmdircInfo
    //#input(Object doInBackground()): this.email
    //#input(Object doInBackground()): this.error
    //#input(Object doInBackground()): this.error._tainted
    //#input(Object doInBackground()): this.feedback
    //#input(Object doInBackground()): this.name
    //#input(Object doInBackground()): this.serverInfo
    //#output(Object doInBackground()): return_value
    //#output(Object doInBackground()): this.error._tainted
    //#pre[3] (Object doInBackground()): this.dmdircInfo != null
    //#pre[4] (Object doInBackground()): this.email != null
    //#pre[6] (Object doInBackground()): this.feedback != null
    //#pre[7] (Object doInBackground()): this.name != null
    //#pre[8] (Object doInBackground()): this.serverInfo != null
    //#pre[5] (Object doInBackground()): (soft) this.error != null
    //#presumption(Object doInBackground()): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@388 != null
    //#presumption(Object doInBackground()): com.dmdirc.util.Downloader:getPage(...)@397 != null
    //#post(Object doInBackground()): return_value == this.error
    //#post(Object doInBackground()): return_value != null
    //#post(Object doInBackground()): init'ed(this.error._tainted)
    //#test_vector(Object doInBackground()): java.lang.String:isEmpty(...)@379: {1}, {0}
    //#test_vector(Object doInBackground()): java.lang.String:isEmpty(...)@382: {1}, {0}
    //#test_vector(Object doInBackground()): java.lang.String:isEmpty(...)@385: {1}, {0}
    //#test_vector(Object doInBackground()): java.lang.String:isEmpty(...)@389: {1}, {0}
    //#test_vector(Object doInBackground()): java.lang.String:isEmpty(...)@392: {1}, {0}
    //#test_vector(Object doInBackground()): java.util.List:size(...)@400: {-2_147_483_648..0}, {1..4_294_967_295}
                new HashMap<String, String>();

        if (!name.isEmpty()) {
            postData.put("name", name);
        }
        if (!email.isEmpty()) {
            postData.put("email", email);
        }
        if (!feedback.isEmpty()) {
            postData.put("feedback", feedback);
        }
        postData.put("version", IdentityManager.getGlobalConfig().getOption("version", "version"));
    //#FeedbackDialog.java:388: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.SendWorker
    //#    method: Object doInBackground()
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#FeedbackDialog.java:388: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.SendWorker
    //#    method: Object doInBackground()
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
        if (!serverInfo.isEmpty()) {
            postData.put("serverInfo", serverInfo);
        }
        if (!dmdircInfo.isEmpty()) {
            postData.put("dmdircInfo", dmdircInfo);
        }

        try {
            final List<String> response =
    //#FeedbackDialog.java:397: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.util.Downloader:getPage(String, Map)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.SendWorker
    //#    method: Object doInBackground()
    //#    unanalyzed callee: List com.dmdirc.util.Downloader:getPage(String, Map)
                    Downloader.getPage("http://www.dmdirc.com/feedback.php",
                    postData);
            if (response.size() >= 1) {
                for (String responseLine : response) {
                    error.append(responseLine).append("\n");
                }
            } else {
                error.append("Failure: Unknown response from the server.");
            }
        } catch (MalformedURLException ex) {
            error.append("Malformed feedback URL.");
        } catch (IOException ex) {
            error.append("Failure: " + ex.getMessage());
        }

        return error;
    //#FeedbackDialog.java:413: end of method: Object com.dmdirc.addons.ui_swing.dialogs.SendWorker.doInBackground()
    }

    /** {@inheritDoc} */
    @Override
    protected void done() {
        super.done();
    //#FeedbackDialog.java:419: method: void com.dmdirc.addons.ui_swing.dialogs.SendWorker.done()
    //#FeedbackDialog.java:419: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.components.LoggingSwingWorker:done()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.SendWorker
    //#    method: void done()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.components.LoggingSwingWorker:done()
    //#input(void done()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/components/text/TextLabel]
    //#input(void done()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Descendant_Table[others]
    //#input(void done()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.getDocument()Ljavax/swing/text/StyledDocument;
    //#input(void done()): com/dmdirc/addons/ui_swing/components/text/TextLabel.__Dispatch_Table.setText(Ljava/lang/String;)V
    //#input(void done()): com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog]
    //#input(void done()): com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog.__Descendant_Table[others]
    //#input(void done()): com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog.__Dispatch_Table.layoutComponents2(Ljava/lang/StringBuilder;)V
    //#input(void done()): this
    //#input(void done()): this.dialog
    //#input(void done()): this.dialog.__Tag
    //#input(void done()): this.dialog.info
    //#input(void done()): this.dialog.info.__Tag
    //#input(void done()): this.dialog.info.sas
    //#input(void done()): this.error
    //#input(void done()): this.error._tainted
    //#pre[2] (void done()): this.dialog != null
    //#pre[3] (void done()): this.dialog.__Tag == com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog
    //#pre[4] (void done()): this.dialog.info != null
    //#pre[7] (void done()): this.error != null
    //#pre[5] (void done()): (soft) this.dialog.info.__Tag == com/dmdirc/addons/ui_swing/components/text/TextLabel
    //#pre[6] (void done()): (soft) init'ed(this.dialog.info.sas)
    //#unanalyzed(void done()): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getOkButton
    //#unanalyzed(void done()): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void done()): Effects-of-calling:javax.swing.JButton:setActionCommand
    //#unanalyzed(void done()): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void done()): Effects-of-calling:javax.swing.JTextPane:getDocument
    //#unanalyzed(void done()): Effects-of-calling:javax.swing.JTextPane:setText
    //#unanalyzed(void done()): Effects-of-calling:java.lang.String:isEmpty
    //#unanalyzed(void done()): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void done()): Effects-of-calling:javax.swing.text.StyledDocument:setParagraphAttributes
    //#unanalyzed(void done()): Effects-of-calling:net.miginfocom.swing.MigLayout
    //#unanalyzed(void done()): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:setLayout
    //#unanalyzed(void done()): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:add
    //#unanalyzed(void done()): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(void done()): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog:getContentPane
    //#unanalyzed(void done()): Effects-of-calling:java.awt.Container:setVisible
    //#unanalyzed(void done()): Effects-of-calling:java.awt.Container:removeAll
        dialog.layoutComponents2(error);
    }
    //#FeedbackDialog.java:421: end of method: void com.dmdirc.addons.ui_swing.dialogs.SendWorker.done()
}
    //#output(com.dmdirc.addons.ui_swing.dialogs.SendWorker__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/SendWorker]
    //#output(com.dmdirc.addons.ui_swing.dialogs.SendWorker__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object;
    //#output(com.dmdirc.addons.ui_swing.dialogs.SendWorker__static_init): __Dispatch_Table.done()V
    //#post(com.dmdirc.addons.ui_swing.dialogs.SendWorker__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/SendWorker] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.SendWorker__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object; == &doInBackground
    //#post(com.dmdirc.addons.ui_swing.dialogs.SendWorker__static_init): __Dispatch_Table.done()V == &done
    //#FeedbackDialog.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.SendWorker.com.dmdirc.addons.ui_swing.dialogs.SendWorker__static_init
    //#FeedbackDialog.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.SendWorker
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog]
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.addListeners()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.changedUpdate(Ljavax/swing/event/DocumentEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.dispose()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.initComponents()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.insertUpdate(Ljavax/swing/event/DocumentEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.layoutComponents()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.layoutComponents2(Ljava/lang/StringBuilder;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.removeUpdate(Ljavax/swing/event/DocumentEvent;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.send()V
    //#output(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.validateInput()V
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/FeedbackDialog] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.addListeners()V == &addListeners
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.changedUpdate(Ljavax/swing/event/DocumentEvent;)V == &changedUpdate
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.dispose()V == &dispose
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.initComponents()V == &initComponents
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.insertUpdate(Ljavax/swing/event/DocumentEvent;)V == &insertUpdate
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.layoutComponents()V == &layoutComponents
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.layoutComponents2(Ljava/lang/StringBuilder;)V == &layoutComponents2
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.removeUpdate(Ljavax/swing/event/DocumentEvent;)V == &removeUpdate
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.send()V == &send
    //#post(com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init): __Dispatch_Table.validateInput()V == &validateInput
    //#FeedbackDialog.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog.com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog__static_init
    //#FeedbackDialog.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.FeedbackDialog
