@Override public void process(Element element, EComponentHolder holder) throws Exception { if (!annotationHelper.enclosingElementHasEnhancedComponentAnnotation(element)) { // do nothing when otto annotations are used in non-enhanced classes return; } ExecutableElement executableElement = (ExecutableElement) element; JMethod method = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); addOttoAnnotation(executableElement, method); }
@Override public void process(Element element, EComponentHolder holder) throws Exception { ExecutableElement executableElement = (ExecutableElement) element; JMethod delegatingMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); JBlock body = delegatingMethod.body(); AbstractJClass bgExecutor = getJClass(BackgroundExecutor.class); body.pos(0); body.staticInvoke(bgExecutor, METHOD_CHECK_UI_THREAD); body.pos(body.getContents().size()); } }
@Override public void process(Element element, EComponentHolder holder) throws Exception { ExecutableElement executableElement = (ExecutableElement) element; JMethod delegatingMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); AbstractJClass bgExecutor = getJClass(BackgroundExecutor.class); SupposeBackground annotation = element.getAnnotation(SupposeBackground.class); String[] serial = annotation.serial(); JInvocation invocation = bgExecutor.staticInvoke(METHOD_CHECK_BG_THREAD); for (String s : serial) { invocation.arg(lit(s)); } JBlock body = delegatingMethod.body(); body.pos(0); body.add(invocation); body.pos(body.getContents().size()); } }
@Override public void process(Element element, EFragmentHolder holder) throws Exception { ExecutableElement executableElement = (ExecutableElement) element; JMethod delegatingMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); JBlock previousMethodBody = codeModelHelper.removeBody(delegatingMethod); IgnoreWhen ignoreWhen = element.getAnnotation(IgnoreWhen.class); JBlock methodBody = delegatingMethod.body(); JConditional conditional = null; switch (ignoreWhen.value()) { case VIEW_DESTROYED: conditional = methodBody._if(holder.getViewDestroyedField().not()); break; case DETACHED: conditional = methodBody._if(invoke(holder.getGeneratedClass().staticRef("this"), "getActivity").ne(_null())); break; } conditional._then().add(previousMethodBody); } }
@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))); }
AbstractJClass returnType = getJClass(returnTypeName); JMethod method = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); codeModelHelper.removeBody(method);
ExecutableElement executableElement = (ExecutableElement) element; JMethod delegatingMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder);
@Override public void process(Element element, EComponentHolder holder) { ExecutableElement executableElement = (ExecutableElement) element; WakeLock annotation = executableElement.getAnnotation(WakeLock.class); String tag = extractTag(executableElement); Level level = annotation.level(); Flag[] flags = annotation.flags(); JMethod method = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); JBlock previousMethodBody = codeModelHelper.removeBody(method); JBlock methodBody = method.body(); IJExpression levelAndFlags = getClasses().POWER_MANAGER.staticRef(level.name()); if (flags.length > 0) { for (Flag flag : flags) { levelAndFlags = levelAndFlags.bor(getClasses().POWER_MANAGER.staticRef(flag.name())); } } JInvocation newWakeLock = holder.getPowerManagerRef().invoke("newWakeLock").arg(levelAndFlags).arg(JExpr.lit(tag)); JVar wakeLock = methodBody.decl(getClasses().WAKE_LOCK, "wakeLock", JExpr._null()); JTryBlock tryBlock = methodBody._try(); tryBlock.body().assign(wakeLock, newWakeLock); tryBlock.body().add(wakeLock.invoke("acquire")); tryBlock.body().add(previousMethodBody); JBlock finallyBlock = tryBlock._finally(); JConditional ifStatement = finallyBlock._if(wakeLock.ne(JExpr._null())); ifStatement._then().add(wakeLock.invoke("release")); }
int level = executableElement.getAnnotation(Trace.class).level(); JMethod method = codeModelHelper.overrideAnnotatedMethod(executableElement, holder);
@Override public void process(Element element, EComponentHolder holder) throws Exception { ExecutableElement executableElement = (ExecutableElement) element; JMethod delegatingMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); JBlock body = delegatingMethod.body(); AbstractJClass bgExecutor = getJClass(BackgroundExecutor.class); body.pos(0); body.staticInvoke(bgExecutor, METHOD_CHECK_UI_THREAD); body.pos(body.getContents().size()); } }
@Override public void process(Element element, EComponentHolder holder) throws Exception { ExecutableElement executableElement = (ExecutableElement) element; JMethod delegatingMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); AbstractJClass bgExecutor = getJClass(BackgroundExecutor.class); SupposeBackground annotation = element.getAnnotation(SupposeBackground.class); String[] serial = annotation.serial(); JInvocation invocation = bgExecutor.staticInvoke(METHOD_CHECK_BG_THREAD); for (String s : serial) { invocation.arg(lit(s)); } JBlock body = delegatingMethod.body(); body.pos(0); body.add(invocation); body.pos(body.getContents().size()); } }
@Override public void process(Element element, EFragmentHolder holder) throws Exception { ExecutableElement executableElement = (ExecutableElement) element; JMethod delegatingMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); JBlock previousMethodBody = codeModelHelper.removeBody(delegatingMethod); IgnoreWhen ignoreWhen = element.getAnnotation(IgnoreWhen.class); JBlock methodBody = delegatingMethod.body(); JConditional conditional = null; switch (ignoreWhen.value()) { case VIEW_DESTROYED: conditional = methodBody._if(holder.getViewDestroyedField().not()); break; case DETACHED: conditional = methodBody._if(invoke(holder.getGeneratedClass().staticRef("this"), "getActivity").ne(_null())); break; } conditional._then().add(previousMethodBody); } }
@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))); }
private void setPermissionMethods(Element element, EComponentHolder holder, AbstractJClass delegateClass, JFieldVar dispatcherCalledField) { ExecutableElement executableElement = (ExecutableElement) element; JMethod overrideMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); JBlock previousMethodBody = codeModelHelper.removeBody(overrideMethod); JBlock overrideMethodBody = overrideMethod.body(); JConditional conditional = overrideMethodBody._if(dispatcherCalledField.not()); JBlock thenBlock = conditional._then(); thenBlock.assign(dispatcherCalledField, JExpr.TRUE); String delegateMethodName = element.getSimpleName().toString() + "WithPermissionCheck"; JInvocation delegateCall = delegateClass.staticInvoke(delegateMethodName) .arg(JExpr._this()); overrideMethod.params().forEach(delegateCall::arg); if (overrideMethod.hasVarArgs()) { JVar jVar = overrideMethod.varParam(); if (jVar != null) { delegateCall.arg(jVar); } } if (!removeRuntimePermissionsAnnotation(holder.getGeneratedClass())) { codeModelHelper.copyAnnotation(overrideMethod, findAnnotation(element)); } thenBlock.add(delegateCall); JBlock elseBlock = conditional._else(); elseBlock.assign(dispatcherCalledField, JExpr.FALSE); elseBlock.add(previousMethodBody); }
AbstractJClass returnType = getJClass(returnTypeName); JMethod method = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); codeModelHelper.removeBody(method);
ExecutableElement executableElement = (ExecutableElement) element; JMethod delegatingMethod = codeModelHelper.overrideAnnotatedMethod(executableElement, holder);
@Override public void process(Element element, EComponentHolder holder) { ExecutableElement executableElement = (ExecutableElement) element; WakeLock annotation = executableElement.getAnnotation(WakeLock.class); String tag = extractTag(executableElement); Level level = annotation.level(); Flag[] flags = annotation.flags(); JMethod method = codeModelHelper.overrideAnnotatedMethod(executableElement, holder); JBlock previousMethodBody = codeModelHelper.removeBody(method); JBlock methodBody = method.body(); IJExpression levelAndFlags = getClasses().POWER_MANAGER.staticRef(level.name()); if (flags.length > 0) { for (Flag flag : flags) { levelAndFlags = levelAndFlags.bor(getClasses().POWER_MANAGER.staticRef(flag.name())); } } JInvocation newWakeLock = holder.getPowerManagerRef().invoke("newWakeLock").arg(levelAndFlags).arg(JExpr.lit(tag)); JVar wakeLock = methodBody.decl(getClasses().WAKE_LOCK, "wakeLock", JExpr._null()); JTryBlock tryBlock = methodBody._try(); tryBlock.body().assign(wakeLock, newWakeLock); tryBlock.body().add(wakeLock.invoke("acquire")); tryBlock.body().add(previousMethodBody); JBlock finallyBlock = tryBlock._finally(); JConditional ifStatement = finallyBlock._if(wakeLock.ne(JExpr._null())); ifStatement._then().add(wakeLock.invoke("release")); }
int level = executableElement.getAnnotation(Trace.class).level(); JMethod method = codeModelHelper.overrideAnnotatedMethod(executableElement, holder);