//# 1 errors, 299 messages
//#
/*
    //#ErrorTableModel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3
    //#ErrorTableModel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3__static_init
    //#ErrorTableModel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2
    //#ErrorTableModel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2__static_init
    //#ErrorTableModel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1
    //#ErrorTableModel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1__static_init
    //#ErrorTableModel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#ErrorTableModel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__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.error;

import com.dmdirc.addons.ui_swing.UIUtilities;
import com.dmdirc.logger.ErrorLevel;
import com.dmdirc.logger.ErrorListener;
import com.dmdirc.logger.ErrorManager;
import com.dmdirc.logger.ErrorReportStatus;
import com.dmdirc.logger.ProgramError;

import java.util.Date;
import java.util.List;

import javax.swing.table.AbstractTableModel;

/**
 * Table model for displaying program errors.
 */
public final class ErrorTableModel extends AbstractTableModel implements
        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 = 1;
    /** Data list. */
    private final List<ProgramError> errors;

    /** Creates a new instance of ErrorTableModel. */
    public ErrorTableModel() {
        this(ErrorManager.getErrorManager().getErrors());
    //#ErrorTableModel.java:54: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()
    //#ErrorTableModel.java:54: Warning: method not available - call not analyzed
    //#    call on ErrorManager com.dmdirc.logger.ErrorManager:getErrorManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()
    //#    unanalyzed callee: ErrorManager com.dmdirc.logger.ErrorManager:getErrorManager()
    //#ErrorTableModel.java:54: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.logger.ErrorManager:getErrors()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()
    //#    unanalyzed callee: List com.dmdirc.logger.ErrorManager:getErrors()
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()): this.errors
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()): com.dmdirc.logger.ErrorManager:getErrorManager(...)@54 != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()): init'ed(this.errors)
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()): Effects-of-calling:javax.swing.table.AbstractTableModel
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()): Effects-of-calling:com.dmdirc.logger.ErrorManager:getErrorManager
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()): Effects-of-calling:com.dmdirc.logger.ErrorManager:addErrorListener
    }
    //#ErrorTableModel.java:55: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel()

    /** 
     * Creates a new instance of ErrorTableModel. 
     *
     * @param errors List of errors.
     */
    public ErrorTableModel(final List<ProgramError> errors) {
        super();
    //#ErrorTableModel.java:63: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)): errors
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)): this.errors
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)): com.dmdirc.logger.ErrorManager:getErrorManager(...)@67 != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)): this.errors == errors
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)): init'ed(this.errors)

        this.errors = errors;

        ErrorManager.getErrorManager().addErrorListener(this);
    //#ErrorTableModel.java:67: Warning: method not available - call not analyzed
    //#    call on ErrorManager com.dmdirc.logger.ErrorManager:getErrorManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)
    //#    unanalyzed callee: ErrorManager com.dmdirc.logger.ErrorManager:getErrorManager()
    //#ErrorTableModel.java:67: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.ErrorManager:addErrorListener(ErrorListener)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)
    //#    unanalyzed callee: void com.dmdirc.logger.ErrorManager:addErrorListener(ErrorListener)
    }
    //#ErrorTableModel.java:68: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel(List)

    /**
     * Sets the list of errors.
     *
     * @param errors List of errors
     */
    public void setErrors(final List<ProgramError> errors) {
        this.errors.clear();
    //#ErrorTableModel.java:76: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.setErrors(List)
    //#input(void setErrors(List)): errors
    //#input(void setErrors(List)): this
    //#input(void setErrors(List)): this.errors
    //#pre[3] (void setErrors(List)): this.errors != null
        this.errors.addAll(errors);

        fireTableDataChanged();
    //#ErrorTableModel.java:79: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableDataChanged()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void setErrors(List)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableDataChanged()
    }
    //#ErrorTableModel.java:80: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.setErrors(List)

    /** {@inheritDoc} */
    @Override
    public int getRowCount() {
        synchronized (errors) {
    //#ErrorTableModel.java:85: method: int com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getRowCount()
    //#input(int getRowCount()): this
    //#input(int getRowCount()): this.errors
    //#input(int getRowCount()): this.errors.__Lock
    //#output(int getRowCount()): return_value
    //#pre[2] (int getRowCount()): this.errors != null
    //#post(int getRowCount()): init'ed(return_value)
            return errors.size();
        }
    //#ErrorTableModel.java:87: end of method: int com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getRowCount()
    }

    /** {@inheritDoc} */
    @Override
    public int getColumnCount() {
        return 5;
    //#ErrorTableModel.java:93: method: int com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getColumnCount()
    //#output(int getColumnCount()): return_value
    //#post(int getColumnCount()): return_value == 5
    //#ErrorTableModel.java:93: end of method: int com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getColumnCount()
    }

    /** {@inheritDoc} */
    @Override
    public String getColumnName(final int columnIndex) {
        switch (columnIndex) {
    //#ErrorTableModel.java:99: method: String com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getColumnName(int)
    //#input(String getColumnName(int)): ">= 5"._tainted
    //#input(String getColumnName(int)): columnIndex
    //#output(String getColumnName(int)): return_value
    //#pre[1] (String getColumnName(int)): columnIndex in {0..4}
    //#post(String getColumnName(int)): return_value in Addr_Set{&"ID",&"Time",&"Severity",&"Report Status",&"Message"}
    //#test_vector(String getColumnName(int)): columnIndex: {0}, {1}, {2}, {3}, {4}
            case 0:
                return "ID";
            case 1:
                return "Time";
            case 2:
                return "Severity";
            case 3:
                return "Report Status";
            case 4:
                return "Message";
            default:
                throw new IndexOutOfBoundsException(columnIndex + ">= 5");
    //#ErrorTableModel.java:111: end of method: String com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getColumnName(int)
        }
    }

    /** {@inheritDoc} */
    @Override
    public Class<?> getColumnClass(final int columnIndex) {
        switch (columnIndex) {
    //#ErrorTableModel.java:118: method: Class com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getColumnClass(int)
    //#input(Class getColumnClass(int)): ">= 5"._tainted
    //#input(Class getColumnClass(int)): columnIndex
    //#output(Class getColumnClass(int)): return_value
    //#pre[1] (Class getColumnClass(int)): columnIndex in {0..4}
    //#post(Class getColumnClass(int)): return_value in Addr_Set{&java.lang.Integer.__Class_Obj,&java.util.Date.__Class_Obj,&com.dmdirc.logger.ErrorLevel.__Class_Obj,&com.dmdirc.logger.ErrorReportStatus.__Class_Obj,&java.lang.String.__Class_Obj}
    //#test_vector(Class getColumnClass(int)): columnIndex: {0}, {1}, {2}, {3}, {4}
            case 0:
                return Integer.class;
            case 1:
                return Date.class;
            case 2:
                return ErrorLevel.class;
            case 3:
                return ErrorReportStatus.class;
            case 4:
                return String.class;
            default:
                throw new IndexOutOfBoundsException(columnIndex + ">= 5");
    //#ErrorTableModel.java:130: end of method: Class com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getColumnClass(int)
        }
    }

    /** {@inheritDoc} */
    @Override
    public boolean isCellEditable(final int rowIndex, final int columnIndex) {
        return false;
    //#ErrorTableModel.java:137: method: bool com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.isCellEditable(int, int)
    //#output(bool isCellEditable(int, int)): return_value
    //#post(bool isCellEditable(int, int)): return_value == 0
    //#ErrorTableModel.java:137: end of method: bool com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.isCellEditable(int, int)
    }

    /** {@inheritDoc} */
    @Override
    public Object getValueAt(final int rowIndex, final int columnIndex) {
        synchronized (errors) {
    //#ErrorTableModel.java:143: method: Object com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getValueAt(int, int)
    //#input(Object getValueAt(int, int)): ">= 5"._tainted
    //#input(Object getValueAt(int, int)): columnIndex
    //#input(Object getValueAt(int, int)): rowIndex
    //#input(Object getValueAt(int, int)): this
    //#input(Object getValueAt(int, int)): this.errors
    //#input(Object getValueAt(int, int)): this.errors.__Lock
    //#output(Object getValueAt(int, int)): return_value
    //#pre[1] (Object getValueAt(int, int)): columnIndex in {0..4}
    //#pre[4] (Object getValueAt(int, int)): this.errors != null
    //#presumption(Object getValueAt(int, int)): java.util.List:get(...)@146 != null
    //#presumption(Object getValueAt(int, int)): java.util.List:get(...)@148 != null
    //#presumption(Object getValueAt(int, int)): java.util.List:get(...)@150 != null
    //#presumption(Object getValueAt(int, int)): java.util.List:get(...)@152 != null
    //#presumption(Object getValueAt(int, int)): java.util.List:get(...)@154 != null
    //#post(Object getValueAt(int, int)): init'ed(return_value)
    //#test_vector(Object getValueAt(int, int)): columnIndex: {0}, {1}, {2}, {3}, {4}
            switch (columnIndex) {
                case 0:
                    return errors.get(rowIndex).getID();
    //#ErrorTableModel.java:146: Warning: method not available - call not analyzed
    //#    call on long com.dmdirc.logger.ProgramError:getID()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: Object getValueAt(int, int)
    //#    unanalyzed callee: long com.dmdirc.logger.ProgramError:getID()
                case 1:
                    return errors.get(rowIndex).getDate();
    //#ErrorTableModel.java:148: Warning: method not available - call not analyzed
    //#    call on Date com.dmdirc.logger.ProgramError:getDate()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: Object getValueAt(int, int)
    //#    unanalyzed callee: Date com.dmdirc.logger.ProgramError:getDate()
                case 2:
                    return errors.get(rowIndex).getLevel();
    //#ErrorTableModel.java:150: Warning: method not available - call not analyzed
    //#    call on ErrorLevel com.dmdirc.logger.ProgramError:getLevel()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: Object getValueAt(int, int)
    //#    unanalyzed callee: ErrorLevel com.dmdirc.logger.ProgramError:getLevel()
                case 3:
                    return errors.get(rowIndex).getReportStatus();
    //#ErrorTableModel.java:152: Warning: method not available - call not analyzed
    //#    call on ErrorReportStatus com.dmdirc.logger.ProgramError:getReportStatus()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: Object getValueAt(int, int)
    //#    unanalyzed callee: ErrorReportStatus com.dmdirc.logger.ProgramError:getReportStatus()
                case 4:
                    return errors.get(rowIndex).getMessage();
    //#ErrorTableModel.java:154: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.logger.ProgramError:getMessage()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: Object getValueAt(int, int)
    //#    unanalyzed callee: String com.dmdirc.logger.ProgramError:getMessage()
                default:
                    throw new IndexOutOfBoundsException(columnIndex + ">= 5");
            }
        }
    //#ErrorTableModel.java:158: end of method: Object com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getValueAt(int, int)
    }

    /** {@inheritDoc} */
    @Override
    public void setValueAt(final Object aValue, final int rowIndex,
            final int columnIndex) {
        synchronized (errors) {
    //#ErrorTableModel.java:165: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.setValueAt(Object, int, int)
    //#input(void setValueAt(Object, int, int)): ", expecting: "._tainted
    //#input(void setValueAt(Object, int, int)): "Received: "._tainted
    //#input(void setValueAt(Object, int, int)): aValue
    //#input(void setValueAt(Object, int, int)): columnIndex
    //#input(void setValueAt(Object, int, int)): com.dmdirc.logger.ErrorReportStatus.__Class_Obj._tainted
    //#input(void setValueAt(Object, int, int)): rowIndex
    //#input(void setValueAt(Object, int, int)): this
    //#input(void setValueAt(Object, int, int)): this.errors
    //#input(void setValueAt(Object, int, int)): this.errors.__Lock
    //#pre[4] (void setValueAt(Object, int, int)): columnIndex == 3
    //#pre[7] (void setValueAt(Object, int, int)): this.errors != null
    //#presumption(void setValueAt(Object, int, int)): com.dmdirc.logger.ErrorReportStatus:instanceof(...)@168 == 1
    //#presumption(void setValueAt(Object, int, int)): java.util.List:get(...)@169 != null
            switch (columnIndex) {
                case 3:
                    if (aValue instanceof ErrorReportStatus) {
                        errors.get(rowIndex).setReportStatus(
    //#ErrorTableModel.java:169: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.ProgramError:setReportStatus(ErrorReportStatus)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void setValueAt(Object, int, int)
    //#    unanalyzed callee: void com.dmdirc.logger.ProgramError:setReportStatus(ErrorReportStatus)
                                (ErrorReportStatus) aValue);
                        break;
                    } else {
                        throw new IllegalArgumentException("Received: " +
    //#ErrorTableModel.java:173: ?conditional throw
    //#    __instance_of_ErrorReportStatus == 1
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void setValueAt(Object, int, int)
    //#    basic block: bb_10
    //#    assertion: __instance_of_ErrorReportStatus == 1
    //#    VN: __instance_of_ErrorReportStatus
    //#    Expected: {-Inf..-1, 1..+Inf}
    //#    Bad: {0}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Bad > Exp  Uncertain
                                aValue.getClass() + ", expecting: " +
                                ErrorReportStatus.class);
                    }
                default:
                    throw new UnsupportedOperationException("Only editing the " +
                            "status is allowed");
            }
            fireTableCellUpdated(rowIndex, columnIndex);
    //#ErrorTableModel.java:181: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableCellUpdated(int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void setValueAt(Object, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableCellUpdated(int, int)
        }
    }
    //#ErrorTableModel.java:183: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.setValueAt(Object, int, int)

    /**
     * Gets the error at the specified row.
     *
     * @param rowIndex Row to retrieve
     *
     * @return Specified error
     */
    public ProgramError getError(final int rowIndex) {
        synchronized (errors) {
    //#ErrorTableModel.java:193: method: ProgramError com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getError(int)
    //#input(ProgramError getError(int)): rowIndex
    //#input(ProgramError getError(int)): this
    //#input(ProgramError getError(int)): this.errors
    //#input(ProgramError getError(int)): this.errors.__Lock
    //#output(ProgramError getError(int)): return_value
    //#pre[3] (ProgramError getError(int)): this.errors != null
    //#post(ProgramError getError(int)): init'ed(return_value)
            return errors.get(rowIndex);
        }
    //#ErrorTableModel.java:195: end of method: ProgramError com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.getError(int)
    }

    /**
     * Returns the index of the specified error or -1 if the error is not found.
     *
     * @param error ProgramError to locate
     *
     * @return Error index or -1 if not found
     */
    public int indexOf(final ProgramError error) {
        synchronized (errors) {
    //#ErrorTableModel.java:206: method: int com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.indexOf(ProgramError)
    //#input(int indexOf(ProgramError)): error
    //#input(int indexOf(ProgramError)): this
    //#input(int indexOf(ProgramError)): this.errors
    //#input(int indexOf(ProgramError)): this.errors.__Lock
    //#output(int indexOf(ProgramError)): return_value
    //#pre[3] (int indexOf(ProgramError)): this.errors != null
    //#post(int indexOf(ProgramError)): init'ed(return_value)
            return errors.indexOf(error);
        }
    //#ErrorTableModel.java:208: end of method: int com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.indexOf(ProgramError)
    }

    /**
     * Adds an error to the list.
     *
     * @param error ProgramError to add
     */
    public void addRow(final ProgramError error) {
        synchronized (errors) {
    //#ErrorTableModel.java:217: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.addRow(ProgramError)
    //#input(void addRow(ProgramError)): error
    //#input(void addRow(ProgramError)): this
    //#input(void addRow(ProgramError)): this.errors
    //#input(void addRow(ProgramError)): this.errors.__Lock
    //#pre[3] (void addRow(ProgramError)): this.errors != null
            errors.add(error);
            fireTableRowsInserted(errors.indexOf(error), errors.indexOf(error));
    //#ErrorTableModel.java:219: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsInserted(int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void addRow(ProgramError)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsInserted(int, int)
        }
    }
    //#ErrorTableModel.java:221: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.addRow(ProgramError)

    /**
     * Removes a specified row from the list.
     *
     * @param row Row to remove
     */
    public void removeRow(final int row) {
        synchronized (errors) {
    //#ErrorTableModel.java:229: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.removeRow(int)
    //#input(void removeRow(int)): row
    //#input(void removeRow(int)): this
    //#input(void removeRow(int)): this.errors
    //#input(void removeRow(int)): this.errors.__Lock
    //#pre[3] (void removeRow(int)): this.errors != null
            errors.remove(row);
            fireTableRowsDeleted(row, row);
    //#ErrorTableModel.java:231: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsDeleted(int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void removeRow(int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsDeleted(int, int)
        }
    }
    //#ErrorTableModel.java:233: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.removeRow(int)

    /**
     * Removes a specified error from the list.
     *
     * @param error ProgramError to remove
     */
    public void removeRow(final ProgramError error) {
        synchronized (errors) {
    //#ErrorTableModel.java:241: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.removeRow(ProgramError)
    //#input(void removeRow(ProgramError)): error
    //#input(void removeRow(ProgramError)): this
    //#input(void removeRow(ProgramError)): this.errors
    //#input(void removeRow(ProgramError)): this.errors.__Lock
    //#pre[3] (void removeRow(ProgramError)): this.errors != null
            if (errors.contains(error)) {
                final int row = errors.indexOf(error);
                errors.remove(row);
                fireTableRowsDeleted(row, row);
    //#ErrorTableModel.java:245: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsDeleted(int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void removeRow(ProgramError)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsDeleted(int, int)
            }
        }
    }
    //#ErrorTableModel.java:248: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.removeRow(ProgramError)

    /** {@inheritDoc} */
    @Override
    public void errorAdded(final ProgramError error) {
        UIUtilities.invokeLater(new Runnable() {
    //#ErrorTableModel.java:253: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)): this.val$error
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)): this.val$error == Param_2
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)): init'ed(this.val$error)
    //#ErrorTableModel.java:253: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1(ErrorTableModel, ProgramError)
    //#ErrorTableModel.java:253: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.errorAdded(ProgramError)
    //#ErrorTableModel.java:253: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:invokeLater(Runnable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void errorAdded(ProgramError)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:invokeLater(Runnable)
    //#input(void errorAdded(ProgramError)): error
    //#input(void errorAdded(ProgramError)): this

            /** {@inheritDoc} */
            @Override
            public void run() {
                synchronized (ErrorTableModel.this) {
    //#ErrorTableModel.java:258: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1.run()
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.__Lock
    //#input(void run()): this.this$0.errors
    //#input(void run()): this.val$error
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.errors != null
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:indexOf
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:add
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsInserted
                    addRow(error);
                }
            }
    //#ErrorTableModel.java:261: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1.run()
        });
    }
    //#ErrorTableModel.java:263: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.errorAdded(ProgramError)

    /** {@inheritDoc} */
    @Override
    public void errorDeleted(final ProgramError error) {
        UIUtilities.invokeLater(new Runnable() {
    //#ErrorTableModel.java:268: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)): this.val$error
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)): this.val$error == Param_2
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)): init'ed(this.val$error)
    //#ErrorTableModel.java:268: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2(ErrorTableModel, ProgramError)
    //#ErrorTableModel.java:268: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.errorDeleted(ProgramError)
    //#ErrorTableModel.java:268: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:invokeLater(Runnable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void errorDeleted(ProgramError)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:invokeLater(Runnable)
    //#input(void errorDeleted(ProgramError)): error
    //#input(void errorDeleted(ProgramError)): this

            /** {@inheritDoc} */
            @Override
            public void run() {
                synchronized (ErrorTableModel.this) {
    //#ErrorTableModel.java:273: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2.run()
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.__Lock
    //#input(void run()): this.this$0.errors
    //#input(void run()): this.val$error
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.errors != null
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:indexOf
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(void run()): Effects-of-calling:com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsDeleted
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:contains
                    removeRow(error);
                }
            }
    //#ErrorTableModel.java:276: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2.run()
        });
    }
    //#ErrorTableModel.java:278: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.errorDeleted(ProgramError)

    /** {@inheritDoc} */
    @Override
    public void errorStatusChanged(final ProgramError error) {
        UIUtilities.invokeLater(new Runnable() {
    //#ErrorTableModel.java:283: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)): Param_2
    //#input(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)): this.this$0
    //#output(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)): this.val$error
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)): init'ed(this.this$0)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)): this.val$error == Param_2
    //#post(void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)): init'ed(this.val$error)
    //#ErrorTableModel.java:283: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3(ErrorTableModel, ProgramError)
    //#ErrorTableModel.java:283: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.errorStatusChanged(ProgramError)
    //#ErrorTableModel.java:283: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.UIUtilities:invokeLater(Runnable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
    //#    method: void errorStatusChanged(ProgramError)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.UIUtilities:invokeLater(Runnable)
    //#input(void errorStatusChanged(ProgramError)): error
    //#input(void errorStatusChanged(ProgramError)): this

            /** {@inheritDoc} */
            @Override
            public void run() {
                synchronized (ErrorTableModel.this) {
    //#ErrorTableModel.java:288: method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3.run()
    //#input(void run()): this
    //#input(void run()): this.this$0
    //#input(void run()): this.this$0.__Lock
    //#input(void run()): this.this$0.errors
    //#input(void run()): this.val$error
    //#pre[2] (void run()): this.this$0 != null
    //#pre[3] (void run()): this.errors != null
    //#unanalyzed(void run()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:indexOf
    //#unanalyzed(void run()): Effects-of-calling:java.util.List:size
                    final int errorRow = indexOf(error);
                    if (errorRow != -1 && errorRow < getRowCount()) {
                        fireTableRowsUpdated(errorRow, errorRow);
    //#ErrorTableModel.java:291: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsUpdated(int, int)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3
    //#    method: void run()
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel:fireTableRowsUpdated(int, int)
                    }
                }
            }
    //#ErrorTableModel.java:294: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3.run()
        });
    }
    //#ErrorTableModel.java:296: end of method: void com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.errorStatusChanged(ProgramError)

    /** {@inheritDoc} */
    @Override
    public boolean isReady() {
        return true;
    //#ErrorTableModel.java:301: method: bool com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.isReady()
    //#output(bool isReady()): return_value
    //#post(bool isReady()): return_value == 1
    //#ErrorTableModel.java:301: end of method: bool com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.isReady()
    }
}
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/error/ErrorTableModel$3]
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/error/ErrorTableModel$3] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3__static_init): __Dispatch_Table.run()V == &run
    //#ErrorTableModel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3__static_init
    //#ErrorTableModel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$3
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/error/ErrorTableModel$2]
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/error/ErrorTableModel$2] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2__static_init): __Dispatch_Table.run()V == &run
    //#ErrorTableModel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2__static_init
    //#ErrorTableModel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$2
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/error/ErrorTableModel$1]
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1__static_init): __Dispatch_Table.run()V
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/error/ErrorTableModel$1] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1__static_init): __Dispatch_Table.run()V == &run
    //#ErrorTableModel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1__static_init
    //#ErrorTableModel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel$1
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/error/ErrorTableModel]
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.addRow(Lcom/dmdirc/logger/ProgramError;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.errorAdded(Lcom/dmdirc/logger/ProgramError;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.errorDeleted(Lcom/dmdirc/logger/ProgramError;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.errorStatusChanged(Lcom/dmdirc/logger/ProgramError;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getColumnClass(I)Ljava/lang/Class;
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getColumnCount()I
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getColumnName(I)Ljava/lang/String;
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getError(I)Lcom/dmdirc/logger/ProgramError;
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getRowCount()I
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getValueAt(II)Ljava/lang/Object;
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.indexOf(Lcom/dmdirc/logger/ProgramError;)I
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.isCellEditable(II)Z
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.isReady()Z
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.removeRow(I)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.removeRow(Lcom/dmdirc/logger/ProgramError;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.setErrors(Ljava/util/List;)V
    //#output(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.setValueAt(Ljava/lang/Object;II)V
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/error/ErrorTableModel] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.addRow(Lcom/dmdirc/logger/ProgramError;)V == &addRow
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.errorAdded(Lcom/dmdirc/logger/ProgramError;)V == &errorAdded
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.errorDeleted(Lcom/dmdirc/logger/ProgramError;)V == &errorDeleted
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.errorStatusChanged(Lcom/dmdirc/logger/ProgramError;)V == &errorStatusChanged
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getColumnClass(I)Ljava/lang/Class; == &getColumnClass
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getColumnCount()I == &getColumnCount
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getColumnName(I)Ljava/lang/String; == &getColumnName
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getError(I)Lcom/dmdirc/logger/ProgramError; == &getError
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getRowCount()I == &getRowCount
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.getValueAt(II)Ljava/lang/Object; == &getValueAt
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.indexOf(Lcom/dmdirc/logger/ProgramError;)I == &indexOf
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.isCellEditable(II)Z == &isCellEditable
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.isReady()Z == &isReady
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.removeRow(I)V == &removeRow
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.removeRow(Lcom/dmdirc/logger/ProgramError;)V == &removeRow
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.setErrors(Ljava/util/List;)V == &setErrors
    //#post(com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init): __Dispatch_Table.setValueAt(Ljava/lang/Object;II)V == &setValueAt
    //#ErrorTableModel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel.com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel__static_init
    //#ErrorTableModel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.error.ErrorTableModel
