public static ParameterExpressionBuilder createFromMapQueryObjectFromRequest(
RestxAnnotationProcessor.ResourceMethodParameter parameter,
EndpointParameterKind kind){
Optional<AggregateType> aggregateType = AggregateType.fromType(parameter.type);
String emptySupplierParam = "";
if(aggregateType.isPresent()) {
Function<String, String> fqcnToEmptyAggregateTransformer = EMPTY_AGGREGATE_FUNCTIONS.get(aggregateType.get());
if(fqcnToEmptyAggregateTransformer == null) {
throw new IllegalStateException("Missing EMPTY_AGGREGATE_FUNCTIONS entry for aggregate type "+aggregateType.get().name());
}
emptySupplierParam = ", "+fqcnToEmptyAggregateTransformer.apply(parameter.type);
}
return new ParameterExpressionBuilder(String.format(
"%smapQueryObjectFromRequest(%s.class, \"%s\", request, match, EndpointParameterKind.%s%s)",
TypeHelper.isParameterizedType(parameter.type)?"("+parameter.type+")":"",
TypeHelper.rawTypeFrom(parameter.type),
parameter.reqParamName,
kind.name(),
emptySupplierParam
), kind.name());
}
}