Class<?> returnType = TypeUtils.ensureBaseType(returnGenericType);
Class<?> elementType = Collection.class.isAssignableFrom(returnType)
? TypeUtils.ensureBaseType(TypeUtils.getSingleParameterization(
Collection.class, returnGenericType)) : null;
final RequestData data;
if (dialect.equals(Dialect.STANDARD)) {
String operation = method.getDeclaringClass().getName() + "::"
+ method.getName();
data = new RequestData(operation, actualArgs, returnType, elementType);
} else {
// Calculate request metadata
JsonRpcWireName wireInfo = method.getReturnType().getAnnotation(
JsonRpcWireName.class);
String apiVersion = wireInfo.version();
String operation = wireInfo.value();
int foundContent = -1;
final String[] parameterNames = args == null ? new String[0]
: new String[args.length];
Annotation[][] parameterAnnotations = method.getParameterAnnotations();
parameter : for (int i = 0, j = parameterAnnotations.length; i < j; i++) {
for (Annotation annotation : parameterAnnotations[i]) {
if (PropertyName.class.equals(annotation.annotationType())) {
parameterNames[i] = ((PropertyName) annotation).value();
continue parameter;
} else if (JsonRpcContent.class.equals(annotation.annotationType())) {
foundContent = i;
continue parameter;
}
}
throw new UnsupportedOperationException("No "
+ PropertyName.class.getCanonicalName()
+ " annotation on parameter " + i + " of method "
+ method.toString());
}
final int contentIdx = foundContent;
data = new RequestData(operation, actualArgs, returnType, elementType);
for (int i = 0, j = args.length; i < j; i++) {
if (i != contentIdx) {
data.setNamedParameter(parameterNames[i], args[i]);
} else {
data.setRequestContent(args[i]);
}
data.setApiVersion(apiVersion);
}
}
// Create the request, just filling in the RequestData details
final AbstractRequest<Object> req = new AbstractRequest<Object>(
InProcessRequestContext.this) {
@Override
protected RequestData makeRequestData() {
data.setPropertyRefs(propertyRefs);
return data;
}
};
if (!isInstance) {