@Override
public void process(Element element, RestHolder holder) {
ExecutableElement executableElement = (ExecutableElement) element;
String methodName = element.getSimpleName().toString();
AbstractJClass methodReturnClass = getMethodReturnClass(element, holder);
boolean methodReturnVoid = executableElement.getReturnType().getKind() == TypeKind.VOID;
JMethod method = holder.getGeneratedClass().method(JMod.PUBLIC, methodReturnClass, methodName);
method.annotate(Override.class);
SortedMap<String, JVar> params = addMethodParams(executableElement, holder, method);
JBlock methodBody = new JBlock().bracesRequired(false).indentRequired(false);
JInvocation exchangeCall = JExpr.invoke(holder.getRestTemplateField(), "exchange");
exchangeCall.arg(getUrl(element, holder));
exchangeCall.arg(getHttpMethod());
exchangeCall.arg(getRequestEntity(executableElement, holder, methodBody, params));
exchangeCall.arg(getResponseClass(element, holder));
IJExpression urlVariables = getUrlVariables(element, holder, methodBody, params);
if (urlVariables != null) {
exchangeCall.arg(urlVariables);
}
IJExpression response = setCookies(executableElement, holder, methodBody, exchangeCall);
if (methodReturnVoid && response.equals(exchangeCall)) {
methodBody.add(exchangeCall);
} else if (!methodReturnVoid) {
methodBody._return(addResultCallMethod(response, methodReturnClass));
}
methodBody = surroundWithRestTryCatch(holder, methodBody, methodReturnVoid);
codeModelHelper.copy(methodBody, method.body());
}