//# 0 errors, 485 messages
//#
/*
    //#FatalErrorDialog.java:1:1: class: com.dmdirc.ui.FatalErrorDialog$4
    //#FatalErrorDialog.java:1:1: class: com.dmdirc.ui.FatalErrorDialog$3$1
    //#FatalErrorDialog.java:1:1: method: com.dmdirc.ui.FatalErrorDialog$3$1.com.dmdirc.ui.FatalErrorDialog$3$1__static_init
    //#FatalErrorDialog.java:1:1: class: com.dmdirc.ui.FatalErrorDialog$3
    //#FatalErrorDialog.java:1:1: method: com.dmdirc.ui.FatalErrorDialog$3.com.dmdirc.ui.FatalErrorDialog$3__static_init
    //#FatalErrorDialog.java:1:1: class: com.dmdirc.ui.FatalErrorDialog$2
    //#FatalErrorDialog.java:1:1: method: com.dmdirc.ui.FatalErrorDialog$2.com.dmdirc.ui.FatalErrorDialog$2__static_init
    //#FatalErrorDialog.java:1:1: class: com.dmdirc.ui.FatalErrorDialog$1
    //#FatalErrorDialog.java:1:1: method: com.dmdirc.ui.FatalErrorDialog$1.com.dmdirc.ui.FatalErrorDialog$1__static_init
    //#FatalErrorDialog.java:1:1: class: com.dmdirc.ui.FatalErrorDialog
    //#FatalErrorDialog.java:1:1: method: com.dmdirc.ui.FatalErrorDialog.com.dmdirc.ui.FatalErrorDialog__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.ui;

import com.dmdirc.logger.ErrorListener;
import com.dmdirc.logger.ErrorManager;
import com.dmdirc.logger.ErrorReportStatus;
import com.dmdirc.logger.ProgramError;

import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import java.util.concurrent.Semaphore;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.WindowConstants;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;

/**
 * The fatal error dialog is used to inform the user that a fatal error has
 * occured.
 */
public final class FatalErrorDialog extends JDialog implements ActionListener,
    //#FatalErrorDialog.java:61: method: ProgramError com.dmdirc.ui.FatalErrorDialog.access$000(FatalErrorDialog)
    //#input(ProgramError access$000(FatalErrorDialog)): x0
    //#input(ProgramError access$000(FatalErrorDialog)): x0.error
    //#output(ProgramError access$000(FatalErrorDialog)): return_value
    //#pre[1] (ProgramError access$000(FatalErrorDialog)): x0 != null
    //#post(ProgramError access$000(FatalErrorDialog)): return_value == x0.error
    //#post(ProgramError access$000(FatalErrorDialog)): init'ed(return_value)
    //#FatalErrorDialog.java:61: end of method: ProgramError com.dmdirc.ui.FatalErrorDialog.access$000(FatalErrorDialog)
    //#FatalErrorDialog.java:61: method: void com.dmdirc.ui.FatalErrorDialog.com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).errorListeners
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): com/dmdirc/logger/ErrorManager.me
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): java.awt.Dialog$ModalityType.TOOLKIT_MODAL
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): this
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): x0
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): this.error
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): this.icon
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): this.infoLabel
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): this.messageLabel
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): this.okButton
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): this.scrollPane
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): this.sendButton
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): this.error == x0
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): init'ed(this.error)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): init'ed(this.icon)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): init'ed(this.infoLabel)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): init'ed(this.messageLabel)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): init'ed(this.okButton)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): init'ed(this.scrollPane)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): init'ed(this.sendButton)
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.BorderLayout
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.JPanel:setLayout
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.BoxLayout
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.JPanel:add
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.Box:createHorizontalGlue
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.Box:createHorizontalStrut
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.BorderFactory:createEmptyBorder
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.JPanel:setBorder
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:getContentPane
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.Dimension
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setSize
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:javax.swing.JDialog
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setModal
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:initComponents
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:getErrorManager
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:addErrorListener
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setResizable
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.MouseInfo:getPointerInfo
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.PointerInfo:getDevice
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.GraphicsDevice:getDefaultConfiguration
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.GraphicsConfiguration:getBounds
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.Window:getWidth
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.Window:getHeight
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.awt.Window:setLocation
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)): Effects-of-calling:com.dmdirc.util.ListenerList:add
    //#FatalErrorDialog.java:61: end of method: void com.dmdirc.ui.FatalErrorDialog.com.dmdirc.ui.FatalErrorDialog(ProgramError, FatalErrorDialog$1)
        ErrorListener {

    /**
     * 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 = 3;
    /** error. */
    private final ProgramError error;
    /** button. */
    private JButton okButton;
    /** button. */
    private JButton sendButton;
    /** info label. */
    private JTextPane infoLabel;
    /** message label. */
    private JTextPane messageLabel;
    /** Icon. */
    private ImageIcon icon;
    /** stack trace scroll pane. */
    private JScrollPane scrollPane;

    /**
     * Creates a new fatal error dialog.
     *
     * @param error Error
     */
    private FatalErrorDialog(final ProgramError error) {
        super(null, Dialog.ModalityType.TOOLKIT_MODAL);
    //#FatalErrorDialog.java:91: method: void com.dmdirc.ui.FatalErrorDialog.com.dmdirc.ui.FatalErrorDialog(ProgramError)
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).errorListeners
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): com/dmdirc/logger/ErrorManager.me
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): error
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): java.awt.Dialog$ModalityType.TOOLKIT_MODAL
    //#input(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): this
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): this.error
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): this.icon
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): this.infoLabel
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): this.messageLabel
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): this.okButton
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): this.scrollPane
    //#output(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): this.sendButton
    //#presumption(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): getErrorManager(...)@100 init'ed
    //#presumption(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): init'ed(java.awt.Dialog$ModalityType.TOOLKIT_MODAL)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): this.error == error
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): init'ed(this.error)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): init'ed(this.icon)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): init'ed(this.infoLabel)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): init'ed(this.messageLabel)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): init'ed(this.okButton)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): init'ed(this.scrollPane)
    //#post(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): init'ed(this.sendButton)
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.BorderLayout
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:javax.swing.JPanel:setLayout
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:javax.swing.BoxLayout
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:javax.swing.JPanel:add
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:javax.swing.Box:createHorizontalGlue
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:javax.swing.Box:createHorizontalStrut
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:javax.swing.BorderFactory:createEmptyBorder
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:javax.swing.JPanel:setBorder
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:getContentPane
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.Dimension
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setSize
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.MouseInfo:getPointerInfo
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.PointerInfo:getDevice
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.GraphicsDevice:getDefaultConfiguration
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.GraphicsConfiguration:getBounds
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.Window:getWidth
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.Window:getHeight
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.awt.Window:setLocation
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void com.dmdirc.ui.FatalErrorDialog(ProgramError)): Effects-of-calling:com.dmdirc.util.ListenerList:add

        setModal(true);
    //#FatalErrorDialog.java:93: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.FatalErrorDialog:setModal(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog
    //#    method: void com.dmdirc.ui.FatalErrorDialog(ProgramError)
    //#    unanalyzed callee: void com.dmdirc.ui.FatalErrorDialog:setModal(bool)

        this.error = error;

        initComponents();
    //#FatalErrorDialog.java:97: Warning: method not available - call not analyzed
    //#    call on void initComponents()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog
    //#    method: void com.dmdirc.ui.FatalErrorDialog(ProgramError)
    //#    unanalyzed callee: void initComponents()
        layoutComponents();
        
        ErrorManager.getErrorManager().addErrorListener(this);
        
        setResizable(false);
    //#FatalErrorDialog.java:102: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.FatalErrorDialog:setResizable(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog
    //#    method: void com.dmdirc.ui.FatalErrorDialog(ProgramError)
    //#    unanalyzed callee: void com.dmdirc.ui.FatalErrorDialog:setResizable(bool)
        CoreUIUtils.centreWindow(this);
    }
    //#FatalErrorDialog.java:104: end of method: void com.dmdirc.ui.FatalErrorDialog.com.dmdirc.ui.FatalErrorDialog(ProgramError)

    /**
     * Initialises the components for this dialog.
     */
    private void initComponents() {
        final JTextArea stacktraceField = new JTextArea();
    //#FatalErrorDialog.java:110: method: void com.dmdirc.ui.FatalErrorDialog.initComponents()

        infoLabel = new JTextPane(new DefaultStyledDocument());
        infoLabel.setOpaque(false);
        infoLabel.setEditable(false);
        infoLabel.setHighlighter(null);
        messageLabel = new JTextPane(new DefaultStyledDocument());
        messageLabel.setOpaque(false);
        messageLabel.setEditable(false);
        messageLabel.setHighlighter(null);
        final SimpleAttributeSet sas = new SimpleAttributeSet();
        StyleConstants.setAlignment(sas, StyleConstants.ALIGN_JUSTIFIED);

        scrollPane = new JScrollPane();
        okButton = new JButton();
        sendButton = new JButton();

        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("DMDirc: Fatal Error");
        setIconImage(IconManager.getIconManager().getImage("icon"));

        infoLabel.setText("DMDirc has encountered a fatal error, and is " +
                "not able to recover. \nThe application will now terminate.");
        messageLabel.setText("Description: " + error.getMessage());
        ((StyledDocument) infoLabel.getDocument()).setParagraphAttributes(0,
                infoLabel.getText().length(), sas, false);
        ((StyledDocument) messageLabel.getDocument()).setParagraphAttributes(0,
                messageLabel.getText().length(), sas, false);

        icon = new ImageIcon(IconManager.getIconManager().getImage("error"));

        stacktraceField.setEditable(false);

        final String[] trace = error.getTrace();
        if (trace.length > 0) {
            for (String line : trace) {
                stacktraceField.append(line + "\n");
            }
            stacktraceField.setCaretPosition(0);
        }

        scrollPane.setViewportView(stacktraceField);

        okButton.setText("OK");
        sendButton.setText("Send");

        final ErrorReportStatus status = error.getReportStatus();
        okButton.setEnabled(status.isTerminal());
        updateSendButtonText(status);

        okButton.addActionListener(this);
        sendButton.addActionListener(this);
    }
    //#FatalErrorDialog.java:162: end of method: void com.dmdirc.ui.FatalErrorDialog.initComponents()

    /**
     * lays the components out in the dialog.
     */
    private void layoutComponents() {
        final JPanel panel = new JPanel();
    //#FatalErrorDialog.java:168: method: void com.dmdirc.ui.FatalErrorDialog.layoutComponents()
    //#input(void layoutComponents()): this
    //#input(void layoutComponents()): this.icon
    //#input(void layoutComponents()): this.infoLabel
    //#input(void layoutComponents()): this.messageLabel
    //#input(void layoutComponents()): this.okButton
    //#input(void layoutComponents()): this.scrollPane
    //#input(void layoutComponents()): this.sendButton
    //#pre[2] (void layoutComponents()): init'ed(this.icon)
    //#pre[3] (void layoutComponents()): init'ed(this.infoLabel)
    //#pre[4] (void layoutComponents()): init'ed(this.messageLabel)
    //#pre[5] (void layoutComponents()): init'ed(this.okButton)
    //#pre[6] (void layoutComponents()): init'ed(this.scrollPane)
    //#pre[7] (void layoutComponents()): init'ed(this.sendButton)
    //#presumption(void layoutComponents()): com.dmdirc.ui.FatalErrorDialog:getContentPane(...)@193 != null
        final JPanel blurb = new JPanel();
        final JPanel info = new JPanel();
        final JPanel buttons = new JPanel();
        blurb.setLayout(new BorderLayout(5, 5));
        info.setLayout(new BorderLayout(5, 5));
        buttons.setLayout(new BoxLayout(buttons, BoxLayout.LINE_AXIS));

        blurb.add(new JLabel(icon), BorderLayout.LINE_START);
        blurb.add(infoLabel, BorderLayout.CENTER);

        info.add(messageLabel, BorderLayout.NORTH);
        info.add(scrollPane, BorderLayout.CENTER);

        buttons.add(Box.createHorizontalGlue());
        buttons.add(sendButton);
        buttons.add(Box.createHorizontalStrut(5));
        buttons.add(okButton);

        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
        panel.setLayout(new BorderLayout(5, 5));
        panel.add(blurb, BorderLayout.NORTH);
        panel.add(info, BorderLayout.CENTER);
        panel.add(buttons, BorderLayout.SOUTH);

        getContentPane().add(panel);
    //#FatalErrorDialog.java:193: Warning: method not available - call not analyzed
    //#    call on Container com.dmdirc.ui.FatalErrorDialog:getContentPane()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: Container com.dmdirc.ui.FatalErrorDialog:getContentPane()

        setSize(new Dimension(550, 260));
    //#FatalErrorDialog.java:195: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.FatalErrorDialog:setSize(Dimension)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog
    //#    method: void layoutComponents()
    //#    unanalyzed callee: void com.dmdirc.ui.FatalErrorDialog:setSize(Dimension)
    }
    //#FatalErrorDialog.java:196: end of method: void com.dmdirc.ui.FatalErrorDialog.layoutComponents()

    /**
     * Exits the program. {@inheritDoc}
     * 
     * @param actionEvent Action event.
     */
    @Override
    public void actionPerformed(final ActionEvent actionEvent) {
        if (actionEvent.getSource() == sendButton) {
    //#FatalErrorDialog.java:205: method: void com.dmdirc.ui.FatalErrorDialog.actionPerformed(ActionEvent)
    //#input(void actionPerformed(ActionEvent)): actionEvent
    //#input(void actionPerformed(ActionEvent)): this
    //#input(void actionPerformed(ActionEvent)): this.okButton
    //#input(void actionPerformed(ActionEvent)): this.sendButton
    //#pre[1] (void actionPerformed(ActionEvent)): actionEvent != null
    //#pre[3] (void actionPerformed(ActionEvent)): (soft) this.okButton != null
    //#pre[4] (void actionPerformed(ActionEvent)): (soft) this.sendButton != null
    //#unanalyzed(void actionPerformed(ActionEvent)): Effects-of-calling:javax.swing.SwingWorker
            sendButton.setText("Sending...");
            okButton.setEnabled(false);
            sendButton.setEnabled(false);
            new SwingWorker() {
    //#FatalErrorDialog.java:209: method: void com.dmdirc.ui.FatalErrorDialog$1.com.dmdirc.ui.FatalErrorDialog$1(FatalErrorDialog)
    //#input(void com.dmdirc.ui.FatalErrorDialog$1(FatalErrorDialog)): Param_1
    //#input(void com.dmdirc.ui.FatalErrorDialog$1(FatalErrorDialog)): this
    //#output(void com.dmdirc.ui.FatalErrorDialog$1(FatalErrorDialog)): this.this$0
    //#post(void com.dmdirc.ui.FatalErrorDialog$1(FatalErrorDialog)): this.this$0 == Param_1
    //#post(void com.dmdirc.ui.FatalErrorDialog$1(FatalErrorDialog)): init'ed(this.this$0)
    //#FatalErrorDialog.java:209: end of method: void com.dmdirc.ui.FatalErrorDialog$1.com.dmdirc.ui.FatalErrorDialog$1(FatalErrorDialog)
    //#FatalErrorDialog.java:209: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.FatalErrorDialog$1:execute()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.ui.FatalErrorDialog$1:execute()

                /** {@inheritDoc} */
                @Override
                protected Object doInBackground() throws Exception {
                    ErrorManager.getErrorManager().sendError(error);
    //#FatalErrorDialog.java:214: method: Object com.dmdirc.ui.FatalErrorDialog$1.doInBackground()
    //#input(Object doInBackground()): com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).errorListeners
    //#input(Object doInBackground()): com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).reportQueue
    //#input(Object doInBackground()): com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).reportThread
    //#input(Object doInBackground()): com.dmdirc.logger.ErrorReportStatus__static_init.new ErrorReportStatus(ErrorReportStatus__static_init#5).terminal
    //#input(Object doInBackground()): com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1).length
    //#input(Object doInBackground()): com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1)[0..4_294_967_295]
    //#input(Object doInBackground()): com/dmdirc/logger/ErrorListener.__Descendant_Table[com/dmdirc/logger/ErrorListener]
    //#input(Object doInBackground()): com/dmdirc/logger/ErrorListener.__Descendant_Table[com/dmdirc/ui/FatalErrorDialog]
    //#input(Object doInBackground()): com/dmdirc/logger/ErrorListener.__Descendant_Table[others]
    //#input(Object doInBackground()): com/dmdirc/logger/ErrorListener.__Dispatch_Table.errorStatusChanged(Lcom/dmdirc/logger/ProgramError;)V
    //#input(Object doInBackground()): com/dmdirc/logger/ErrorManager.me
    //#input(Object doInBackground()): com/dmdirc/logger/ErrorReportStatus.ERROR
    //#input(Object doInBackground()): com/dmdirc/logger/ErrorReportStatus.QUEUED
    //#input(Object doInBackground()): com/dmdirc/logger/ErrorReportStatus.WAITING
    //#input(Object doInBackground()): com/dmdirc/logger/ProgramError.__Descendant_Table[com/dmdirc/logger/ProgramError]
    //#input(Object doInBackground()): com/dmdirc/logger/ProgramError.__Descendant_Table[others]
    //#input(Object doInBackground()): com/dmdirc/ui/FatalErrorDialog$4.$SwitchMap$com$dmdirc$logger$ErrorReportStatus
    //#input(Object doInBackground()): com/dmdirc/ui/FatalErrorDialog.__Dispatch_Table.errorStatusChanged(Lcom/dmdirc/logger/ProgramError;)V
    //#input(Object doInBackground()): this
    //#input(Object doInBackground()): this.this$0
    //#input(Object doInBackground()): this.this$0.error
    //#input(Object doInBackground()): this.this$0.error.__Tag
    //#input(Object doInBackground()): this.this$0.error.level
    //#input(Object doInBackground()): this.this$0.error.message
    //#input(Object doInBackground()): this.this$0.error.reportStatus
    //#input(Object doInBackground()): this.this$0.error.reportStatus.terminal
    //#input(Object doInBackground()): this.this$0.error.trace
    //#output(Object doInBackground()): com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).reportThread
    //#output(Object doInBackground()): new ErrorReportingThread(sendError#1) num objects
    //#output(Object doInBackground()): new ErrorReportingThread(sendError#1).__Tag
    //#output(Object doInBackground()): new ErrorReportingThread(sendError#1).queue
    //#output(Object doInBackground()): return_value
    //#output(Object doInBackground()): this.this$0.error.reportStatus
    //#new obj(Object doInBackground()): new ErrorReportingThread(sendError#1)
    //#pre[4] (Object doInBackground()): init'ed(this.error.reportStatus)
    //#pre[6] (Object doInBackground()): this.this$0 != null
    //#pre[7] (Object doInBackground()): this.error != null
    //#pre[2] (Object doInBackground()): (soft) init'ed(com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1)[0..4_294_967_295])
    //#pre[3] (Object doInBackground()): (soft) init'ed(com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).reportThread)
    //#pre[9] (Object doInBackground()): (soft) this.error.__Tag == com/dmdirc/logger/ProgramError
    //#post(Object doInBackground()): return_value == null
    //#post(Object doInBackground()): this.error.reportStatus == One-of{old this.error.reportStatus, &com.dmdirc.logger.ErrorReportStatus__static_init.new ErrorReportStatus(ErrorReportStatus__static_init#5)}
    //#post(Object doInBackground()): init'ed(this.error.reportStatus)
    //#post(Object doInBackground()): com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).reportThread == One-of{old com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).reportThread, &new ErrorReportingThread(sendError#1)}
    //#post(Object doInBackground()): init'ed(com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).reportThread)
    //#post(Object doInBackground()): new ErrorReportingThread(sendError#1) num objects <= 1
    //#post(Object doInBackground()): new ErrorReportingThread(sendError#1).__Tag == com/dmdirc/logger/ErrorReportingThread
    //#post(Object doInBackground()): new ErrorReportingThread(sendError#1).queue == &com.dmdirc.logger.ErrorManager.new LinkedBlockingQueue(ErrorManager#1)
    //#unanalyzed(Object doInBackground()): Effects-of-calling:getErrorManager
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(Object doInBackground()): Effects-of-calling:com.dmdirc.logger.ErrorReportStatus:equals
    //#unanalyzed(Object doInBackground()): Effects-of-calling:fireErrorStatusChanged
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.lang.Object:notifyAll
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.util.concurrent.BlockingQueue:add
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.lang.Thread:isAlive
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.lang.Thread
    //#unanalyzed(Object doInBackground()): Effects-of-calling:com.dmdirc.logger.ErrorReportingThread:setDaemon
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.lang.Thread:start
    //#unanalyzed(Object doInBackground()): Effects-of-calling:com.dmdirc.util.ListenerList:get
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(Object doInBackground()): Effects-of-calling:com.dmdirc.logger.ErrorReportStatus:ordinal
    //#unanalyzed(Object doInBackground()): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(Object doInBackground()): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(Object doInBackground()): Effects-of-calling:equals
    //#unanalyzed(Object doInBackground()): Effects-of-calling:getReportStatus
    //#unanalyzed(Object doInBackground()): Effects-of-calling:errorStatusChanged
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(Object doInBackground()): Effects-of-calling:java.util.Arrays:equals
                    return null;
    //#FatalErrorDialog.java:215: end of method: Object com.dmdirc.ui.FatalErrorDialog$1.doInBackground()
                }

                /** {@inheritDoc} */
                @Override
                protected void done() {
                    super.done();
    //#FatalErrorDialog.java:221: method: void com.dmdirc.ui.FatalErrorDialog$1.done()
    //#input(void done()): this
                }
    //#FatalErrorDialog.java:222: end of method: void com.dmdirc.ui.FatalErrorDialog$1.done()
            }.execute();
        } else {
            dispose();
    //#FatalErrorDialog.java:225: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.FatalErrorDialog:dispose()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog
    //#    method: void actionPerformed(ActionEvent)
    //#    unanalyzed callee: void com.dmdirc.ui.FatalErrorDialog:dispose()
        }
    }
    //#FatalErrorDialog.java:227: end of method: void com.dmdirc.ui.FatalErrorDialog.actionPerformed(ActionEvent)

    /**
     * Static method to instantiate and display the dialog.
     *
     * @param error Program error
     */
    public static void display(final ProgramError error) {
        SwingUtilities.invokeLater(new Runnable() {
    //#FatalErrorDialog.java:235: method: void com.dmdirc.ui.FatalErrorDialog$2.com.dmdirc.ui.FatalErrorDialog$2(ProgramError)
    //#input(void com.dmdirc.ui.FatalErrorDialog$2(ProgramError)): Param_1
    //#input(void com.dmdirc.ui.FatalErrorDialog$2(ProgramError)): this
    //#output(void com.dmdirc.ui.FatalErrorDialog$2(ProgramError)): this.val$error
    //#post(void com.dmdirc.ui.FatalErrorDialog$2(ProgramError)): this.val$error == Param_1
    //#post(void com.dmdirc.ui.FatalErrorDialog$2(ProgramError)): init'ed(this.val$error)
    //#FatalErrorDialog.java:235: end of method: void com.dmdirc.ui.FatalErrorDialog$2.com.dmdirc.ui.FatalErrorDialog$2(ProgramError)
    //#FatalErrorDialog.java:235: method: void com.dmdirc.ui.FatalErrorDialog.display(ProgramError)
    //#input(void display(ProgramError)): error

            /** {@inheritDoc} */
            @Override
            public void run() {
                final FatalErrorDialog me = new FatalErrorDialog(error);
    //#FatalErrorDialog.java:240: method: void com.dmdirc.ui.FatalErrorDialog$2.run()
    //#input(void run()): com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).errorListeners
    //#input(void run()): com/dmdirc/logger/ErrorManager.me
    //#input(void run()): com/dmdirc/ui/FatalErrorDialog.java.awt.Dialog$ModalityType.TOOLKIT_MODAL
    //#input(void run()): this
    //#input(void run()): this.val$error
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void run()): Effects-of-calling:java.awt.BorderLayout
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JPanel:setLayout
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.BoxLayout
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JPanel:add
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.Box:createHorizontalGlue
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.Box:createHorizontalStrut
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.BorderFactory:createEmptyBorder
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JPanel:setBorder
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:getContentPane
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Dimension
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setSize
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JDialog
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setModal
    //#unanalyzed(void run()): Effects-of-calling:initComponents
    //#unanalyzed(void run()): Effects-of-calling:getErrorManager
    //#unanalyzed(void run()): Effects-of-calling:addErrorListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setResizable
    //#unanalyzed(void run()): Effects-of-calling:java.awt.MouseInfo:getPointerInfo
    //#unanalyzed(void run()): Effects-of-calling:java.awt.PointerInfo:getDevice
    //#unanalyzed(void run()): Effects-of-calling:java.awt.GraphicsDevice:getDefaultConfiguration
    //#unanalyzed(void run()): Effects-of-calling:java.awt.GraphicsConfiguration:getBounds
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Window:getWidth
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Window:getHeight
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Window:setLocation
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ListenerList:add
                me.setVisible(true);
    //#FatalErrorDialog.java:241: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.FatalErrorDialog:setVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog$2
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.ui.FatalErrorDialog:setVisible(bool)
            }
    //#FatalErrorDialog.java:242: end of method: void com.dmdirc.ui.FatalErrorDialog$2.run()
        });
    }
    //#FatalErrorDialog.java:244: end of method: void com.dmdirc.ui.FatalErrorDialog.display(ProgramError)

    /**
     * Static method to instantiate and display the dialog, blocking until it
     * is closed.
     * 
     * @param error Program error
     */
    public static void displayBlocking(final ProgramError error) {
        final Semaphore semaphore = new Semaphore(0);
    //#FatalErrorDialog.java:253: method: void com.dmdirc.ui.FatalErrorDialog.displayBlocking(ProgramError)
    //#input(void displayBlocking(ProgramError)): error
        SwingUtilities.invokeLater(new Runnable() {
    //#FatalErrorDialog.java:254: method: void com.dmdirc.ui.FatalErrorDialog$3.com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)
    //#input(void com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)): Param_1
    //#input(void com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)): Param_2
    //#input(void com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)): this
    //#output(void com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)): this.val$error
    //#output(void com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)): this.val$semaphore
    //#post(void com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)): this.val$error == Param_1
    //#post(void com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)): init'ed(this.val$error)
    //#post(void com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)): this.val$semaphore == Param_2
    //#post(void com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)): init'ed(this.val$semaphore)
    //#FatalErrorDialog.java:254: end of method: void com.dmdirc.ui.FatalErrorDialog$3.com.dmdirc.ui.FatalErrorDialog$3(ProgramError, Semaphore)

            /** {@inheritDoc} */
            @Override
            public void run() {
                final FatalErrorDialog me = new FatalErrorDialog(error);
    //#FatalErrorDialog.java:259: method: void com.dmdirc.ui.FatalErrorDialog$3.run()
    //#input(void run()): com.dmdirc.logger.ErrorManager__static_init.new ErrorManager(ErrorManager__static_init#1).errorListeners
    //#input(void run()): com/dmdirc/logger/ErrorManager.me
    //#input(void run()): com/dmdirc/ui/FatalErrorDialog.java.awt.Dialog$ModalityType.TOOLKIT_MODAL
    //#input(void run()): this
    //#input(void run()): this.val$error
    //#unanalyzed(void run()): Effects-of-calling:java.awt.event.WindowAdapter
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JPanel
    //#unanalyzed(void run()): Effects-of-calling:java.awt.BorderLayout
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JPanel:setLayout
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.BoxLayout
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JLabel
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JPanel:add
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.Box:createHorizontalGlue
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.Box:createHorizontalStrut
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.BorderFactory:createEmptyBorder
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JPanel:setBorder
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:getContentPane
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Container:add
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Dimension
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setSize
    //#unanalyzed(void run()): Effects-of-calling:javax.swing.JDialog
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setModal
    //#unanalyzed(void run()): Effects-of-calling:initComponents
    //#unanalyzed(void run()): Effects-of-calling:getErrorManager
    //#unanalyzed(void run()): Effects-of-calling:addErrorListener
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.ui.FatalErrorDialog:setResizable
    //#unanalyzed(void run()): Effects-of-calling:java.awt.MouseInfo:getPointerInfo
    //#unanalyzed(void run()): Effects-of-calling:java.awt.PointerInfo:getDevice
    //#unanalyzed(void run()): Effects-of-calling:java.awt.GraphicsDevice:getDefaultConfiguration
    //#unanalyzed(void run()): Effects-of-calling:java.awt.GraphicsConfiguration:getBounds
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Window:getWidth
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Window:getHeight
    //#unanalyzed(void run()): Effects-of-calling:java.awt.Window:setLocation
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.util.ListenerList:add
                me.addWindowListener(new WindowAdapter() {
    //#FatalErrorDialog.java:260: method: void com.dmdirc.ui.FatalErrorDialog$3$1.com.dmdirc.ui.FatalErrorDialog$3$1(FatalErrorDialog$3)
    //#input(void com.dmdirc.ui.FatalErrorDialog$3$1(FatalErrorDialog$3)): Param_1
    //#input(void com.dmdirc.ui.FatalErrorDialog$3$1(FatalErrorDialog$3)): this
    //#output(void com.dmdirc.ui.FatalErrorDialog$3$1(FatalErrorDialog$3)): this.this$0
    //#post(void com.dmdirc.ui.FatalErrorDialog$3$1(FatalErrorDialog$3)): this.this$0 == Param_1
    //#post(void com.dmdirc.ui.FatalErrorDialog$3$1(FatalErrorDialog$3)): init'ed(this.this$0)
    //#FatalErrorDialog.java:260: end of method: void com.dmdirc.ui.FatalErrorDialog$3$1.com.dmdirc.ui.FatalErrorDialog$3$1(FatalErrorDialog$3)
    //#FatalErrorDialog.java:260: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.FatalErrorDialog:addWindowListener(WindowListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog$3
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.ui.FatalErrorDialog:addWindowListener(WindowListener)

                    @Override
                    public void windowClosed(final WindowEvent e) {
                        semaphore.release();
    //#FatalErrorDialog.java:264: method: void com.dmdirc.ui.FatalErrorDialog$3$1.windowClosed(WindowEvent)
    //#input(void windowClosed(WindowEvent)): this
    //#input(void windowClosed(WindowEvent)): this.this$0
    //#input(void windowClosed(WindowEvent)): this.this$0.val$semaphore
    //#pre[2] (void windowClosed(WindowEvent)): this.this$0 != null
    //#pre[3] (void windowClosed(WindowEvent)): this.val$semaphore != null
                    }
    //#FatalErrorDialog.java:265: end of method: void com.dmdirc.ui.FatalErrorDialog$3$1.windowClosed(WindowEvent)
                });
                me.setVisible(true);
    //#FatalErrorDialog.java:267: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.FatalErrorDialog:setVisible(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog$3
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.ui.FatalErrorDialog:setVisible(bool)
            }
    //#FatalErrorDialog.java:268: end of method: void com.dmdirc.ui.FatalErrorDialog$3.run()
        });
        semaphore.acquireUninterruptibly();
    }
    //#FatalErrorDialog.java:271: end of method: void com.dmdirc.ui.FatalErrorDialog.displayBlocking(ProgramError)

    private void updateSendButtonText(final ErrorReportStatus status) {
        switch (status) {
    //#FatalErrorDialog.java:274: method: com.dmdirc.ui.FatalErrorDialog$4.com.dmdirc.ui.FatalErrorDialog$4__static_init
    //#FatalErrorDialog.java:274: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.logger.ErrorReportStatus:ordinal()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog$4
    //#    method: com.dmdirc.ui.FatalErrorDialog$4__static_init
    //#    unanalyzed callee: int com.dmdirc.logger.ErrorReportStatus:ordinal()
    //#input(com.dmdirc.ui.FatalErrorDialog$4__static_init): com.dmdirc.logger.ErrorReportStatus__static_init.new ErrorReportStatus[](ErrorReportStatus__static_init#7).length
    //#input(com.dmdirc.ui.FatalErrorDialog$4__static_init): com.dmdirc.logger.ErrorReportStatus__static_init.new ErrorReportStatus[](ErrorReportStatus__static_init#7)[0..6]
    //#input(com.dmdirc.ui.FatalErrorDialog$4__static_init): com/dmdirc/logger/ErrorReportStatus.$VALUES
    //#input(com.dmdirc.ui.FatalErrorDialog$4__static_init): com/dmdirc/logger/ErrorReportStatus.ERROR
    //#input(com.dmdirc.ui.FatalErrorDialog$4__static_init): com/dmdirc/logger/ErrorReportStatus.FINISHED
    //#input(com.dmdirc.ui.FatalErrorDialog$4__static_init): com/dmdirc/logger/ErrorReportStatus.NOT_APPLICABLE
    //#input(com.dmdirc.ui.FatalErrorDialog$4__static_init): com/dmdirc/logger/ErrorReportStatus.QUEUED
    //#input(com.dmdirc.ui.FatalErrorDialog$4__static_init): com/dmdirc/logger/ErrorReportStatus.SENDING
    //#input(com.dmdirc.ui.FatalErrorDialog$4__static_init): com/dmdirc/logger/ErrorReportStatus.WAITING
    //#output(com.dmdirc.ui.FatalErrorDialog$4__static_init): $SwitchMap$com$dmdirc$logger$ErrorReportStatus
    //#output(com.dmdirc.ui.FatalErrorDialog$4__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$4]
    //#output(com.dmdirc.ui.FatalErrorDialog$4__static_init): new int[](FatalErrorDialog$4__static_init#1) num objects
    //#output(com.dmdirc.ui.FatalErrorDialog$4__static_init): $SwitchMap$com$dmdirc$logger$ErrorReportStatus.length
    //#output(com.dmdirc.ui.FatalErrorDialog$4__static_init): $SwitchMap$com$dmdirc$logger$ErrorReportStatus[0..4_294_967_295]
    //#new obj(com.dmdirc.ui.FatalErrorDialog$4__static_init): new int[](FatalErrorDialog$4__static_init#1)
    //#pre[1] (com.dmdirc.ui.FatalErrorDialog$4__static_init): (soft) init'ed(com.dmdirc.logger.ErrorReportStatus__static_init.new ErrorReportStatus[](ErrorReportStatus__static_init#7)[0..6])
    //#presumption(com.dmdirc.ui.FatalErrorDialog$4__static_init): com.dmdirc.logger.ErrorReportStatus:ordinal(...)@274 in {0..5}
    //#presumption(com.dmdirc.ui.FatalErrorDialog$4__static_init): com.dmdirc.logger.ErrorReportStatus:ordinal(...)@274 in {0..5}
    //#presumption(com.dmdirc.ui.FatalErrorDialog$4__static_init): com.dmdirc.logger.ErrorReportStatus:ordinal(...)@274 in {0..5}
    //#presumption(com.dmdirc.ui.FatalErrorDialog$4__static_init): com.dmdirc.logger.ErrorReportStatus:ordinal(...)@274 in {0..5}
    //#presumption(com.dmdirc.ui.FatalErrorDialog$4__static_init): com.dmdirc.logger.ErrorReportStatus:ordinal(...)@274 in {0..5}
    //#presumption(com.dmdirc.ui.FatalErrorDialog$4__static_init): com.dmdirc.logger.ErrorReportStatus:ordinal(...)@274 in {0..5}
    //#post(com.dmdirc.ui.FatalErrorDialog$4__static_init): $SwitchMap$com$dmdirc$logger$ErrorReportStatus == &new int[](FatalErrorDialog$4__static_init#1)
    //#post(com.dmdirc.ui.FatalErrorDialog$4__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$4] == &__Dispatch_Table
    //#post(com.dmdirc.ui.FatalErrorDialog$4__static_init): new int[](FatalErrorDialog$4__static_init#1) num objects == 1
    //#post(com.dmdirc.ui.FatalErrorDialog$4__static_init): $SwitchMap$com$dmdirc$logger$ErrorReportStatus.length == 6
    //#post(com.dmdirc.ui.FatalErrorDialog$4__static_init): $SwitchMap$com$dmdirc$logger$ErrorReportStatus[0..4_294_967_295] in {0..6}, if init'ed
    //#FatalErrorDialog.java:274: end of method: com.dmdirc.ui.FatalErrorDialog$4.com.dmdirc.ui.FatalErrorDialog$4__static_init
    //#FatalErrorDialog.java:274: method: void com.dmdirc.ui.FatalErrorDialog.updateSendButtonText(ErrorReportStatus)
    //#FatalErrorDialog.java:274: Warning: method not available - call not analyzed
    //#    call on int com.dmdirc.logger.ErrorReportStatus:ordinal()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.ui.FatalErrorDialog
    //#    method: void updateSendButtonText(ErrorReportStatus)
    //#    unanalyzed callee: int com.dmdirc.logger.ErrorReportStatus:ordinal()
    //#input(void updateSendButtonText(ErrorReportStatus)): com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1).length
    //#input(void updateSendButtonText(ErrorReportStatus)): com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1)[0..4_294_967_295]
    //#input(void updateSendButtonText(ErrorReportStatus)): com/dmdirc/ui/FatalErrorDialog$4.$SwitchMap$com$dmdirc$logger$ErrorReportStatus
    //#input(void updateSendButtonText(ErrorReportStatus)): status
    //#input(void updateSendButtonText(ErrorReportStatus)): this
    //#input(void updateSendButtonText(ErrorReportStatus)): this.sendButton
    //#pre[2] (void updateSendButtonText(ErrorReportStatus)): status != null
    //#pre[4] (void updateSendButtonText(ErrorReportStatus)): this.sendButton != null
    //#pre[1] (void updateSendButtonText(ErrorReportStatus)): (soft) init'ed(com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1)[0..4_294_967_295])
    //#presumption(void updateSendButtonText(ErrorReportStatus)): com.dmdirc.logger.ErrorReportStatus:ordinal(...)@274 in {0..5}
    //#test_vector(void updateSendButtonText(ErrorReportStatus)): com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1)[0..4_294_967_295]: {1}, {2}, {3}, {4}, {5}, {6}, {-2_147_483_648..0, 7..4_294_967_295}
            case WAITING:
                sendButton.setText("Send");
                sendButton.setEnabled(true);
                break;
            case QUEUED:
                sendButton.setText("Queued");
                sendButton.setEnabled(false);
                break;
            case SENDING:
                sendButton.setText("Sending");
                sendButton.setEnabled(false);
                break;
            case ERROR:
                sendButton.setText("Error, resend");
                sendButton.setEnabled(true);
                break;
            case FINISHED:
                sendButton.setText("Sent");
                sendButton.setEnabled(false);
                break;
            case NOT_APPLICABLE:
                sendButton.setText("N/A");
                sendButton.setEnabled(false);
                break;
            default:
                sendButton.setText("Send");
                sendButton.setEnabled(true);
                break;
        }
    }
    //#FatalErrorDialog.java:304: end of method: void com.dmdirc.ui.FatalErrorDialog.updateSendButtonText(ErrorReportStatus)

    /** {@inheritDoc} */
    @Override
    public void errorAdded(final ProgramError error) {
        //Ignore
    }
    //#FatalErrorDialog.java:310: method: void com.dmdirc.ui.FatalErrorDialog.errorAdded(ProgramError)
    //#FatalErrorDialog.java:310: end of method: void com.dmdirc.ui.FatalErrorDialog.errorAdded(ProgramError)

    /** {@inheritDoc} */
    @Override
    public void errorDeleted(final ProgramError error) {
        //Ignore
    }
    //#FatalErrorDialog.java:316: method: void com.dmdirc.ui.FatalErrorDialog.errorDeleted(ProgramError)
    //#FatalErrorDialog.java:316: end of method: void com.dmdirc.ui.FatalErrorDialog.errorDeleted(ProgramError)

    /** {@inheritDoc} */
    @Override
    public void errorStatusChanged(final ProgramError error) {
        if (this.error.equals(error)) {
    //#FatalErrorDialog.java:321: method: void com.dmdirc.ui.FatalErrorDialog.errorStatusChanged(ProgramError)
    //#input(void errorStatusChanged(ProgramError)): com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1).length
    //#input(void errorStatusChanged(ProgramError)): com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1)[0..4_294_967_295]
    //#input(void errorStatusChanged(ProgramError)): com/dmdirc/logger/ProgramError.__Descendant_Table[com/dmdirc/logger/ProgramError]
    //#input(void errorStatusChanged(ProgramError)): com/dmdirc/logger/ProgramError.__Descendant_Table[others]
    //#input(void errorStatusChanged(ProgramError)): com/dmdirc/ui/FatalErrorDialog$4.$SwitchMap$com$dmdirc$logger$ErrorReportStatus
    //#input(void errorStatusChanged(ProgramError)): error
    //#input(void errorStatusChanged(ProgramError)): error.__Tag
    //#input(void errorStatusChanged(ProgramError)): error.level
    //#input(void errorStatusChanged(ProgramError)): error.message
    //#input(void errorStatusChanged(ProgramError)): error.reportStatus
    //#input(void errorStatusChanged(ProgramError)): error.reportStatus.terminal
    //#input(void errorStatusChanged(ProgramError)): error.trace
    //#input(void errorStatusChanged(ProgramError)): this
    //#input(void errorStatusChanged(ProgramError)): this.error
    //#input(void errorStatusChanged(ProgramError)): this.error.level
    //#input(void errorStatusChanged(ProgramError)): this.error.message
    //#input(void errorStatusChanged(ProgramError)): this.error.trace
    //#input(void errorStatusChanged(ProgramError)): this.okButton
    //#input(void errorStatusChanged(ProgramError)): this.sendButton
    //#pre[10] (void errorStatusChanged(ProgramError)): this.error != null
    //#pre[1] (void errorStatusChanged(ProgramError)): (soft) init'ed(com.dmdirc.ui.FatalErrorDialog$4__static_init.new int[](FatalErrorDialog$4__static_init#1)[0..4_294_967_295])
    //#pre[2] (void errorStatusChanged(ProgramError)): (soft) error init'ed
    //#pre[3] (void errorStatusChanged(ProgramError)): (soft) error.__Tag == com/dmdirc/logger/ProgramError
    //#pre[6] (void errorStatusChanged(ProgramError)): (soft) error.reportStatus != null
    //#pre[13] (void errorStatusChanged(ProgramError)): (soft) this.error.message != null
    //#pre[15] (void errorStatusChanged(ProgramError)): (soft) this.okButton != null
    //#pre[16] (void errorStatusChanged(ProgramError)): (soft) this.sendButton != null
    //#unanalyzed(void errorStatusChanged(ProgramError)): Effects-of-calling:com.dmdirc.logger.ErrorReportStatus:ordinal
    //#unanalyzed(void errorStatusChanged(ProgramError)): Effects-of-calling:javax.swing.JButton:setText
    //#unanalyzed(void errorStatusChanged(ProgramError)): Effects-of-calling:javax.swing.JButton:setEnabled
    //#unanalyzed(void errorStatusChanged(ProgramError)): Effects-of-calling:java.lang.Object:getClass
    //#unanalyzed(void errorStatusChanged(ProgramError)): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void errorStatusChanged(ProgramError)): Effects-of-calling:java.util.Arrays:equals
            final ErrorReportStatus status = error.getReportStatus();
            okButton.setEnabled(status.isTerminal());   
            updateSendButtonText(status);
        }
    }
    //#FatalErrorDialog.java:326: end of method: void com.dmdirc.ui.FatalErrorDialog.errorStatusChanged(ProgramError)

    /** {@inheritDoc} */
    @Override
    public boolean isReady() {
        //We're never ready
        return false;
    //#FatalErrorDialog.java:332: method: bool com.dmdirc.ui.FatalErrorDialog.isReady()
    //#output(bool isReady()): return_value
    //#post(bool isReady()): return_value == 0
    //#FatalErrorDialog.java:332: end of method: bool com.dmdirc.ui.FatalErrorDialog.isReady()
    }
}
    //#FatalErrorDialog.java:: end of class: com.dmdirc.ui.FatalErrorDialog$4
    //#output(com.dmdirc.ui.FatalErrorDialog$3$1__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$3$1]
    //#output(com.dmdirc.ui.FatalErrorDialog$3$1__static_init): __Dispatch_Table.windowClosed(Ljava/awt/event/WindowEvent;)V
    //#post(com.dmdirc.ui.FatalErrorDialog$3$1__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$3$1] == &__Dispatch_Table
    //#post(com.dmdirc.ui.FatalErrorDialog$3$1__static_init): __Dispatch_Table.windowClosed(Ljava/awt/event/WindowEvent;)V == &windowClosed
    //#FatalErrorDialog.java:: end of method: com.dmdirc.ui.FatalErrorDialog$3$1.com.dmdirc.ui.FatalErrorDialog$3$1__static_init
    //#FatalErrorDialog.java:: end of class: com.dmdirc.ui.FatalErrorDialog$3$1
    //#output(com.dmdirc.ui.FatalErrorDialog$3__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$3]
    //#output(com.dmdirc.ui.FatalErrorDialog$3__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.ui.FatalErrorDialog$3__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$3] == &__Dispatch_Table
    //#post(com.dmdirc.ui.FatalErrorDialog$3__static_init): __Dispatch_Table.run()V == &run
    //#FatalErrorDialog.java:: end of method: com.dmdirc.ui.FatalErrorDialog$3.com.dmdirc.ui.FatalErrorDialog$3__static_init
    //#FatalErrorDialog.java:: end of class: com.dmdirc.ui.FatalErrorDialog$3
    //#output(com.dmdirc.ui.FatalErrorDialog$2__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$2]
    //#output(com.dmdirc.ui.FatalErrorDialog$2__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.ui.FatalErrorDialog$2__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$2] == &__Dispatch_Table
    //#post(com.dmdirc.ui.FatalErrorDialog$2__static_init): __Dispatch_Table.run()V == &run
    //#FatalErrorDialog.java:: end of method: com.dmdirc.ui.FatalErrorDialog$2.com.dmdirc.ui.FatalErrorDialog$2__static_init
    //#FatalErrorDialog.java:: end of class: com.dmdirc.ui.FatalErrorDialog$2
    //#output(com.dmdirc.ui.FatalErrorDialog$1__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$1]
    //#output(com.dmdirc.ui.FatalErrorDialog$1__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object;
    //#output(com.dmdirc.ui.FatalErrorDialog$1__static_init): __Dispatch_Table.done()V
    //#post(com.dmdirc.ui.FatalErrorDialog$1__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog$1] == &__Dispatch_Table
    //#post(com.dmdirc.ui.FatalErrorDialog$1__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object; == &doInBackground
    //#post(com.dmdirc.ui.FatalErrorDialog$1__static_init): __Dispatch_Table.done()V == &done
    //#FatalErrorDialog.java:: end of method: com.dmdirc.ui.FatalErrorDialog$1.com.dmdirc.ui.FatalErrorDialog$1__static_init
    //#FatalErrorDialog.java:: end of class: com.dmdirc.ui.FatalErrorDialog$1
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog]
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.errorAdded(Lcom/dmdirc/logger/ProgramError;)V
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.errorDeleted(Lcom/dmdirc/logger/ProgramError;)V
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.errorStatusChanged(Lcom/dmdirc/logger/ProgramError;)V
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.initComponents()V
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.isReady()Z
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.layoutComponents()V
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.updateSendButtonText(Lcom/dmdirc/logger/ErrorReportStatus;)V
    //#output(com.dmdirc.ui.FatalErrorDialog__static_init): com/dmdirc/logger/ErrorListener.__Descendant_Table[com/dmdirc/ui/FatalErrorDialog]
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): __Descendant_Table[com/dmdirc/ui/FatalErrorDialog] == &__Dispatch_Table
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): com/dmdirc/logger/ErrorListener.__Descendant_Table[com/dmdirc/ui/FatalErrorDialog] == &__Dispatch_Table
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.actionPerformed(Ljava/awt/event/ActionEvent;)V == &actionPerformed
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.errorAdded(Lcom/dmdirc/logger/ProgramError;)V == &errorAdded
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.errorDeleted(Lcom/dmdirc/logger/ProgramError;)V == &errorDeleted
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.errorStatusChanged(Lcom/dmdirc/logger/ProgramError;)V == &errorStatusChanged
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.initComponents()V == &initComponents
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.isReady()Z == &isReady
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.layoutComponents()V == &layoutComponents
    //#post(com.dmdirc.ui.FatalErrorDialog__static_init): __Dispatch_Table.updateSendButtonText(Lcom/dmdirc/logger/ErrorReportStatus;)V == &updateSendButtonText
    //#FatalErrorDialog.java:: end of method: com.dmdirc.ui.FatalErrorDialog.com.dmdirc.ui.FatalErrorDialog__static_init
    //#FatalErrorDialog.java:: end of class: com.dmdirc.ui.FatalErrorDialog
