*/
private Statement generateInterceptorLogic() {
JaxrsResourceMethodParameters jaxrsParams =
JaxrsResourceMethodParameters.fromMethod(resourceMethod.getMethod(), "parameters");
InterceptedCall interceptedCall = resourceMethod.getMethod().getAnnotation(InterceptedCall.class);
if (interceptedCall == null) {
interceptedCall = resourceMethod.getMethod().getDeclaringClass().getAnnotation(InterceptedCall.class);
}
Statement callContext =
ProxyUtil.generateProxyMethodCallContext(RestCallContext.class, declaringClass,
resourceMethod.getMethod(), generateInterceptedRequest(), interceptedCall)
.publicOverridesMethod("proceed", Parameter.of(ResponseCallback.class, "interceptorCallback", true))
.append(Stmt.declareVariable(RemoteCallback.class).asFinal().named("providedCallback").initializeWith(
Stmt.loadStatic(declaringClass, "this").loadField("remoteCallback")))
.append(
Stmt.loadVariable("remoteCallback").assignValue(Stmt.newObject(ResponseCallback.class).extend()
.publicOverridesMethod("callback", Parameter.of(Response.class, "response"))
.append(Stmt.declareVariable(ResponseCallback.class).named("intCallback")
.initializeWith(Stmt.loadVariable("interceptorCallback")))
.append(StringStatement.of("setResult(response)"))
.append(Stmt.loadVariable("intCallback").invoke("callback",
Cast.to(Response.class, StringStatement.of("getResult()", Object.class))))
.append(Stmt.loadVariable("providedCallback").invoke("callback",
StringStatement.of("getResult()", Object.class)))
.finish()
.finish())
)
.append(Stmt.loadVariable("this").invoke("proceed"))
.finish()
.publicOverridesMethod("setParameters", Parameter.of(Object[].class, "parameters"))
.append(new StringStatement("super.setParameters(parameters)"))
.append(generateUrl(jaxrsParams))
.append(generateRequestBuilder())
.append(generateHeaders(jaxrsParams))
.append(new StringStatement("setRequestBuilder(requestBuilder)"))
.finish()
.finish();
return Stmt.try_()
.append(
Stmt.declareVariable(CallContextStatus.class).asFinal().named("status").initializeWith(
Stmt.newObject(CallContextStatus.class).withParameters((Object[]) interceptedCall.value())))
.append(
Stmt.declareVariable(RestCallContext.class).asFinal().named("callContext")
.initializeWith(callContext))
.append(
Stmt.loadVariable("callContext").invoke("setRequestBuilder", Variable.get("requestBuilder")))