package fitnesse.slim.instructions;
import fitnesse.slim.NameTranslator;
import fitnesse.slim.SlimException;
import java.util.Arrays;
public class CallAndAssignInstruction extends Instruction {
public static final String INSTRUCTION = "callAndAssign";
private String symbolName;
private String instanceName;
private String methodName;
private Object[] args;
public CallAndAssignInstruction(String id, String symbolName, String instanceName, String methodName) {
this(id, symbolName, instanceName, methodName, new Object[]{});
}
public CallAndAssignInstruction(String id, String symbolName, String instanceName, String methodName, Object[] args) {
super(id);
this.symbolName = symbolName;
this.instanceName = instanceName;
this.methodName = methodName;
this.args = args;
}
public CallAndAssignInstruction(String id, String symbolName, String instanceName, String methodName, Object[] args,
NameTranslator methodNameTranslator) {
super(id);
this.symbolName = symbolName;
this.instanceName = instanceName;
this.methodName = methodNameTranslator.translate(methodName);
this.args = args;
}
@Override
protected InstructionResult executeInternal(InstructionExecutor executor) throws SlimException {
Object result = executor.callAndAssign(symbolName, instanceName, methodName, args);
return new InstructionResult(getId(), result);
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("{id='").append(getId()).append('\'');
sb.append(", instruction='").append(INSTRUCTION).append('\'');
sb.append(", symbolName='").append(symbolName).append('\'');
sb.append(", instanceName='").append(instanceName).append('\'');
sb.append(", methodName='").append(methodName).append('\'');
sb.append(", args=").append(args == null ? "null" : Arrays.asList(args).toString());
sb.append('}');
return sb.toString();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
CallAndAssignInstruction that = (CallAndAssignInstruction) o;
if (!Arrays.equals(args, that.args)) return false;
if (!instanceName.equals(that.instanceName)) return false;
if (!methodName.equals(that.methodName)) return false;
return symbolName.equals(that.symbolName);
}
@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + symbolName.hashCode();
result = 31 * result + instanceName.hashCode();
result = 31 * result + methodName.hashCode();
result = 31 * result + Arrays.hashCode(args);
return result;
}
}