//# 1 errors, 499 messages
//#
/*
    //#ActionCondition.java:1:1: class: com.dmdirc.actions.ActionCondition
    //#ActionCondition.java:1:1: method: com.dmdirc.actions.ActionCondition.com.dmdirc.actions.ActionCondition__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.actions;

import com.dmdirc.actions.interfaces.ActionComparison;
import com.dmdirc.actions.interfaces.ActionComponent;

/**
 * An action condition represents one condition within an action.
 * @author chris
 */
public class ActionCondition {
    
    /** The argument number that this action condition applies to. */
    private int arg;
    
    /** The component that this action condition applies to. */
    private ActionComponent component;
    
    /** The comparison that should be used for this condition. */
    private ActionComparison comparison;
    
    /** The target of the comparison for this condition. */
    private String target = "";
    
    /** The source target for this comparison. */
    private String starget = "";
    
    /**
     * Creates a new instance of ActionCondition that compares the output of
     * a component to a string.
     * 
     * @param arg The argument number to be tested
     * @param component The component to be tested
     * @param comparison The comparison to be used
     * @param target The target of the comparison
     */
    public ActionCondition(final int arg, final ActionComponent component,
            final ActionComparison comparison, final String target) {
        super();
    //#ActionCondition.java:60: method: void com.dmdirc.actions.ActionCondition.com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)
    //#input(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): arg
    //#input(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): comparison
    //#input(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): component
    //#input(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): target
    //#input(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this
    //#output(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.arg
    //#output(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.comparison
    //#output(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.component
    //#output(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.starget
    //#output(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.target
    //#post(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.arg == arg
    //#post(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): init'ed(this.arg)
    //#post(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.comparison == comparison
    //#post(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): init'ed(this.comparison)
    //#post(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.component == component
    //#post(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): init'ed(this.component)
    //#post(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.starget == &""
    //#post(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): this.target == target
    //#post(void com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)): init'ed(this.target)
        
        this.arg = arg;
        this.component = component;
        this.comparison = comparison;
        this.target = target;
    }
    //#ActionCondition.java:66: end of method: void com.dmdirc.actions.ActionCondition.com.dmdirc.actions.ActionCondition(int, ActionComponent, ActionComparison, String)
    
    /**
     * Creates a new instance of ActionCondition that compares two strings.
     * 
     * @param starget The first target for comparison.
     * @param comparison The comparison to be used
     * @param target The second target for the comparison
     */
    public ActionCondition(final String starget, final ActionComparison comparison,
            final String target) {
        super();
    //#ActionCondition.java:77: method: void com.dmdirc.actions.ActionCondition.com.dmdirc.actions.ActionCondition(String, ActionComparison, String)
    //#input(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): comparison
    //#input(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): starget
    //#input(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): target
    //#input(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): this
    //#output(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): this.arg
    //#output(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): this.comparison
    //#output(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): this.starget
    //#output(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): this.target
    //#post(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): this.arg == -1
    //#post(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): this.comparison == comparison
    //#post(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): init'ed(this.comparison)
    //#post(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): this.starget == starget
    //#post(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): init'ed(this.starget)
    //#post(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): this.target == target
    //#post(void com.dmdirc.actions.ActionCondition(String, ActionComparison, String)): init'ed(this.target)
        
        this.arg = -1;
        this.starget = starget;
        this.comparison = comparison;
        this.target = target;
    }
    //#ActionCondition.java:83: end of method: void com.dmdirc.actions.ActionCondition.com.dmdirc.actions.ActionCondition(String, ActionComparison, String)
    
    /**
     * Tests to see if this condition holds.
     * 
     * @param sub The substitutor to use for this
     * @param args The event arguments to be tested
     * @return True if the condition holds, false otherwise
     */
    public boolean test(final ActionSubstitutor sub, final Object ... args) {
        final String thisTarget = sub.doSubstitution(getTarget(), args);
    //#ActionCondition.java:93: method: bool com.dmdirc.actions.ActionCondition.test(ActionSubstitutor, Object[])
    //#ActionCondition.java:93: Warning: unused assignment in callee
    //#    Unused assignment to (java.lang.StringBuilder:toString(...)._tainted) in doSubstitution
    //#    severity: LOW
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#ActionCondition.java:93: Warning: suspicious precondition
    //#    The precondition for args[0].__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [5]
    //#    Attribs:  Soft
    //#ActionCondition.java:93: Warning: suspicious precondition
    //#    The precondition for sub.type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [25]
    //#ActionCondition.java:93: Warning: suspicious precondition
    //#    The precondition for sub.type.type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [28]
    //#    Attribs:  Soft
    //#ActionCondition.java:93: Warning: suspicious precondition
    //#    The precondition for sub.type.type.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [29]
    //#    Attribs:  Soft
    //#ActionCondition.java:93: Warning: suspicious precondition
    //#    The precondition for this.comparison.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    suspicious precondition index: [34]
    //#input(bool test(ActionSubstitutor, Object[])): "$"._tainted
    //#input(bool test(ActionSubstitutor, Object[])): "${"._tainted
    //#input(bool test(ActionSubstitutor, Object[])): "-"._tainted
    //#input(bool test(ActionSubstitutor, Object[])): "."._tainted
    //#input(bool test(ActionSubstitutor, Object[])): "}"._tainted
    //#input(bool test(ActionSubstitutor, Object[])): __Descendant_Table[com/dmdirc/actions/ActionCondition]
    //#input(bool test(ActionSubstitutor, Object[])): __Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): __Dispatch_Table.getArg()I
    //#input(bool test(ActionSubstitutor, Object[])): __Dispatch_Table.getComparison()Lcom/dmdirc/actions/interfaces/ActionComparison;
    //#input(bool test(ActionSubstitutor, Object[])): __Dispatch_Table.getComponent()Lcom/dmdirc/actions/interfaces/ActionComponent;
    //#input(bool test(ActionSubstitutor, Object[])): __Dispatch_Table.getTarget()Ljava/lang/String;
    //#input(bool test(ActionSubstitutor, Object[])): args
    //#input(bool test(ActionSubstitutor, Object[])): args.length
    //#input(bool test(ActionSubstitutor, Object[])): args[0]
    //#input(bool test(ActionSubstitutor, Object[])): args[0].__Tag
    //#input(bool test(ActionSubstitutor, Object[])): args[1]
    //#input(bool test(ActionSubstitutor, Object[])): args[1]._tainted
    //#input(bool test(ActionSubstitutor, Object[])): args[1].length
    //#input(bool test(ActionSubstitutor, Object[])): args[2]
    //#input(bool test(ActionSubstitutor, Object[])): args[2]._tainted
    //#input(bool test(ActionSubstitutor, Object[])): args[2].length
    //#input(bool test(ActionSubstitutor, Object[])): args[3..4_294_967_295]
    //#input(bool test(ActionSubstitutor, Object[])): args[3..4_294_967_295].__Tag
    //#input(bool test(ActionSubstitutor, Object[])): args[3..4_294_967_295]._tainted
    //#input(bool test(ActionSubstitutor, Object[])): args[3..4_294_967_295].length
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Channel.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/CustomWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Channel]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/CustomWindow]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/FrameContainer]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/GlobalWindow]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/MessageTarget]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Query]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Raw]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/Server]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/WritableFrameContainer]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCChatWindow]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCFrame]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCPlugin$3]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[com/dmdirc/addons/dcc/DCCSendWindow]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/FrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/GlobalWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/MessageTarget.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Query.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Raw.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Server.__Descendant_Table[com/dmdirc/Server]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Server.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Server.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/Server.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/ServerState.CONNECTED
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/ServerStatus.__Descendant_Table[com/dmdirc/ServerStatus]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/ServerStatus.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/ServerStatus.__Dispatch_Table.getState()Lcom/dmdirc/ServerState;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/WritableFrameContainer.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionComponentChain.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionComponentChain.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionManager.actionComponents
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionSubstitutor.__Descendant_Table[com/dmdirc/actions/ActionSubstitutor]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionSubstitutor.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/ActionSubstitutor.__Dispatch_Table.doSubstitution(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$1.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$10.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$11.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$12.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$2.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$3.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$4.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$5.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$6.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$7.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$8.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison$9.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComparison.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$1.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$1.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$10.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$10.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$11.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$11.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$12.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$12.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$13.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$13.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$14.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$14.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$15.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$15.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$16.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$16.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$17.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$17.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$18.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$18.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$19.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$19.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$2.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$2.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$20.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$20.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$21.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$21.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$22.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$22.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$23.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$23.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$24.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$24.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$25.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$25.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$26.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$26.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$27.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$27.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$3.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$3.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$4.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$4.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$5.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$5.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$6.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$6.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$7.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$7.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$8.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$8.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$9.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent$9.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionComponent.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/CoreActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$10]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$11]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$12]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$1]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$2]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$3]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$4]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$5]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$6]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$7]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$8]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison$9]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/CoreActionComparison]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[com/dmdirc/actions/interfaces/ActionComparison]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComparison.__Dispatch_Table.test(Ljava/lang/Object;Ljava/lang/Object;)Z
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComponent.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComponent.__Dispatch_Table.appliesTo()Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionComponent.__Dispatch_Table.get(Ljava/lang/Object;)Ljava/lang/Object;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionMetaType]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ActionEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ChannelEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ClientEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/PluginEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/QueryEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/actions/metatypes/ServerEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCEvents]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionMetaType.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/CoreActionType]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/actions/interfaces/ActionType]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[com/dmdirc/addons/dcc/actions/DCCActions]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Descendant_Table[others]
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/interfaces/ActionType.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/ActionEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/ChannelEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/ClientEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/PluginEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/QueryEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/actions/metatypes/ServerEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/DCCChatWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/DCCFrame.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/DCCPlugin$3.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/DCCSendWindow.__Dispatch_Table.getServer()Lcom/dmdirc/Server;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/actions/DCCActions.__Dispatch_Table.getType()Lcom/dmdirc/actions/interfaces/ActionMetaType;
    //#input(bool test(ActionSubstitutor, Object[])): com/dmdirc/addons/dcc/actions/DCCEvents.__Dispatch_Table.getArgTypes()[Ljava/lang/Class;
    //#input(bool test(ActionSubstitutor, Object[])): sub
    //#input(bool test(ActionSubstitutor, Object[])): sub.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): sub.type
    //#input(bool test(ActionSubstitutor, Object[])): sub.type.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): sub.type.type
    //#input(bool test(ActionSubstitutor, Object[])): sub.type.type.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): this
    //#input(bool test(ActionSubstitutor, Object[])): this.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): this.arg
    //#input(bool test(ActionSubstitutor, Object[])): this.comparison
    //#input(bool test(ActionSubstitutor, Object[])): this.comparison.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): this.component
    //#input(bool test(ActionSubstitutor, Object[])): this.component.__Tag
    //#input(bool test(ActionSubstitutor, Object[])): this.starget
    //#input(bool test(ActionSubstitutor, Object[])): this.starget._tainted
    //#input(bool test(ActionSubstitutor, Object[])): this.target
    //#input(bool test(ActionSubstitutor, Object[])): this.target._tainted
    //#output(bool test(ActionSubstitutor, Object[])): return_value
    //#pre[1] (bool test(ActionSubstitutor, Object[])): args != null
    //#pre[22] (bool test(ActionSubstitutor, Object[])): sub != null
    //#pre[23] (bool test(ActionSubstitutor, Object[])): sub.__Tag == com/dmdirc/actions/ActionSubstitutor
    //#pre[24] (bool test(ActionSubstitutor, Object[])): sub.type != null
    //#pre[25] (bool test(ActionSubstitutor, Object[])): sub.type.__Tag in {com/dmdirc/actions/CoreActionType, com/dmdirc/actions/interfaces/ActionType, com/dmdirc/addons/dcc/actions/DCCActions}
    //#pre[31] (bool test(ActionSubstitutor, Object[])): this.__Tag == com/dmdirc/actions/ActionCondition
    //#pre[32] (bool test(ActionSubstitutor, Object[])): this.arg >= -1
    //#pre[33] (bool test(ActionSubstitutor, Object[])): this.comparison != null
    //#pre[34] (bool test(ActionSubstitutor, Object[])): this.comparison.__Tag in {com/dmdirc/actions/CoreActionComparison, com/dmdirc/actions/CoreActionComparison$1, com/dmdirc/actions/CoreActionComparison$10, com/dmdirc/actions/CoreActionComparison$11, com/dmdirc/actions/CoreActionComparison$12, com/dmdirc/actions/CoreActionComparison$2, com/dmdirc/actions/CoreActionComparison$3, com/dmdirc/actions/CoreActionComparison$4, com/dmdirc/actions/CoreActionComparison$5, com/dmdirc/actions/CoreActionComparison$6, com/dmdirc/actions/CoreActionComparison$7, com/dmdirc/actions/CoreActionComparison$8, com/dmdirc/actions/CoreActionComparison$9, com/dmdirc/actions/interfaces/ActionComparison}
    //#pre[39] (bool test(ActionSubstitutor, Object[])): init'ed(this.target)
    //#pre[3] (bool test(ActionSubstitutor, Object[])): (soft) this.arg < args.length
    //#pre[4] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(args[0])
    //#pre[5] (bool test(ActionSubstitutor, Object[])): (soft) args[0].__Tag in {com/dmdirc/Channel, com/dmdirc/CustomWindow, com/dmdirc/FrameContainer, com/dmdirc/GlobalWindow, com/dmdirc/MessageTarget, com/dmdirc/Query, com/dmdirc/Raw, com/dmdirc/Server, com/dmdirc/WritableFrameContainer, com/dmdirc/addons/dcc/DCCChatWindow, com/dmdirc/addons/dcc/DCCFrame, com/dmdirc/addons/dcc/DCCPlugin$3, com/dmdirc/addons/dcc/DCCSendWindow}
    //#pre[6] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(args[1])
    //#pre[8] (bool test(ActionSubstitutor, Object[])): (soft) args[1].length in {1..4_294_967_295}
    //#pre[10] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(args[2])
    //#pre[12] (bool test(ActionSubstitutor, Object[])): (soft) args[2].length in {1..4_294_967_295}
    //#pre[14] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(args[3..4_294_967_295])
    //#pre[26] (bool test(ActionSubstitutor, Object[])): (soft) sub.type.type != null
    //#pre[27] (bool test(ActionSubstitutor, Object[])): (soft) sub.type.type != null
    //#pre[28] (bool test(ActionSubstitutor, Object[])): (soft) sub.type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#pre[29] (bool test(ActionSubstitutor, Object[])): (soft) sub.type.type.__Tag in {com/dmdirc/actions/interfaces/ActionMetaType, com/dmdirc/actions/metatypes/ActionEvents, com/dmdirc/actions/metatypes/ChannelEvents, com/dmdirc/actions/metatypes/ClientEvents, com/dmdirc/actions/metatypes/PluginEvents, com/dmdirc/actions/metatypes/QueryEvents, com/dmdirc/actions/metatypes/ServerEvents, com/dmdirc/addons/dcc/actions/DCCEvents}
    //#pre[35] (bool test(ActionSubstitutor, Object[])): (soft) this.component != null
    //#pre[37] (bool test(ActionSubstitutor, Object[])): (soft) init'ed(this.starget)
    //#post(bool test(ActionSubstitutor, Object[])): init'ed(return_value)
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:com.dmdirc.config.IdentityManager:getGlobalConfig
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:com.dmdirc.config.ConfigManager:getOptions
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder:indexOf
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.String:length
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder:replace
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Map:entrySet
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Set:iterator
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder:append
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Map$Entry:getKey
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuilder:toString
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.Map$Entry:getValue
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:[Ljava.lang.String;:instanceof
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.String:instanceof
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.String:split
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuffer
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuffer:length
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuffer:insert
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.StringBuffer:toString
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:doServerSubstitutions
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:doComponentSubstitutions
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getServer
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getState
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:com.dmdirc.ServerState:equals
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getCompatibleComponents
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Object:toString
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:get
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getType
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:getArgTypes
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:com.dmdirc.logger.Logger:assertTrue
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.util.List:add
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:java.lang.Object:equals
    //#unanalyzed(bool test(ActionSubstitutor, Object[])): Effects-of-calling:appliesTo
    //#test_vector(bool test(ActionSubstitutor, Object[])): this.arg: {0..4_294_967_295}, {-1}
        
        if (arg == -1) { 
            final String thisStarget = sub.doSubstitution(starget, args);
    //#ActionCondition.java:96: Warning: unused assignment in callee
    //#    Unused assignment to (java.lang.StringBuilder:toString(...)._tainted) in doSubstitution
    //#    severity: LOW
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
            return getComparison().test(thisStarget, thisTarget);
    //#ActionCondition.java:97: Warning: call too complex - analysis skipped
    //#    call on bool test(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    unanalyzed callee: bool test(Object, Object)
        } else {
            return getComparison().test(getComponent().get(args[getArg()]), thisTarget);
    //#ActionCondition.java:99: ?null dereference
    //#    com/dmdirc/actions/interfaces/ActionComponent.__Descendant_Table[getComponent(...).__Tag] != null
    //#    severity: SUPPRESSED
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    basic block: bb_3
    //#    assertion: com/dmdirc/actions/interfaces/ActionComponent.__Descendant_Table[getComponent(...).__Tag] != null
    //#    VN: com/dmdirc/actions/interfaces/ActionComponent.__Descendant_Table[getComponent(...).__Tag]
    //#    Expected: Inverse{null}
    //#    Bad: Addr_Set{null, Invalid}
    //#    Attribs:  Ptr  null in Bad
    //#ActionCondition.java:99: Warning: call too complex - analysis skipped
    //#    call on Object get(Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    unanalyzed callee: Object get(Object)
    //#ActionCondition.java:99: Warning: call too complex - analysis skipped
    //#    call on bool test(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: com.dmdirc.actions.ActionCondition
    //#    method: bool test(ActionSubstitutor, Object[])
    //#    unanalyzed callee: bool test(Object, Object)
    //#ActionCondition.java:99: end of method: bool com.dmdirc.actions.ActionCondition.test(ActionSubstitutor, Object[])
        }
    }
    
    /**
     * Returns the argument number this condition applies to.
     *
     * @return Argument number
     */
    public int getArg() {
        return arg;
    //#ActionCondition.java:109: method: int com.dmdirc.actions.ActionCondition.getArg()
    //#input(int getArg()): this
    //#input(int getArg()): this.arg
    //#output(int getArg()): return_value
    //#pre[2] (int getArg()): init'ed(this.arg)
    //#post(int getArg()): return_value == this.arg
    //#post(int getArg()): init'ed(return_value)
    //#ActionCondition.java:109: end of method: int com.dmdirc.actions.ActionCondition.getArg()
    }
    
    /**
     * Returns the component this condition applies to.
     *
     * @return Component to apply condition to
     */
    public ActionComponent getComponent() {
        return component;
    //#ActionCondition.java:118: method: ActionComponent com.dmdirc.actions.ActionCondition.getComponent()
    //#input(ActionComponent getComponent()): this
    //#input(ActionComponent getComponent()): this.component
    //#output(ActionComponent getComponent()): return_value
    //#pre[2] (ActionComponent getComponent()): init'ed(this.component)
    //#post(ActionComponent getComponent()): return_value == this.component
    //#post(ActionComponent getComponent()): init'ed(return_value)
    //#ActionCondition.java:118: end of method: ActionComponent com.dmdirc.actions.ActionCondition.getComponent()
    }
    
    /**
     * Returns the comparison this condition applies to.
     *
     * @return Comparison to be used
     */
    public ActionComparison getComparison() {
        return comparison;
    //#ActionCondition.java:127: method: ActionComparison com.dmdirc.actions.ActionCondition.getComparison()
    //#input(ActionComparison getComparison()): this
    //#input(ActionComparison getComparison()): this.comparison
    //#output(ActionComparison getComparison()): return_value
    //#pre[2] (ActionComparison getComparison()): init'ed(this.comparison)
    //#post(ActionComparison getComparison()): return_value == this.comparison
    //#post(ActionComparison getComparison()): init'ed(return_value)
    //#ActionCondition.java:127: end of method: ActionComparison com.dmdirc.actions.ActionCondition.getComparison()
    }
    
    /**
     * Returns the target of the comparison for this condition.
     *
     * @return Target for comparison
     */
    public String getTarget() {
        return target;
    //#ActionCondition.java:136: method: String com.dmdirc.actions.ActionCondition.getTarget()
    //#input(String getTarget()): this
    //#input(String getTarget()): this.target
    //#output(String getTarget()): return_value
    //#pre[2] (String getTarget()): init'ed(this.target)
    //#post(String getTarget()): return_value == this.target
    //#post(String getTarget()): init'ed(return_value)
    //#ActionCondition.java:136: end of method: String com.dmdirc.actions.ActionCondition.getTarget()
    }
    
    /**
     * Sets the argument number this condition applies to.
     *
     * @param arg Argument number
     */
    public void setArg(final int arg) {
        this.arg = arg;
    //#ActionCondition.java:145: method: void com.dmdirc.actions.ActionCondition.setArg(int)
    //#input(void setArg(int)): arg
    //#input(void setArg(int)): this
    //#output(void setArg(int)): this.arg
    //#post(void setArg(int)): this.arg == arg
    //#post(void setArg(int)): init'ed(this.arg)
    }
    //#ActionCondition.java:146: end of method: void com.dmdirc.actions.ActionCondition.setArg(int)
    
    /**
     * Sets the component this condition applies to.
     *
     * @param component Component to apply condition to
     */
    public void setComponent(final ActionComponent component) {
        this.component = component;
    //#ActionCondition.java:154: method: void com.dmdirc.actions.ActionCondition.setComponent(ActionComponent)
    //#input(void setComponent(ActionComponent)): component
    //#input(void setComponent(ActionComponent)): this
    //#output(void setComponent(ActionComponent)): this.component
    //#post(void setComponent(ActionComponent)): this.component == component
    //#post(void setComponent(ActionComponent)): init'ed(this.component)
    }
    //#ActionCondition.java:155: end of method: void com.dmdirc.actions.ActionCondition.setComponent(ActionComponent)
    
    /**
     * Sets the comparison this condition applies to.
     *
     * @param comparison Comparison to be used
     */
    public void setComparison(final ActionComparison comparison) {
        this.comparison = comparison;
    //#ActionCondition.java:163: method: void com.dmdirc.actions.ActionCondition.setComparison(ActionComparison)
    //#input(void setComparison(ActionComparison)): comparison
    //#input(void setComparison(ActionComparison)): this
    //#output(void setComparison(ActionComparison)): this.comparison
    //#post(void setComparison(ActionComparison)): this.comparison == comparison
    //#post(void setComparison(ActionComparison)): init'ed(this.comparison)
    }
    //#ActionCondition.java:164: end of method: void com.dmdirc.actions.ActionCondition.setComparison(ActionComparison)
    
    /**
     * Sets the target of the comparison for this condition.
     * @param target Target for comparison
     */
    public void setTarget(final String target) {
        this.target = target;
    //#ActionCondition.java:171: method: void com.dmdirc.actions.ActionCondition.setTarget(String)
    //#input(void setTarget(String)): target
    //#input(void setTarget(String)): this
    //#output(void setTarget(String)): this.target
    //#post(void setTarget(String)): this.target == target
    //#post(void setTarget(String)): init'ed(this.target)
    }
    //#ActionCondition.java:172: end of method: void com.dmdirc.actions.ActionCondition.setTarget(String)

    /**
     * Retrieves the starget of this condition.
     * 
     * @return This condition's starget, or null if none was set.
     */
    public String getStarget() {
        return starget;
    //#ActionCondition.java:180: method: String com.dmdirc.actions.ActionCondition.getStarget()
    //#input(String getStarget()): this
    //#input(String getStarget()): this.starget
    //#output(String getStarget()): return_value
    //#pre[2] (String getStarget()): init'ed(this.starget)
    //#post(String getStarget()): return_value == this.starget
    //#post(String getStarget()): init'ed(return_value)
    //#ActionCondition.java:180: end of method: String com.dmdirc.actions.ActionCondition.getStarget()
    }

    /**
     * Sets the starget for this condition.
     * 
     * @param starget The new starget for this condition.
     */
    public void setStarget(final String starget) {
        this.starget = starget;
    //#ActionCondition.java:189: method: void com.dmdirc.actions.ActionCondition.setStarget(String)
    //#input(void setStarget(String)): starget
    //#input(void setStarget(String)): this
    //#output(void setStarget(String)): this.starget
    //#post(void setStarget(String)): this.starget == starget
    //#post(void setStarget(String)): init'ed(this.starget)
    }
    //#ActionCondition.java:190: end of method: void com.dmdirc.actions.ActionCondition.setStarget(String)
    
    /** {@inheritDoc} */
    @Override
    public String toString() {
        return "[ arg=" + arg + ", component=" + component + ", comparison=" 
    //#ActionCondition.java:195: method: String com.dmdirc.actions.ActionCondition.toString()
    //#input(String toString()): " ]"._tainted
    //#input(String toString()): ", comparison="._tainted
    //#input(String toString()): ", component="._tainted
    //#input(String toString()): ", starget="._tainted
    //#input(String toString()): ", target="._tainted
    //#input(String toString()): "[ arg="._tainted
    //#input(String toString()): this
    //#input(String toString()): this.arg
    //#input(String toString()): this.comparison
    //#input(String toString()): this.comparison._tainted
    //#input(String toString()): this.component
    //#input(String toString()): this.component._tainted
    //#input(String toString()): this.starget
    //#input(String toString()): this.starget._tainted
    //#input(String toString()): this.target
    //#input(String toString()): this.target._tainted
    //#output(String toString()): java.lang.StringBuilder:toString(...)._tainted
    //#output(String toString()): return_value
    //#new obj(String toString()): java.lang.StringBuilder:toString(...)
    //#pre[2] (String toString()): init'ed(this.arg)
    //#pre[3] (String toString()): init'ed(this.comparison)
    //#pre[5] (String toString()): init'ed(this.component)
    //#pre[7] (String toString()): init'ed(this.starget)
    //#pre[9] (String toString()): init'ed(this.target)
    //#post(String toString()): init'ed(java.lang.StringBuilder:toString(...)._tainted)
    //#post(String toString()): return_value == &java.lang.StringBuilder:toString(...)
    //#ActionCondition.java:195: end of method: String com.dmdirc.actions.ActionCondition.toString()
                + comparison + ", target=" + target + ", starget=" + starget + " ]";
    }

    /** {@inheritDoc} */
    @Override
    public boolean equals(final Object obj) {
        if (!(obj instanceof ActionCondition)) {
    //#ActionCondition.java:202: method: bool com.dmdirc.actions.ActionCondition.equals(Object)
    //#input(bool equals(Object)): __Descendant_Table[com/dmdirc/actions/ActionCondition]
    //#input(bool equals(Object)): __Descendant_Table[others]
    //#input(bool equals(Object)): __Dispatch_Table.getArg()I
    //#input(bool equals(Object)): __Dispatch_Table.getComparison()Lcom/dmdirc/actions/interfaces/ActionComparison;
    //#input(bool equals(Object)): __Dispatch_Table.getComponent()Lcom/dmdirc/actions/interfaces/ActionComponent;
    //#input(bool equals(Object)): __Dispatch_Table.getStarget()Ljava/lang/String;
    //#input(bool equals(Object)): __Dispatch_Table.getTarget()Ljava/lang/String;
    //#input(bool equals(Object)): obj
    //#input(bool equals(Object)): obj.__Tag
    //#input(bool equals(Object)): obj.arg
    //#input(bool equals(Object)): obj.comparison
    //#input(bool equals(Object)): obj.component
    //#input(bool equals(Object)): obj.starget
    //#input(bool equals(Object)): obj.target
    //#input(bool equals(Object)): this
    //#input(bool equals(Object)): this.arg
    //#input(bool equals(Object)): this.comparison
    //#input(bool equals(Object)): this.component
    //#input(bool equals(Object)): this.starget
    //#input(bool equals(Object)): this.target
    //#output(bool equals(Object)): return_value
    //#pre[3] (bool equals(Object)): (soft) init'ed(obj.arg)
    //#pre[5] (bool equals(Object)): (soft) init'ed(obj.comparison)
    //#pre[6] (bool equals(Object)): (soft) init'ed(obj.component)
    //#pre[7] (bool equals(Object)): (soft) init'ed(obj.starget)
    //#pre[8] (bool equals(Object)): (soft) init'ed(obj.target)
    //#pre[10] (bool equals(Object)): (soft) init'ed(this.arg)
    //#pre[11] (bool equals(Object)): (soft) init'ed(this.comparison)
    //#pre[13] (bool equals(Object)): (soft) init'ed(this.component)
    //#pre[15] (bool equals(Object)): (soft) this.starget != null
    //#pre[16] (bool equals(Object)): (soft) this.target != null
    //#post(bool equals(Object)): init'ed(return_value)
            return false;
        }
        
        final ActionCondition o = (ActionCondition) obj;
        
        return arg == o.getArg() && component == o.getComponent()
    //#ActionCondition.java:208: end of method: bool com.dmdirc.actions.ActionCondition.equals(Object)
                && comparison == o.getComparison() && target.equals(o.getTarget())
                && starget.equals(o.getStarget());
    }
    
    /** {@inheritDoc} */
    @Override
    public int hashCode() {
        return arg + 100 * (arg == -1 ? starget.hashCode() : component.hashCode())
    //#ActionCondition.java:216: method: int com.dmdirc.actions.ActionCondition.hashCode()
    //#input(int hashCode()): this
    //#input(int hashCode()): this.arg
    //#input(int hashCode()): this.comparison
    //#input(int hashCode()): this.component
    //#input(int hashCode()): this.starget
    //#input(int hashCode()): this.target
    //#output(int hashCode()): return_value
    //#pre[2] (int hashCode()): init'ed(this.arg)
    //#pre[3] (int hashCode()): this.comparison != null
    //#pre[6] (int hashCode()): this.target != null
    //#pre[4] (int hashCode()): (soft) this.component != null
    //#pre[5] (int hashCode()): (soft) this.starget != null
    //#presumption(int hashCode()): java.lang.String:hashCode(...)@216 in {-433_856_121..216_960_272}
    //#presumption(int hashCode()): this.arg + java.lang.String:hashCode(...)*100 + java.lang.Object:hashCode(...)@216*10_000 + java.lang.String:hashCode(...)@216*100_000 in {-2_147_483_648..4_294_967_295}
    //#post(int hashCode()): init'ed(return_value)
    //#test_vector(int hashCode()): this.arg: {-2_147_483_648..-2, 0..4_294_967_295}, {-1}
    //#ActionCondition.java:216: end of method: int com.dmdirc.actions.ActionCondition.hashCode()
                + 10000 * comparison.hashCode() + 100000 * target.hashCode();
    }
    
}
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Descendant_Table[com/dmdirc/actions/ActionCondition]
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.equals(Ljava/lang/Object;)Z
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getArg()I
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getComparison()Lcom/dmdirc/actions/interfaces/ActionComparison;
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getComponent()Lcom/dmdirc/actions/interfaces/ActionComponent;
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getStarget()Ljava/lang/String;
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getTarget()Ljava/lang/String;
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.hashCode()I
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setArg(I)V
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setComparison(Lcom/dmdirc/actions/interfaces/ActionComparison;)V
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setComponent(Lcom/dmdirc/actions/interfaces/ActionComponent;)V
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setStarget(Ljava/lang/String;)V
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setTarget(Ljava/lang/String;)V
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.test(Lcom/dmdirc/actions/ActionSubstitutor;[Ljava/lang/Object;)Z
    //#output(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.toString()Ljava/lang/String;
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Descendant_Table[com/dmdirc/actions/ActionCondition] == &__Dispatch_Table
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.equals(Ljava/lang/Object;)Z == &equals
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getArg()I == &getArg
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getComparison()Lcom/dmdirc/actions/interfaces/ActionComparison; == &getComparison
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getComponent()Lcom/dmdirc/actions/interfaces/ActionComponent; == &getComponent
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getStarget()Ljava/lang/String; == &getStarget
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.getTarget()Ljava/lang/String; == &getTarget
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.hashCode()I == &hashCode
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setArg(I)V == &setArg
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setComparison(Lcom/dmdirc/actions/interfaces/ActionComparison;)V == &setComparison
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setComponent(Lcom/dmdirc/actions/interfaces/ActionComponent;)V == &setComponent
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setStarget(Ljava/lang/String;)V == &setStarget
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.setTarget(Ljava/lang/String;)V == &setTarget
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.test(Lcom/dmdirc/actions/ActionSubstitutor;[Ljava/lang/Object;)Z == &test
    //#post(com.dmdirc.actions.ActionCondition__static_init): __Dispatch_Table.toString()Ljava/lang/String; == &toString
    //#ActionCondition.java:: end of method: com.dmdirc.actions.ActionCondition.com.dmdirc.actions.ActionCondition__static_init
    //#ActionCondition.java:: end of class: com.dmdirc.actions.ActionCondition
