private void addActionInOnHandleIntent( EIntentServiceHolder holder, ExecutableElement executableElement, String methodName, JFieldVar actionKeyField) { // If action match, call the method JInvocation actionCondition = actionKeyField.invoke("equals").arg(holder.getOnHandleIntentIntentAction()); JBlock callActionBlock = holder.getOnHandleIntentBody()._if(actionCondition)._then(); JInvocation callActionInvocation = JExpr._super().invoke(methodName); // For each method params, we get back value from extras and put it // in super calls List<? extends VariableElement> methodParameters = executableElement.getParameters(); if (methodParameters.size() > 0) { // Extras JVar extras = callActionBlock.decl(classes().BUNDLE, "extras"); extras.init(holder.getOnHandleIntentIntent().invoke("getExtras")); JBlock extrasNotNullBlock = callActionBlock._if(extras.ne(_null()))._then(); // Extras params for (VariableElement param : methodParameters) { String paramName = param.getSimpleName().toString(); String extraParamName = paramName + "Extra"; JFieldVar paramVar = getStaticExtraField(holder, paramName); JClass extraParamClass = codeModelHelper.typeMirrorToJClass(param.asType(), holder); BundleHelper bundleHelper = new BundleHelper(annotationHelper, param); JExpression getExtraExpression = JExpr.invoke(extras, bundleHelper.getMethodNameToRestore()).arg(paramVar); if (bundleHelper.restoreCallNeedCastStatement()) { getExtraExpression = JExpr.cast(extraParamClass, getExtraExpression); if (bundleHelper.restoreCallNeedsSuppressWarning()) { JMethod onHandleIntentMethod = holder.getOnHandleIntentMethod(); if (onHandleIntentMethod.annotations().size() == 0) { onHandleIntentMethod.annotate(SuppressWarnings.class).param("value", "unchecked"); } } } JVar extraField = extrasNotNullBlock.decl(extraParamClass, extraParamName, getExtraExpression); callActionInvocation.arg(extraField); } extrasNotNullBlock.add(callActionInvocation); } else { callActionBlock.add(callActionInvocation); } callActionBlock._return(); }
@Override public void process(Element element, HasInstanceState holder) { String fieldName = element.getSimpleName().toString(); JBlock saveStateBody = holder.getSaveStateMethodBody(); JVar saveStateBundleParam = holder.getSaveStateBundleParam(); JMethod restoreStateMethod = holder.getRestoreStateMethod(); JBlock restoreStateBody = restoreStateMethod.body(); JVar restoreStateBundleParam = holder.getRestoreStateBundleParam(); AnnotationHelper annotationHelper = new AnnotationHelper(processingEnv); BundleHelper bundleHelper = new BundleHelper(annotationHelper, element); APTCodeModelHelper codeModelHelper = new APTCodeModelHelper(); JFieldRef ref = ref(fieldName); saveStateBody .invoke(saveStateBundleParam, bundleHelper.getMethodNameToSave()) .arg(fieldName) .arg(ref); JInvocation restoreMethodCall = JExpr.invoke(restoreStateBundleParam, bundleHelper.getMethodNameToRestore()).arg(fieldName); if (bundleHelper.restoreCallNeedCastStatement()) { JClass jclass = codeModelHelper.typeMirrorToJClass(element.asType(), holder); JExpression castStatement = JExpr.cast(jclass, restoreMethodCall); restoreStateBody.assign(ref, castStatement); if (bundleHelper.restoreCallNeedsSuppressWarning()) { if (restoreStateMethod.annotations().size() == 0) { restoreStateMethod.annotate(SuppressWarnings.class).param("value", "unchecked"); } } } else { restoreStateBody.assign(ref, restoreMethodCall); } }