//# 2 errors, 144 messages
//#
/*
    //#CategoryLabel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader
    //#CategoryLabel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init
    //#CategoryLabel.java:1:1: class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#CategoryLabel.java:1:1: method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel__static_init
 * 
 * Copyright (c) 2006-2008 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.prefs;

import com.dmdirc.config.prefs.PreferencesCategory;
import com.dmdirc.logger.ErrorLevel;
import com.dmdirc.logger.Logger;
import com.dmdirc.ui.IconManager;
import java.awt.Color;
import java.awt.Dimension;
import java.util.concurrent.ExecutionException;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.SwingWorker;
import net.miginfocom.layout.PlatformDefaults;

/**
 * Category Label.
 */
public class CategoryLabel extends JLabel {

    /**
     * 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 = -1659415238166842265L;
    /** Panel gap. */
    private final int padding = (int) (1.5 * PlatformDefaults.getUnitValueX(
    //#CategoryLabel.java:52: Warning: method not available - call not analyzed
    //#    call on UnitValue net.miginfocom.layout.PlatformDefaults:getUnitValueX(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: UnitValue net.miginfocom.layout.PlatformDefaults:getUnitValueX(String)
    //#CategoryLabel.java:52: Warning: method not available - call not analyzed
    //#    call on float net.miginfocom.layout.UnitValue:getValue()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: float net.miginfocom.layout.UnitValue:getValue()
            "related").getValue());
    private PreferencesCategory category;
    private JList parentList;
    private int index;

    /**
     * 
     * @param parentList
     * @param category
     * @param numCats
     * @param index 
     */
    public CategoryLabel(final JList parentList,
            final PreferencesCategory category, final int numCats, final int index) {
    //#CategoryLabel.java:66: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): category
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): index
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): java.awt.Color.GRAY
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): java.awt.Color.LIGHT_GRAY
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): numCats
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): parentList
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this.category
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this.index
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this.padding
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this.parentList
    //#pre[1] (void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): category != null
    //#pre[5] (void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): parentList != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@52*3/2) in {-2_147_483_648..4_294_967_295}
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:getFont(...)@81 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): com.dmdirc.config.prefs.PreferencesCategory:getPath(...)@91 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): com.dmdirc.config.prefs.PreferencesCategory:getSubcats(...)@93 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): init'ed(java.awt.Color.GRAY)
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): init'ed(java.awt.Color.LIGHT_GRAY)
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): java.util.Iterator:next(...)@93 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): net.miginfocom.layout.PlatformDefaults:getUnitValueX(...)@52 != null
    //#presumption(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): (int) (net.miginfocom.layout.UnitValue:getValue(...)@52*3/2) + java.lang.Math:max(...)@81 in {-2_147_483_648..4_294_967_295}
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this.category == category
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this.category != null
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this.index == index
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): init'ed(this.index)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): init'ed(this.padding)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this.parentList == parentList
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): this.parentList != null
    //#unanalyzed(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): Effects-of-calling:javax.swing.SwingWorker
    //#test_vector(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): com.dmdirc.config.prefs.PreferencesCategory:getParent(...)@76: Addr_Set{null}, Inverse{null}
    //#test_vector(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): com.dmdirc.config.prefs.PreferencesCategory:isInline(...)@94: {1}, {0}
    //#test_vector(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): java.lang.String:equals(...)@91: {0}, {1}
    //#test_vector(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)): java.util.Iterator:hasNext(...)@93: {0}, {1}
        this.parentList = parentList;
        this.category = category;
        this.index = index;

        setText(category.getTitle());
    //#CategoryLabel.java:71: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.prefs.PreferencesCategory:getTitle()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: String com.dmdirc.config.prefs.PreferencesCategory:getTitle()
    //#CategoryLabel.java:71: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setText(String)
        new IconLoader(this, category.getIcon()).execute();
    //#CategoryLabel.java:72: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.prefs.PreferencesCategory:getIcon()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: String com.dmdirc.config.prefs.PreferencesCategory:getIcon()
    //#CategoryLabel.java:72: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader:execute()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader:execute()

        int level = 0;
        PreferencesCategory temp = category;
        while (temp.getParent() != null) {
    //#CategoryLabel.java:76: Warning: method not available - call not analyzed
    //#    call on PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:getParent()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:getParent()
            temp = temp.getParent();
    //#CategoryLabel.java:77: Warning: method not available - call not analyzed
    //#    call on PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:getParent()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: PreferencesCategory com.dmdirc.config.prefs.PreferencesCategory:getParent()
            level++;
    //#CategoryLabel.java:78: ?overflow
    //#    level in {-2_147_483_649..4_294_967_294}
    //#    severity: LOW
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    basic block: bb_3
    //#    assertion: level in {-2_147_483_649..4_294_967_294}
    //#    VN: level + 1
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {4_294_967_296}
    //#    Attribs:  Int  Bad singleton  Bad > Exp
        }

        setPreferredSize(new Dimension(100000, Math.max(16,
    //#CategoryLabel.java:81: Warning: method not available - call not analyzed
    //#    call on Font com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:getFont()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: Font com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:getFont()
    //#CategoryLabel.java:81: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setPreferredSize(Dimension)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setPreferredSize(Dimension)
                getFont().getSize()) + padding));
        setBorder(BorderFactory.createEmptyBorder(padding / 2, padding + level *
    //#CategoryLabel.java:83: ?overflow
    //#    this.padding + level*18 in {-2_147_483_648..4_294_967_295}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    basic block: bb_4
    //#    assertion: this.padding + level*18 in {-2_147_483_648..4_294_967_295}
    //#    VN: (int) (net.miginfocom.layout.UnitValue:getValue(...)@52*3/2) + level*18
    //#    Expected: {-2_147_483_648..4_294_967_295, Invalid}
    //#    Bad: {4_294_967_296..81_604_378_605}
    //#    Attribs:  Int  Bad > Exp
    //#CategoryLabel.java:83: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setBorder(Border)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setBorder(Border)
                18, padding / 2,
                padding));
        setBackground(parentList.getBackground());
    //#CategoryLabel.java:86: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setBackground(Color)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setBackground(Color)
        setForeground(parentList.getForeground());
    //#CategoryLabel.java:87: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setForeground(Color)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setForeground(Color)
        setOpaque(true);
    //#CategoryLabel.java:88: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setOpaque(bool)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setOpaque(bool)
        setToolTipText(null);
    //#CategoryLabel.java:89: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setToolTipText(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setToolTipText(String)

        if (category.getPath().equals(category.getTitle())) {
    //#CategoryLabel.java:91: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.prefs.PreferencesCategory:getPath()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: String com.dmdirc.config.prefs.PreferencesCategory:getPath()
    //#CategoryLabel.java:91: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.prefs.PreferencesCategory:getTitle()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: String com.dmdirc.config.prefs.PreferencesCategory:getTitle()
            boolean hasChildren = false;
            for (PreferencesCategory child : category.getSubcats()) {
    //#CategoryLabel.java:93: Warning: method not available - call not analyzed
    //#    call on List com.dmdirc.config.prefs.PreferencesCategory:getSubcats()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: List com.dmdirc.config.prefs.PreferencesCategory:getSubcats()
                if (!child.isInline()) {
    //#CategoryLabel.java:94: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.config.prefs.PreferencesCategory:isInline()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: bool com.dmdirc.config.prefs.PreferencesCategory:isInline()
                    hasChildren = true;
                    break;
                }
            }

            hasChildren = hasChildren || index + 1 == numCats;

            setBackground(Color.LIGHT_GRAY);
    //#CategoryLabel.java:102: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setBackground(Color)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setBackground(Color)
            setBorder(BorderFactory.createCompoundBorder(
    //#CategoryLabel.java:103: Warning: method not available - call not analyzed
    //#    call on Border com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:getBorder()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: Border com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:getBorder()
    //#CategoryLabel.java:103: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setBorder(Border)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
    //#    method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)
    //#    unanalyzed callee: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel:setBorder(Border)
                    BorderFactory.createMatteBorder(1, 0, hasChildren ? 1 : 0, 0,
                    Color.GRAY),
                    getBorder()));
        }
    }
    //#CategoryLabel.java:108: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel(JList, PreferencesCategory, int, int)

    /**
     * {@inheritDoc}
     *
     * @param icon New icon
     */
    @Override
    public void setIcon(Icon icon) {
        super.setIcon(icon);
    //#CategoryLabel.java:117: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel.setIcon(Icon)
    //#input(void setIcon(Icon)): icon
    //#input(void setIcon(Icon)): this
    //#input(void setIcon(Icon)): this.parentList
    //#pre[3] (void setIcon(Icon)): init'ed(this.parentList)
    //#test_vector(void setIcon(Icon)): this.parentList: Addr_Set{null}, Inverse{null}

        if (parentList != null) {
            parentList.repaint();
        }
    }
    //#CategoryLabel.java:122: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel.setIcon(Icon)

    private class IconLoader extends SwingWorker<Icon, Void> {
    //#CategoryLabel.java:124: method: Object com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.doInBackground()
    //#input(Object doInBackground()): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel$IconLoader]
    //#input(Object doInBackground()): __Descendant_Table[others]
    //#input(Object doInBackground()): __Dispatch_Table.doInBackground()Ljavax/swing/Icon;
    //#input(Object doInBackground()): this
    //#input(Object doInBackground()): this.__Tag
    //#input(Object doInBackground()): this.icon
    //#output(Object doInBackground()): return_value
    //#pre[2] (Object doInBackground()): this.__Tag == com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel$IconLoader
    //#pre[3] (Object doInBackground()): init'ed(this.icon)
    //#post(Object doInBackground()): init'ed(return_value)
    //#unanalyzed(Object doInBackground()): Effects-of-calling:com.dmdirc.ui.IconManager:getIconManager
    //#unanalyzed(Object doInBackground()): Effects-of-calling:com.dmdirc.ui.IconManager:getIcon
    //#CategoryLabel.java:124: end of method: Object com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.doInBackground()

        private CategoryLabel label;
        private String icon;

        public IconLoader(final CategoryLabel label, final String icon) {
    //#CategoryLabel.java:129: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): Param_1
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): icon
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): label
    //#input(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): this
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): this.icon
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): this.label
    //#output(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): this.this$0
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): this.icon == icon
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): init'ed(this.icon)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): this.label == label
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): init'ed(this.label)
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): this.this$0 == Param_1
    //#post(void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)): init'ed(this.this$0)
            this.label = label;
            this.icon = icon;
        }
    //#CategoryLabel.java:132: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader(CategoryLabel, CategoryLabel, String)

        /** {@inheritDoc} */
        @Override
        protected Icon doInBackground() throws Exception {
            return IconManager.getIconManager().getIcon(icon);
    //#CategoryLabel.java:137: method: Icon com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.doInBackground()
    //#CategoryLabel.java:137: Warning: method not available - call not analyzed
    //#    call on IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader
    //#    method: Icon doInBackground()
    //#    unanalyzed callee: IconManager com.dmdirc.ui.IconManager:getIconManager()
    //#CategoryLabel.java:137: Warning: method not available - call not analyzed
    //#    call on Icon com.dmdirc.ui.IconManager:getIcon(String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader
    //#    method: Icon doInBackground()
    //#    unanalyzed callee: Icon com.dmdirc.ui.IconManager:getIcon(String)
    //#input(Icon doInBackground()): this
    //#input(Icon doInBackground()): this.icon
    //#output(Icon doInBackground()): return_value
    //#pre[2] (Icon doInBackground()): init'ed(this.icon)
    //#presumption(Icon doInBackground()): com.dmdirc.ui.IconManager:getIconManager(...)@137 != null
    //#post(Icon doInBackground()): init'ed(return_value)
    //#CategoryLabel.java:137: end of method: Icon com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.doInBackground()
        }

        /** {@inheritDoc} */
        @Override
        protected void done() {
            try {
                label.setIcon(get());
    //#CategoryLabel.java:144: method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.done()
    //#CategoryLabel.java:144: Warning: method not available - call not analyzed
    //#    call on Object com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader:get()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader
    //#    method: void done()
    //#    unanalyzed callee: Object com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader:get()
    //#input(void done()): com.dmdirc.logger.ErrorLevel.LOW
    //#input(void done()): com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel.__Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel]
    //#input(void done()): com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel.__Descendant_Table[others]
    //#input(void done()): com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel.__Dispatch_Table.setIcon(Ljavax/swing/Icon;)V
    //#input(void done()): this
    //#input(void done()): this.label
    //#input(void done()): this.label.__Tag
    //#input(void done()): this.label.parentList
    //#pre[2] (void done()): (soft) this.label != null
    //#pre[3] (void done()): (soft) this.label.__Tag == com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel
    //#pre[4] (void done()): (soft) init'ed(this.label.parentList)
    //#presumption(void done()): init'ed(com.dmdirc.logger.ErrorLevel.LOW)
    //#unanalyzed(void done()): Effects-of-calling:javax.swing.JLabel:setIcon
    //#unanalyzed(void done()): Effects-of-calling:javax.swing.JList:repaint
            } catch (InterruptedException ex) {
                //Ignore
            } catch (ExecutionException ex) {
                Logger.appError(ErrorLevel.LOW, ex.getMessage(), ex);
    //#CategoryLabel.java:148: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader
    //#    method: void done()
    //#    unanalyzed callee: void com.dmdirc.logger.Logger:appError(ErrorLevel, String, Throwable)
            }

        }
    //#CategoryLabel.java:151: end of method: void com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.done()
    }

}
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel$IconLoader]
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object;
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init): __Dispatch_Table.doInBackground()Ljavax/swing/Icon;
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init): __Dispatch_Table.done()V
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel$IconLoader] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init): __Dispatch_Table.doInBackground()Ljava/lang/Object; == &doInBackground
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init): __Dispatch_Table.doInBackground()Ljavax/swing/Icon; == &doInBackground
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init): __Dispatch_Table.done()V == &done
    //#CategoryLabel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader__static_init
    //#CategoryLabel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel$IconLoader
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel]
    //#output(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel__static_init): __Dispatch_Table.setIcon(Ljavax/swing/Icon;)V
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel__static_init): __Descendant_Table[com/dmdirc/addons/ui_swing/dialogs/prefs/CategoryLabel] == &__Dispatch_Table
    //#post(com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel__static_init): __Dispatch_Table.setIcon(Ljavax/swing/Icon;)V == &setIcon
    //#CategoryLabel.java:: end of method: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel.com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel__static_init
    //#CategoryLabel.java:: end of class: com.dmdirc.addons.ui_swing.dialogs.prefs.CategoryLabel
