package se.krka.kahlua.integration.expose.caller;
import se.krka.kahlua.integration.expose.ReturnValues;
import java.util.Arrays;
/** @exclude */
public abstract class AbstractCaller implements Caller {
protected final Class<?>[] parameters;
protected final boolean needsMultipleReturnValues;
protected final Class<?> varargType;
protected AbstractCaller(Class<?>[] parameters) {
boolean needsMultipleReturnValues = false;
Class<?> varargType = null;
if (parameters.length > 0) {
Class<?> firstType = parameters[0];
if (firstType == ReturnValues.class) {
needsMultipleReturnValues = true;
}
Class<?> lastType = parameters[parameters.length - 1];
if (lastType.isArray()) {
varargType = lastType.getComponentType();
}
}
this.needsMultipleReturnValues = needsMultipleReturnValues;
this.varargType = varargType;
int from = needsMultipleReturnValues ? 1 : 0;
int to = parameters.length - (varargType == null ? 0 : 1);
int len = to - from;
this.parameters = new Class[len];
System.arraycopy(parameters, from, this.parameters, 0, len);
}
@Override
public final Class<?>[] getParameterTypes() {
return parameters;
}
@Override
public final Class<?> getVarargType() {
return varargType;
}
@Override
public final boolean hasVararg() {
return varargType != null;
}
@Override
public final boolean needsMultipleReturnValues() {
return needsMultipleReturnValues;
}
}