//# 5 errors, 517 messages
//#
/*
    //#NowPlayingCommand.java:1:1: class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#NowPlayingCommand.java:1:1: method: com.dmdirc.addons.nowplaying.NowPlayingCommand.com.dmdirc.addons.nowplaying.NowPlayingCommand__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.nowplaying;

import com.dmdirc.MessageTarget;
import com.dmdirc.Server;
import com.dmdirc.commandparser.CommandArguments;
import com.dmdirc.commandparser.commands.ChatCommand;
import com.dmdirc.commandparser.CommandManager;
import com.dmdirc.commandparser.commands.IntelligentCommand;
import com.dmdirc.config.IdentityManager;
import com.dmdirc.ui.input.AdditionalTabTargets;
import com.dmdirc.ui.interfaces.InputWindow;

import java.util.List;

/**
 * The now playing command retrieves the currently playing song from a
 * variety of media players.
 * @author chris
 */
public final class NowPlayingCommand extends ChatCommand implements IntelligentCommand {
    
    /** The plugin that's using this command. */
    final NowPlayingPlugin parent;
    
    /**
     * Creates a new instance of NowPlayingCommand.
     *
     * @param parent The plugin that's instansiating this command
     */
    public NowPlayingCommand(final NowPlayingPlugin parent) {
        super();
    //#NowPlayingCommand.java:53: method: void com.dmdirc.addons.nowplaying.NowPlayingCommand.com.dmdirc.addons.nowplaying.NowPlayingCommand(NowPlayingPlugin)
    //#NowPlayingCommand.java:53: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.commandparser.commands.ChatCommand()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void com.dmdirc.addons.nowplaying.NowPlayingCommand(NowPlayingPlugin)
    //#    unanalyzed callee: void com.dmdirc.commandparser.commands.ChatCommand()
    //#input(void com.dmdirc.addons.nowplaying.NowPlayingCommand(NowPlayingPlugin)): parent
    //#input(void com.dmdirc.addons.nowplaying.NowPlayingCommand(NowPlayingPlugin)): this
    //#output(void com.dmdirc.addons.nowplaying.NowPlayingCommand(NowPlayingPlugin)): this.parent
    //#post(void com.dmdirc.addons.nowplaying.NowPlayingCommand(NowPlayingPlugin)): this.parent == parent
    //#post(void com.dmdirc.addons.nowplaying.NowPlayingCommand(NowPlayingPlugin)): init'ed(this.parent)
        
        this.parent = parent;
        
        CommandManager.registerCommand(this);
    //#NowPlayingCommand.java:57: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.commandparser.CommandManager:registerCommand(Command)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void com.dmdirc.addons.nowplaying.NowPlayingCommand(NowPlayingPlugin)
    //#    unanalyzed callee: void com.dmdirc.commandparser.CommandManager:registerCommand(Command)
    }
    //#NowPlayingCommand.java:58: end of method: void com.dmdirc.addons.nowplaying.NowPlayingCommand.com.dmdirc.addons.nowplaying.NowPlayingCommand(NowPlayingPlugin)
    
    /** {@inheritDoc} */
    @Override
    public void execute(final InputWindow origin, final Server server,
            final MessageTarget target, final boolean isSilent, final CommandArguments args) {
        if (args.getArguments().length > 0 && args.getArguments()[0]
    //#NowPlayingCommand.java:64: method: void com.dmdirc.addons.nowplaying.NowPlayingCommand.execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#NowPlayingCommand.java:64: Warning: method not available - call not analyzed
    //#    call on String[] com.dmdirc.commandparser.CommandArguments:getArguments()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: String[] com.dmdirc.commandparser.CommandArguments:getArguments()
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): args
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/DcopMediaSourcePlugin.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/mediasource_windows/WindowsMediaSourcePlugin.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/AmarokSource]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/KaffeineSource]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/NoatunSource]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_windows/DllSource]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/nowplaying/MediaSource]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/DcopMediaSourcePlugin]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[com/dmdirc/addons/mediasource_windows/WindowsMediaSourcePlugin]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[com/dmdirc/addons/nowplaying/MediaSourceManager]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSourceState.CLOSED
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/MediaSourceState.PLAYING
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Descendant_Table[com/dmdirc/addons/nowplaying/NowPlayingPlugin]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Descendant_Table[others]
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Dispatch_Table.doSubstitution(Ljava/lang/String;Lcom/dmdirc/addons/nowplaying/MediaSource;)Ljava/lang/String;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Dispatch_Table.getBestSource()Lcom/dmdirc/addons/nowplaying/MediaSource;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Dispatch_Table.getSource(Ljava/lang/String;)Lcom/dmdirc/addons/nowplaying/MediaSource;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Dispatch_Table.hasRunningSource()Z
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): isSilent
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): origin
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): target
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): this
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): this.parent
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): this.parent.__Tag
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): this.parent.managers
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): this.parent.order
    //#input(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): this.parent.sources
    //#pre[1] (void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): args != null
    //#pre[4] (void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): (soft) target != null
    //#pre[6] (void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): (soft) this.parent != null
    //#pre[7] (void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): (soft) this.parent.__Tag == com/dmdirc/addons/nowplaying/NowPlayingPlugin
    //#pre[8] (void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): (soft) this.parent.managers != null
    //#pre[9] (void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): (soft) init'ed(this.parent.order)
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.MessageTarget:getFrame(...)@77 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.MessageTarget:getFrame(...)@89 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...).length@64 >= 1
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...).length@67 >= 1
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...).length@70 >= 2
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)@64 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)@64 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)@67 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)@67 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)@69 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)@70 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)[0]@64 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...)[0]@67 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.ui.interfaces.InputWindow:getCommandParser(...)@77 != null
    //#presumption(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.ui.interfaces.InputWindow:getCommandParser(...)@89 != null
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getSources
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getState
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getAppName
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.nowplaying.NowPlayingPlugin:getDomain
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:doSubstitution
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.util.List:isEmpty
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.lang.String:toLowerCase
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:com.dmdirc.addons.nowplaying.NowPlayingCommand:doTable
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getArtist
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getTitle
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getAlbum
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getBitrate
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getFormat
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getLength
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:getTime
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.lang.String:replaceAll
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.lang.String:equalsIgnoreCase
    //#unanalyzed(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): Effects-of-calling:java.util.Collections:sort
    //#test_vector(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...).length@64: {0}, {1..+Inf}
    //#test_vector(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...).length@67: {0}, {1..+Inf}
    //#test_vector(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): com.dmdirc.commandparser.CommandArguments:getArguments(...).length@69: {0,1}, {2..+Inf}
    //#test_vector(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): getState(...)@76: Addr_Set{&com.dmdirc.addons.nowplaying.MediaSourceState__static_init.new MediaSourceState(MediaSourceState__static_init#1)}, Inverse{&com.dmdirc.addons.nowplaying.MediaSourceState__static_init.new MediaSourceState(MediaSourceState__static_init#1)}
    //#test_vector(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): java.lang.String:equalsIgnoreCase(...)@64: {0}, {1}
    //#test_vector(void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)): java.lang.String:equalsIgnoreCase(...)@67: {0}, {1}
                .equalsIgnoreCase("--sources")) {
            doSourceList(origin, isSilent);
        } else if (args.getArguments().length > 0 && args.getArguments()[0]
    //#NowPlayingCommand.java:67: Warning: method not available - call not analyzed
    //#    call on String[] com.dmdirc.commandparser.CommandArguments:getArguments()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: String[] com.dmdirc.commandparser.CommandArguments:getArguments()
                .equalsIgnoreCase("--source")) {
            if (args.getArguments().length > 1) {
    //#NowPlayingCommand.java:69: Warning: method not available - call not analyzed
    //#    call on String[] com.dmdirc.commandparser.CommandArguments:getArguments()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: String[] com.dmdirc.commandparser.CommandArguments:getArguments()
                final String sourceName = args.getArguments()[1];
    //#NowPlayingCommand.java:70: Warning: method not available - call not analyzed
    //#    call on String[] com.dmdirc.commandparser.CommandArguments:getArguments()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: String[] com.dmdirc.commandparser.CommandArguments:getArguments()
                final MediaSource source = parent.getSource(sourceName);
                
                if (source == null) {
                    sendLine(origin, isSilent, FORMAT_ERROR, "Source not found.");
    //#NowPlayingCommand.java:74: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
                } else {
                    if (source.getState() != MediaSourceState.CLOSED) {
    //#NowPlayingCommand.java:76: ?use of default init
    //#    init'ed(source.__Tag)
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    basic block: bb_9
    //#    assertion: init'ed(source.__Tag)
    //#    VN: source.__Tag
    //#    Expected: {-Inf..+Inf}
    //#    Bad: {Invalid}
    //#    Attribs:  Int  Bad only invalid
    //#NowPlayingCommand.java:76: ?null dereference
    //#    com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[source.__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    basic block: bb_9
    //#    assertion: com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[source.__Tag] != null
    //#    VN: com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[source.__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#NowPlayingCommand.java:76: Warning: call too complex - analysis skipped
    //#    call on MediaSourceState getState()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: MediaSourceState getState()
                        target.getFrame().getCommandParser().parseCommand(origin,
    //#NowPlayingCommand.java:77: Warning: method not available - call not analyzed
    //#    call on InputWindow com.dmdirc.MessageTarget:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: InputWindow com.dmdirc.MessageTarget:getFrame()
    //#NowPlayingCommand.java:77: Warning: method not available - call not analyzed
    //#    call on CommandParser com.dmdirc.ui.interfaces.InputWindow:getCommandParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: CommandParser com.dmdirc.ui.interfaces.InputWindow:getCommandParser()
    //#NowPlayingCommand.java:77: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.commandparser.parsers.CommandParser:parseCommand(InputWindow, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.commandparser.parsers.CommandParser:parseCommand(InputWindow, String)
                                getInformation(source));
                    } else {
                        sendLine(origin, isSilent, FORMAT_ERROR, "Source is not running.");
    //#NowPlayingCommand.java:80: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
                    }
                }
            } else {
                sendLine(origin, isSilent, FORMAT_ERROR,
    //#NowPlayingCommand.java:84: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
                        "You must specify a source when using --source.");
            }
        } else {
            if (parent.hasRunningSource()) {
                target.getFrame().getCommandParser().parseCommand(origin,
    //#NowPlayingCommand.java:89: Warning: method not available - call not analyzed
    //#    call on InputWindow com.dmdirc.MessageTarget:getFrame()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: InputWindow com.dmdirc.MessageTarget:getFrame()
    //#NowPlayingCommand.java:89: Warning: method not available - call not analyzed
    //#    call on CommandParser com.dmdirc.ui.interfaces.InputWindow:getCommandParser()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: CommandParser com.dmdirc.ui.interfaces.InputWindow:getCommandParser()
    //#NowPlayingCommand.java:89: ?precondition failure
    //#    com/dmdirc/addons/nowplaying/NowPlayingCommand.getInformation: source != null
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    basic block: bb_15
    //#    assertion: getBestSource(...) != null
    //#    callee: String com/dmdirc/addons/nowplaying/NowPlayingCommand.getInformation(MediaSource)
    //#    callee assertion: source != null
    //#    callee file: NowPlayingCommand.java
    //#    callee precondition index: [1]
    //#    callee srcpos: 139
    //#    VN: getBestSource(...)
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad
    //#NowPlayingCommand.java:89: ?precondition failure
    //#    com/dmdirc/addons/nowplaying/NowPlayingCommand.getInformation: source.__Tag in {com/dmdirc/addons/mediasource_dcop/AmarokSource, com/dmdirc/addons/mediasource_dcop/KaffeineSource, com/dmdirc/addons/mediasource_dcop/NoatunSource, com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin, com/dmdirc/addons/mediasource_windows/DllSource, com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource, com/dmdirc/addons/nowplaying/MediaSource}
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    basic block: bb_15
    //#    assertion: getBestSource(...).__Tag in {com/dmdirc/addons/mediasource_dcop/AmarokSource, com/dmdirc/addons/mediasource_dcop/KaffeineSource, com/dmdirc/addons/mediasource_dcop/NoatunSource, com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin, com/dmdirc/addons/mediasource_windows/DllSource, com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource, com/dmdirc/addons/nowplaying/MediaSource}
    //#    callee: String com/dmdirc/addons/nowplaying/NowPlayingCommand.getInformation(MediaSource)
    //#    callee assertion: source.__Tag in {com/dmdirc/addons/mediasource_dcop/AmarokSource, com/dmdirc/addons/mediasource_dcop/KaffeineSource, com/dmdirc/addons/mediasource_dcop/NoatunSource, com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin, com/dmdirc/addons/mediasource_windows/DllSource, com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource, com/dmdirc/addons/nowplaying/MediaSource}
    //#    callee file: NowPlayingCommand.java
    //#    callee precondition index: [2]
    //#    callee srcpos: 139
    //#    VN: getBestSource(...).__Tag
    //#    Expected: {414_976, 416_256, 416_768, 418_048, 418_560, 423_936, 424_448}
    //#    Bad: {0..414_975, 414_977..416_255, 416_257..416_767, 416_769..418_047, 418_049..418_559, 418_561..423_935, 423_937..424_447, 424_449..+Inf, Invalid}
    //#    Attribs:  Int  Bad overlaps +/-1000  Bad < Exp  Bad > Exp
    //#NowPlayingCommand.java:89: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.commandparser.parsers.CommandParser:parseCommand(InputWindow, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.commandparser.parsers.CommandParser:parseCommand(InputWindow, String)
                        getInformation(parent.getBestSource()));
            } else {
                sendLine(origin, isSilent, FORMAT_ERROR, "No running media sources available.");
    //#NowPlayingCommand.java:92: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    //#    unanalyzed callee: void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
            }
        }
    }
    //#NowPlayingCommand.java:95: end of method: void com.dmdirc.addons.nowplaying.NowPlayingCommand.execute(InputWindow, Server, MessageTarget, bool, CommandArguments)
    
    /**
     * Outputs a list of sources for the nowplaying command.
     *
     * @param origin The input window where the command was entered
     * @param isSilent Whether this command is being silenced
     */
    private void doSourceList(final InputWindow origin, final boolean isSilent) {
        final List<MediaSource> sources = parent.getSources();
    //#NowPlayingCommand.java:104: method: void com.dmdirc.addons.nowplaying.NowPlayingCommand.doSourceList(InputWindow, bool)
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/DcopMediaSourcePlugin.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/mediasource_windows/WindowsMediaSourcePlugin.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/AmarokSource]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/KaffeineSource]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/NoatunSource]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_windows/DllSource]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/nowplaying/MediaSource]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[others]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/DcopMediaSourcePlugin]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[com/dmdirc/addons/mediasource_windows/WindowsMediaSourcePlugin]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[com/dmdirc/addons/nowplaying/MediaSourceManager]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[others]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/MediaSourceState.CLOSED
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Descendant_Table[com/dmdirc/addons/nowplaying/NowPlayingPlugin]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Descendant_Table[others]
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Dispatch_Table.doSubstitution(Ljava/lang/String;Lcom/dmdirc/addons/nowplaying/MediaSource;)Ljava/lang/String;
    //#input(void doSourceList(InputWindow, bool)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(void doSourceList(InputWindow, bool)): isSilent
    //#input(void doSourceList(InputWindow, bool)): origin
    //#input(void doSourceList(InputWindow, bool)): this
    //#input(void doSourceList(InputWindow, bool)): this.parent
    //#input(void doSourceList(InputWindow, bool)): this.parent.__Tag
    //#input(void doSourceList(InputWindow, bool)): this.parent.managers
    //#input(void doSourceList(InputWindow, bool)): this.parent.sources
    //#pre[4] (void doSourceList(InputWindow, bool)): this.parent != null
    //#pre[5] (void doSourceList(InputWindow, bool)): this.parent.__Tag == com/dmdirc/addons/nowplaying/NowPlayingPlugin
    //#pre[6] (void doSourceList(InputWindow, bool)): this.parent.managers != null
    //#presumption(void doSourceList(InputWindow, bool)): getState(...).niceName@117 != null
    //#presumption(void doSourceList(InputWindow, bool)): getState(...)@117 != null
    //#presumption(void doSourceList(InputWindow, bool)): java.util.Iterator:next(...).__Tag@113 in {com/dmdirc/addons/mediasource_dcop/AmarokSource, com/dmdirc/addons/mediasource_dcop/KaffeineSource, com/dmdirc/addons/mediasource_dcop/NoatunSource, com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin, com/dmdirc/addons/mediasource_windows/DllSource, com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource, com/dmdirc/addons/nowplaying/MediaSource}
    //#presumption(void doSourceList(InputWindow, bool)): java.util.Iterator:next(...)@113 != null
    //#presumption(void doSourceList(InputWindow, bool)): java.util.List:size(...)@110 >= 1
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getState
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getAppName
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:com.dmdirc.addons.nowplaying.NowPlayingPlugin:getDomain
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:com.dmdirc.config.ConfigManager:getOption
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:doSubstitution
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getSources
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getArtist
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getTitle
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getAlbum
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getBitrate
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getFormat
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getLength
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:getTime
    //#unanalyzed(void doSourceList(InputWindow, bool)): Effects-of-calling:java.lang.String:replaceAll
    //#test_vector(void doSourceList(InputWindow, bool)): getState(...)@116: Addr_Set{&com.dmdirc.addons.nowplaying.MediaSourceState__static_init.new MediaSourceState(MediaSourceState__static_init#1)}, Inverse{&com.dmdirc.addons.nowplaying.MediaSourceState__static_init.new MediaSourceState(MediaSourceState__static_init#1)}
    //#test_vector(void doSourceList(InputWindow, bool)): java.util.Iterator:hasNext(...)@113: {0}, {1}
    //#test_vector(void doSourceList(InputWindow, bool)): java.util.List:isEmpty(...)@106: {0}, {1}
        
        if (sources.isEmpty()) {
            sendLine(origin, isSilent, FORMAT_ERROR, "No media sources available.");
    //#NowPlayingCommand.java:107: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void doSourceList(InputWindow, bool)
    //#    unanalyzed callee: void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
        } else {
            final String[] headers = {"Source", "Status", "Information"};
            final String[][] data = new String[sources.size()][3];
            int i = 0;
            
            for (MediaSource source : sources) {
                data[i][0] = source.getAppName();
    //#NowPlayingCommand.java:114: ?array index out of bounds
    //#    i < data.length
    //#    severity: MEDIUM
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void doSourceList(InputWindow, bool)
    //#    basic block: bb_14
    //#    assertion: i < data.length
    //#    VN: -(i - java.util.List:size(...)@110)
    //#    Expected: {1..+Inf}
    //#    Bad: {0}
    //#    Attribs:  Int  Bad singleton  Bad overlaps +/-1000  Bad < Exp
    //#NowPlayingCommand.java:114: Warning: call too complex - analysis skipped
    //#    call on String getAppName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void doSourceList(InputWindow, bool)
    //#    unanalyzed callee: String getAppName()
                
                if (source.getState() != MediaSourceState.CLOSED) {
    //#NowPlayingCommand.java:116: Warning: call too complex - analysis skipped
    //#    call on MediaSourceState getState()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void doSourceList(InputWindow, bool)
    //#    unanalyzed callee: MediaSourceState getState()
                    data[i][1] = source.getState().getNiceName().toLowerCase();
    //#NowPlayingCommand.java:117: Warning: call too complex - analysis skipped
    //#    call on MediaSourceState getState()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void doSourceList(InputWindow, bool)
    //#    unanalyzed callee: MediaSourceState getState()
                    data[i][2] = getInformation(source);
                } else {
                    data[i][1] = "not running";
                    data[i][2] = "-";
                }
                
                i++;
            }
            
            sendLine(origin, isSilent, FORMAT_OUTPUT, doTable(headers, data));
    //#NowPlayingCommand.java:127: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nowplaying.NowPlayingCommand:doTable(String[], String[][])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void doSourceList(InputWindow, bool)
    //#    unanalyzed callee: String com.dmdirc.addons.nowplaying.NowPlayingCommand:doTable(String[], String[][])
    //#NowPlayingCommand.java:127: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: void doSourceList(InputWindow, bool)
    //#    unanalyzed callee: void com.dmdirc.addons.nowplaying.NowPlayingCommand:sendLine(InputWindow, bool, String, Object[])
        }
    }
    //#NowPlayingCommand.java:129: end of method: void com.dmdirc.addons.nowplaying.NowPlayingCommand.doSourceList(InputWindow, bool)
       
    /**
     * Returns a formatted information string from the requested soruce.
     *
     * @param source MediaSource to query
     *
     * @return Formatted information string
     */ 
    private String getInformation(final MediaSource source) {
        return parent.doSubstitution(IdentityManager.getGlobalConfig()
    //#NowPlayingCommand.java:139: method: String com.dmdirc.addons.nowplaying.NowPlayingCommand.getInformation(MediaSource)
    //#NowPlayingCommand.java:139: Warning: method not available - call not analyzed
    //#    call on ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: String getInformation(MediaSource)
    //#    unanalyzed callee: ConfigManager com.dmdirc.config.IdentityManager:getGlobalConfig()
    //#NowPlayingCommand.java:139: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.addons.nowplaying.NowPlayingPlugin:getDomain()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: String getInformation(MediaSource)
    //#    unanalyzed callee: String com.dmdirc.addons.nowplaying.NowPlayingPlugin:getDomain()
    //#NowPlayingCommand.java:139: Warning: method not available - call not analyzed
    //#    call on String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: String getInformation(MediaSource)
    //#    unanalyzed callee: String com.dmdirc.config.ConfigManager:getOption(String, String)
    //#NowPlayingCommand.java:139: Warning: suspicious precondition
    //#    The precondition for source.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: String getInformation(MediaSource)
    //#    suspicious precondition index: [2]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/AmarokSource]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/KaffeineSource]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/NoatunSource]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_windows/DllSource]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/nowplaying/MediaSource]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[others]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getAlbum()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getArtist()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getBitrate()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getFormat()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getLength()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getTime()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getTitle()Ljava/lang/String;
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Descendant_Table[com/dmdirc/addons/nowplaying/NowPlayingPlugin]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Descendant_Table[others]
    //#input(String getInformation(MediaSource)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Dispatch_Table.doSubstitution(Ljava/lang/String;Lcom/dmdirc/addons/nowplaying/MediaSource;)Ljava/lang/String;
    //#input(String getInformation(MediaSource)): source
    //#input(String getInformation(MediaSource)): source.__Tag
    //#input(String getInformation(MediaSource)): this
    //#input(String getInformation(MediaSource)): this.parent
    //#input(String getInformation(MediaSource)): this.parent.__Tag
    //#output(String getInformation(MediaSource)): return_value
    //#pre[1] (String getInformation(MediaSource)): source != null
    //#pre[2] (String getInformation(MediaSource)): source.__Tag in {com/dmdirc/addons/mediasource_dcop/AmarokSource, com/dmdirc/addons/mediasource_dcop/KaffeineSource, com/dmdirc/addons/mediasource_dcop/NoatunSource, com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin, com/dmdirc/addons/mediasource_windows/DllSource, com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource, com/dmdirc/addons/nowplaying/MediaSource}
    //#pre[4] (String getInformation(MediaSource)): this.parent != null
    //#pre[5] (String getInformation(MediaSource)): this.parent.__Tag == com/dmdirc/addons/nowplaying/NowPlayingPlugin
    //#presumption(String getInformation(MediaSource)): com.dmdirc.config.ConfigManager:getOption(...)@139 != null
    //#presumption(String getInformation(MediaSource)): com.dmdirc.config.IdentityManager:getGlobalConfig(...)@139 != null
    //#post(String getInformation(MediaSource)): return_value != null
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:getState
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:getAppName
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:getArtist
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:getTitle
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:getAlbum
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:getBitrate
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:getFormat
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:getLength
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:getTime
    //#unanalyzed(String getInformation(MediaSource)): Effects-of-calling:java.lang.String:replaceAll
    //#NowPlayingCommand.java:139: end of method: String com.dmdirc.addons.nowplaying.NowPlayingCommand.getInformation(MediaSource)
                .getOption(parent.getDomain(), "format"), source);
    }
    
    /** {@inheritDoc}. */
    @Override
    public String getName() {
        return "nowplaying";
    //#NowPlayingCommand.java:146: method: String com.dmdirc.addons.nowplaying.NowPlayingCommand.getName()
    //#output(String getName()): return_value
    //#post(String getName()): return_value == &"nowplaying"
    //#NowPlayingCommand.java:146: end of method: String com.dmdirc.addons.nowplaying.NowPlayingCommand.getName()
    }
    
    /** {@inheritDoc}. */
    @Override
    public boolean showInHelp() {
        return true;
    //#NowPlayingCommand.java:152: method: bool com.dmdirc.addons.nowplaying.NowPlayingCommand.showInHelp()
    //#output(bool showInHelp()): return_value
    //#post(bool showInHelp()): return_value == 1
    //#NowPlayingCommand.java:152: end of method: bool com.dmdirc.addons.nowplaying.NowPlayingCommand.showInHelp()
    }
    
    /** {@inheritDoc}. */
    @Override
    public String getHelp() {
        return "nowplaying [--sources|--source <source>] - " +
    //#NowPlayingCommand.java:158: method: String com.dmdirc.addons.nowplaying.NowPlayingCommand.getHelp()
    //#output(String getHelp()): return_value
    //#post(String getHelp()): return_value == &"nowplaying [--sources|--source <source>] - tells the channel the song you're currently playing"
    //#NowPlayingCommand.java:158: end of method: String com.dmdirc.addons.nowplaying.NowPlayingCommand.getHelp()
                "tells the channel the song you're currently playing";
    }
    
    /** {@inheritDoc} */
    @Override
    public AdditionalTabTargets getSuggestions(final int arg, 
            final List<String> previousArgs) {
        final AdditionalTabTargets res = new AdditionalTabTargets();
    //#NowPlayingCommand.java:166: method: AdditionalTabTargets com.dmdirc.addons.nowplaying.NowPlayingCommand.getSuggestions(int, List)
    //#NowPlayingCommand.java:166: Warning: method not available - call not analyzed
    //#    call on void com.dmdirc.ui.input.AdditionalTabTargets()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: void com.dmdirc.ui.input.AdditionalTabTargets()
    //#input(AdditionalTabTargets getSuggestions(int, List)): arg
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_dcop/AmarokSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_dcop/DcopMediaSourcePlugin.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_dcop/KaffeineSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_dcop/NoatunSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_windows/DllSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/mediasource_windows/WindowsMediaSourcePlugin.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/AmarokSource]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/KaffeineSource]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/NoatunSource]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/mediasource_windows/DllSource]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[com/dmdirc/addons/nowplaying/MediaSource]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Descendant_Table[others]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getAppName()Ljava/lang/String;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSource.__Dispatch_Table.getState()Lcom/dmdirc/addons/nowplaying/MediaSourceState;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[com/dmdirc/addons/mediasource_dcop/DcopMediaSourcePlugin]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[com/dmdirc/addons/mediasource_windows/WindowsMediaSourcePlugin]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[com/dmdirc/addons/nowplaying/MediaSourceManager]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Descendant_Table[others]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSourceManager.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/MediaSourceState.CLOSED
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Descendant_Table[com/dmdirc/addons/nowplaying/NowPlayingPlugin]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Descendant_Table[others]
    //#input(AdditionalTabTargets getSuggestions(int, List)): com/dmdirc/addons/nowplaying/NowPlayingPlugin.__Dispatch_Table.getSources()Ljava/util/List;
    //#input(AdditionalTabTargets getSuggestions(int, List)): previousArgs
    //#input(AdditionalTabTargets getSuggestions(int, List)): this
    //#input(AdditionalTabTargets getSuggestions(int, List)): this.parent
    //#input(AdditionalTabTargets getSuggestions(int, List)): this.parent.__Tag
    //#input(AdditionalTabTargets getSuggestions(int, List)): this.parent.managers
    //#input(AdditionalTabTargets getSuggestions(int, List)): this.parent.sources
    //#output(AdditionalTabTargets getSuggestions(int, List)): new AdditionalTabTargets(getSuggestions#1) num objects
    //#output(AdditionalTabTargets getSuggestions(int, List)): return_value
    //#new obj(AdditionalTabTargets getSuggestions(int, List)): new AdditionalTabTargets(getSuggestions#1)
    //#pre[2] (AdditionalTabTargets getSuggestions(int, List)): (soft) previousArgs != null
    //#pre[4] (AdditionalTabTargets getSuggestions(int, List)): (soft) this.parent != null
    //#pre[5] (AdditionalTabTargets getSuggestions(int, List)): (soft) this.parent.__Tag == com/dmdirc/addons/nowplaying/NowPlayingPlugin
    //#pre[6] (AdditionalTabTargets getSuggestions(int, List)): (soft) this.parent.managers != null
    //#presumption(AdditionalTabTargets getSuggestions(int, List)): java.util.Iterator:next(...).__Tag@174 in {com/dmdirc/addons/mediasource_dcop/AmarokSource, com/dmdirc/addons/mediasource_dcop/KaffeineSource, com/dmdirc/addons/mediasource_dcop/NoatunSource, com/dmdirc/addons/mediasource_vlc/VlcMediaSourcePlugin, com/dmdirc/addons/mediasource_windows/DllSource, com/dmdirc/addons/nowplaying/ConfigPanel$DummyMediaSource, com/dmdirc/addons/nowplaying/MediaSource}
    //#presumption(AdditionalTabTargets getSuggestions(int, List)): java.util.Iterator:next(...)@174 != null
    //#presumption(AdditionalTabTargets getSuggestions(int, List)): java.util.List:get(...)@173 != null
    //#post(AdditionalTabTargets getSuggestions(int, List)): return_value == &new AdditionalTabTargets(getSuggestions#1)
    //#post(AdditionalTabTargets getSuggestions(int, List)): new AdditionalTabTargets(getSuggestions#1) num objects == 1
    //#unanalyzed(AdditionalTabTargets getSuggestions(int, List)): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(AdditionalTabTargets getSuggestions(int, List)): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(AdditionalTabTargets getSuggestions(int, List)): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(AdditionalTabTargets getSuggestions(int, List)): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(AdditionalTabTargets getSuggestions(int, List)): Effects-of-calling:getSources
    //#unanalyzed(AdditionalTabTargets getSuggestions(int, List)): Effects-of-calling:java.util.List:addAll
    //#test_vector(AdditionalTabTargets getSuggestions(int, List)): arg: {-2_147_483_648..-1, 2..4_294_967_295}, {0}, {1}
    //#test_vector(AdditionalTabTargets getSuggestions(int, List)): getState(...)@175: Addr_Set{&com.dmdirc.addons.nowplaying.MediaSourceState__static_init.new MediaSourceState(MediaSourceState__static_init#1)}, Inverse{&com.dmdirc.addons.nowplaying.MediaSourceState__static_init.new MediaSourceState(MediaSourceState__static_init#1)}
    //#test_vector(AdditionalTabTargets getSuggestions(int, List)): java.lang.String:equalsIgnoreCase(...)@173: {0}, {1}
    //#test_vector(AdditionalTabTargets getSuggestions(int, List)): java.util.Iterator:hasNext(...)@174: {0}, {1}
        
        res.excludeAll();
    //#NowPlayingCommand.java:168: Warning: method not available - call not analyzed
    //#    call on AdditionalTabTargets com.dmdirc.ui.input.AdditionalTabTargets:excludeAll()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: AdditionalTabTargets com.dmdirc.ui.input.AdditionalTabTargets:excludeAll()
        
        if (arg == 0) {
            res.add("--sources");
    //#NowPlayingCommand.java:171: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
            res.add("--source");
    //#NowPlayingCommand.java:172: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
        } else if (arg == 1 && previousArgs.get(0).equalsIgnoreCase("--source")) {
            for (MediaSource source : parent.getSources()) {
                if (source.getState() != MediaSourceState.CLOSED) {
    //#NowPlayingCommand.java:175: Warning: call too complex - analysis skipped
    //#    call on MediaSourceState getState()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: MediaSourceState getState()
                    res.add(source.getAppName());
    //#NowPlayingCommand.java:176: Warning: call too complex - analysis skipped
    //#    call on String getAppName()
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: String getAppName()
    //#NowPlayingCommand.java:176: Warning: method not available - call not analyzed
    //#    call on bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.addons.nowplaying.NowPlayingCommand
    //#    method: AdditionalTabTargets getSuggestions(int, List)
    //#    unanalyzed callee: bool com.dmdirc.ui.input.AdditionalTabTargets:add(Object)
                }
            }
        }
        
        return res;
    //#NowPlayingCommand.java:181: end of method: AdditionalTabTargets com.dmdirc.addons.nowplaying.NowPlayingCommand.getSuggestions(int, List)
    }
    
}
    //#output(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Descendant_Table[com/dmdirc/addons/nowplaying/NowPlayingCommand]
    //#output(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.doSourceList(Lcom/dmdirc/ui/interfaces/InputWindow;Z)V
    //#output(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.execute(Lcom/dmdirc/ui/interfaces/InputWindow;Lcom/dmdirc/Server;Lcom/dmdirc/MessageTarget;ZLcom/dmdirc/commandparser/CommandArguments;)V
    //#output(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.getHelp()Ljava/lang/String;
    //#output(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.getInformation(Lcom/dmdirc/addons/nowplaying/MediaSource;)Ljava/lang/String;
    //#output(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.getName()Ljava/lang/String;
    //#output(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.getSuggestions(ILjava/util/List;)Lcom/dmdirc/ui/input/AdditionalTabTargets;
    //#output(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.showInHelp()Z
    //#post(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Descendant_Table[com/dmdirc/addons/nowplaying/NowPlayingCommand] == &__Dispatch_Table
    //#post(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.doSourceList(Lcom/dmdirc/ui/interfaces/InputWindow;Z)V == &doSourceList
    //#post(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.execute(Lcom/dmdirc/ui/interfaces/InputWindow;Lcom/dmdirc/Server;Lcom/dmdirc/MessageTarget;ZLcom/dmdirc/commandparser/CommandArguments;)V == &execute
    //#post(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.getHelp()Ljava/lang/String; == &getHelp
    //#post(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.getInformation(Lcom/dmdirc/addons/nowplaying/MediaSource;)Ljava/lang/String; == &getInformation
    //#post(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.getName()Ljava/lang/String; == &getName
    //#post(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.getSuggestions(ILjava/util/List;)Lcom/dmdirc/ui/input/AdditionalTabTargets; == &getSuggestions
    //#post(com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init): __Dispatch_Table.showInHelp()Z == &showInHelp
    //#NowPlayingCommand.java:: end of method: com.dmdirc.addons.nowplaying.NowPlayingCommand.com.dmdirc.addons.nowplaying.NowPlayingCommand__static_init
    //#NowPlayingCommand.java:: end of class: com.dmdirc.addons.nowplaying.NowPlayingCommand
