Class returnType = sig.getReturnType();
String methodName = sig.getName();
boolean isVoid = (returnType == void.class);
BodyBuilder builder = new BodyBuilder();
builder.begin();
builder.addln("boolean debug = _log.isDebugEnabled();");
builder.addln("if (debug)");
builder.add(" org.apache.hivemind.service.impl.LoggingUtils.entry(_log, ");
builder.addQuoted(methodName);
builder.addln(", $args);");
if (!isVoid)
{
builder.add(ClassFabUtils.getJavaClassName(returnType));
builder.add(" result = ");
}
builder.add("_delegate.");
builder.add(methodName);
builder.addln("($$);");
if (isVoid)
{
builder.addln("if (debug)");
builder.add(" org.apache.hivemind.service.impl.LoggingUtils.voidExit(_log, ");
builder.addQuoted(methodName);
builder.addln(");");
}
else
{
builder.addln("if (debug)");
builder.add(" org.apache.hivemind.service.impl.LoggingUtils.exit(_log, ");
builder.addQuoted(methodName);
builder.addln(", ($w)result);");
builder.addln("return result;");
}
builder.end();
MethodFab methodFab = classFab.addMethod(Modifier.PUBLIC, sig, builder.toString());
builder.clear();
builder.begin();
builder.add("org.apache.hivemind.service.impl.LoggingUtils.exception(_log, ");
builder.addQuoted(methodName);
builder.addln(", $e);");
builder.addln("throw $e;");
builder.end();
String body = builder.toString();
Class[] exceptions = sig.getExceptionTypes();
int count = exceptions.length;