protected void generateInvocationContextExec(MethodElement methodElement, MethodSpec.Builder proxyMethodBuilder) {
List<ParameterElement> methodParams = methodElement.getParameters();
List<String> paramNames = new ArrayList<>();
for (ParameterElement paramElm : methodParams) {
paramNames.add(StrUtils.addPrefix(METHOD_PARAM_PREFIX, paramElm.getName()));
}
String paramsArrayLiteral = "{" + String.join(",", paramNames) + "}";
proxyMethodBuilder.addStatement("final $T " + INV_CONTEXT_VARIABLE + "=new $T(this,$S,new $T[]$L," + INTERCEPTORS_CHAIN_VARIABLE + ")",
ClassName.get(InvocationContext.class),
ClassName.get(InvocationContext.class),
methodElement.getName(),
ArrayTypeName.get(Object.class), paramsArrayLiteral);
TypeMirror returnType = methodElement.getReturnType();
boolean voidResult = returnType instanceof NoType;
if (voidResult) {
proxyMethodBuilder.addStatement(INV_CONTEXT_VARIABLE + "." + InvocationContext.PROCEED_METHOD + "()");
} else {
proxyMethodBuilder.addStatement("return ($T)" + INV_CONTEXT_VARIABLE + "." + InvocationContext.PROCEED_METHOD + "()",
TypeName.get(methodElement.getReturnType()));
}
}