use of com.helger.jcodemodel.JBlock in project androidannotations by androidannotations.
the class ActivityIntentBuilder method createCallWithIfGuard.
private JBlock createCallWithIfGuard(JVar requestCode, JBlock thenBlock, IJExpression invocationTarget) {
JConditional guardIf = thenBlock._if(getClasses().BUILD_VERSION.staticRef("SDK_INT").gte(getClasses().BUILD_VERSION_CODES.staticRef("JELLY_BEAN")));
JBlock startInvocationBlock = guardIf._then();
String methodName = requestCode != null ? "startActivityForResult" : "startActivity";
JInvocation invocation = guardIf._else().invoke(invocationTarget, methodName).arg(intentField);
if (requestCode != null) {
invocation.arg(requestCode);
}
return startInvocationBlock;
}
use of com.helger.jcodemodel.JBlock in project androidannotations by androidannotations.
the class TraceHandler method process.
@Override
public void process(Element element, EComponentHolder holder) throws Exception {
ExecutableElement executableElement = (ExecutableElement) element;
String tag = extractTag(executableElement);
int level = executableElement.getAnnotation(Trace.class).level();
JMethod method = codeModelHelper.overrideAnnotatedMethod(executableElement, holder);
JBlock previousMethodBody = codeModelHelper.removeBody(method);
JBlock methodBody = method.body();
JInvocation isLoggableInvocation = getClasses().LOG.staticInvoke("isLoggable");
isLoggableInvocation.arg(tag).arg(logLevelFromInt(level, getClasses().LOG));
JConditional ifStatement = methodBody._if(isLoggableInvocation);
JInvocation currentTimeInvoke = getClasses().SYSTEM.staticInvoke("currentTimeMillis");
JBlock thenBody = ifStatement._then();
// Log In
String logMethodName = logMethodNameFromLevel(level);
JInvocation logEnterInvoke = getClasses().LOG.staticInvoke(logMethodName);
logEnterInvoke.arg(tag);
logEnterInvoke.arg(getEnterMessage(method, executableElement));
thenBody.add(logEnterInvoke);
JVar startDeclaration = thenBody.decl(getCodeModel().LONG, "traceStart" + generationSuffix(), currentTimeInvoke);
JTryBlock tryBlock;
JVar result = null;
if (method.type().fullName().equals("void")) {
tryBlock = thenBody._try();
tryBlock.body().add(previousMethodBody);
} else {
JInvocation superCall = codeModelHelper.getSuperCall(holder, method);
result = thenBody.decl(getJClass(Object.class), "traceResult" + generationSuffix(), JExpr._null());
tryBlock = thenBody._try();
tryBlock.body().assign(result, superCall);
tryBlock.body()._return(JExpr.cast(boxify(method.type()), result));
}
JBlock finallyBlock = tryBlock._finally();
JVar durationDeclaration = finallyBlock.decl(getCodeModel().LONG, "traceDuration" + generationSuffix(), currentTimeInvoke.minus(startDeclaration));
JInvocation logExitInvoke = getClasses().LOG.staticInvoke(logMethodName);
logExitInvoke.arg(tag);
logExitInvoke.arg(getExitMessage(executableElement, method, result, durationDeclaration));
finallyBlock.add(logExitInvoke);
JBlock elseBlock = ifStatement._else();
elseBlock.add(previousMethodBody);
}
use of com.helger.jcodemodel.JBlock in project androidannotations by androidannotations.
the class TransactionalHandler method process.
@Override
public void process(Element element, EComponentHolder holder) {
ExecutableElement executableElement = (ExecutableElement) element;
String returnTypeName = executableElement.getReturnType().toString();
AbstractJClass returnType = getJClass(returnTypeName);
JMethod method = codeModelHelper.overrideAnnotatedMethod(executableElement, holder);
codeModelHelper.removeBody(method);
JVar db = method.params().get(0);
JBlock body = method.body();
body.invoke(db, "beginTransaction");
JTryBlock tryBlock = body._try();
IJExpression activitySuper = holder.getGeneratedClass().staticRef("super");
JInvocation superCall = JExpr.invoke(activitySuper, method);
for (JVar param : method.params()) {
superCall.arg(param);
}
JBlock tryBody = tryBlock.body();
if (returnTypeName.equals("void")) {
tryBody.add(superCall);
tryBody.invoke(db, "setTransactionSuccessful");
tryBody._return();
} else {
JVar result = tryBody.decl(returnType, "result_", superCall);
tryBody.invoke(db, "setTransactionSuccessful");
tryBody._return(result);
}
JCatchBlock catchBlock = tryBlock._catch(getJClass(RuntimeException.class));
JVar exceptionParam = catchBlock.param("e");
JBlock catchBody = catchBlock.body();
JInvocation errorInvoke = catchBody.staticInvoke(getClasses().LOG, "e");
errorInvoke.arg(logTagForClassHolder(holder));
errorInvoke.arg("Error in transaction");
errorInvoke.arg(exceptionParam);
catchBody._throw(exceptionParam);
tryBlock._finally().invoke(db, "endTransaction");
}
use of com.helger.jcodemodel.JBlock in project androidannotations by androidannotations.
the class UiThreadHandler method process.
@Override
public void process(Element element, EComponentHolder holder) throws Exception {
ExecutableElement executableElement = (ExecutableElement) element;
JMethod delegatingMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder);
JBlock previousBody = codeModelHelper.removeBody(delegatingMethod);
JDefinedClass anonymousRunnableClass = codeModelHelper.createDelegatingAnonymousRunnableClass(previousBody);
UiThread annotation = element.getAnnotation(UiThread.class);
long delay = annotation.delay();
UiThread.Propagation propagation = annotation.propagation();
if (delay == 0 && propagation == UiThread.Propagation.REUSE) {
// Put in the check for the UI thread.
addUIThreadCheck(delegatingMethod, previousBody, holder);
}
delegatingMethod.body().add(//
getJClass(UiThreadExecutor.class).staticInvoke(METHOD_RUN_TASK).arg(//
annotation.id()).arg(//
_new(anonymousRunnableClass)).arg(lit(delay)));
}
use of com.helger.jcodemodel.JBlock in project androidannotations by androidannotations.
the class UiThreadHandler method addUIThreadCheck.
/**
* Add the pre-check to see if we are already in the UI thread.
*
* @param delegatingMethod
* @param holder
* @throws JClassAlreadyExistsException
*/
private void addUIThreadCheck(JMethod delegatingMethod, JBlock previousBody, EComponentHolder holder) throws JClassAlreadyExistsException {
// Get the Thread and Looper class.
AbstractJClass tClass = getClasses().THREAD;
AbstractJClass lClass = getClasses().LOOPER;
// invoke the methods.
IJExpression lhs = tClass.staticInvoke(METHOD_CUR_THREAD);
IJExpression rhs = lClass.staticInvoke(METHOD_MAIN_LOOPER).invoke(METHOD_GET_THREAD);
// create the conditional and the block.
JConditional con = delegatingMethod.body()._if(JOp.eq(lhs, rhs));
JBlock thenBlock = con._then().add(previousBody);
thenBlock._return();
}
Aggregations