package se.krka.kahlua.integration.expose.caller; import se.krka.kahlua.integration.expose.ReturnValues; import java.util.Arrays; 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; this.parameters = Arrays.copyOfRange(parameters, needsMultipleReturnValues ? 1 : 0, parameters.length - (varargType == null ? 0 : 1)); } @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; } }