private void rebindContextIfBean(Element element, JBlock initIfNonConfigurationNotNullBlock, JFieldVar field) { boolean hasBeanAnnotation = element.getAnnotation(Bean.class) != null; if (hasBeanAnnotation) { TypeMirror elementType = annotationHelper.extractAnnotationClassParameter(element, Bean.class.getName()); if (elementType == null) { elementType = element.asType(); } String typeQualifiedName = elementType.toString(); AbstractJClass fieldGeneratedBeanClass = getJClass(typeQualifiedName + classSuffix()); // do not generate rebind call for singleton beans Element eBeanTypeElement = annotationHelper.getTypeUtils().asElement(elementType); EBean eBean = eBeanTypeElement.getAnnotation(EBean.class); if (eBean != null && eBean.scope() != EBean.Scope.Singleton) { initIfNonConfigurationNotNullBlock.invoke(cast(fieldGeneratedBeanClass, field), "rebind").arg(_this()); } } } }
@Override public void assignValue(JBlock targetBlock, IJAssignmentTarget fieldRef, EComponentWithViewSupportHolder holder, Element element, Element param) { TypeMirror elementType = param.asType(); String typeQualifiedName = elementType.toString(); TypeElement nativeFragmentElement = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.FRAGMENT); boolean isNativeFragment = nativeFragmentElement != null && annotationHelper.isSubtype(elementType, nativeFragmentElement.asType()); String fieldName = element.getSimpleName().toString(); if (holder instanceof EFragmentHolder) { boolean childFragment = annotationHelper.extractAnnotationParameter(element, "childFragment"); String fragmentManagerGetter = childFragment ? "getChildFragmentManager" : "getFragmentManager"; targetBlock.add(fieldRef.assign(cast(getJClass(typeQualifiedName), invoke(fragmentManagerGetter).invoke(findFragmentMethodName).arg(getFragmentId(element, fieldName))))); } else { JMethod findFragmentMethod = getFindFragmentMethod(isNativeFragment, holder); targetBlock.add(fieldRef.assign(cast(getJClass(typeQualifiedName), invoke(findFragmentMethod).arg(getFragmentId(element, fieldName))))); } }
public BaseAnnotationHandler(String target, AndroidAnnotationsEnvironment environment) { this.target = target; this.environment = environment; annotationHelper = new IdAnnotationHelper(environment, target); validatorHelper = new IdValidatorHelper(annotationHelper); codeModelHelper = new APTCodeModelHelper(environment); }
protected boolean isViewPagerParameter(TypeMirror parameterType) { TypeElement viewPagerTypeElement = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.VIEW_PAGER); TypeElement androidxViewPagerTypeElement = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.ANDROIDX_VIEW_PAGER); TypeMirror viewPagerType = viewPagerTypeElement == null ? null : viewPagerTypeElement.asType(); TypeMirror androidxViewPagerType = androidxViewPagerTypeElement == null ? null : androidxViewPagerTypeElement.asType(); return viewPagerType != null && annotationHelper.isSubtype(parameterType, viewPagerType) || androidxViewPagerType != null && annotationHelper.isSubtype(parameterType, androidxViewPagerType); } }
public void resIdsExist(Element element, Res res, FallbackStrategy fallbackStrategy, ElementValidation valid) { String annotationName = idAnnotationHelper.getTarget(); int[] resIds = idAnnotationHelper.extractAnnotationResIdValueParameter(element, annotationName); if (idAnnotationHelper.defaultResIdValue(resIds)) { String[] resNames = idAnnotationHelper.extractAnnotationResNameParameter(element, annotationName); if (idAnnotationHelper.defaultResName(resNames)) { if (fallbackStrategy == FallbackStrategy.USE_ELEMENT_NAME) { String elementName = idAnnotationHelper.extractElementName(element, annotationName); if (!idAnnotationHelper.containsField(elementName, res)) { valid.addError("Resource name not found in R." + res.rName() + ": " + elementName); if (!idAnnotationHelper.containsField(resName, res)) { valid.addError("Resource name not found in R." + res.rName() + ": " + resName); if (!idAnnotationHelper.containsIdValue(resId, res)) { valid.addError("Resource id value not found in R." + res.rName() + ": " + resId);
editableParameterPosition = i; } else { TypeMirror textViewType = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.TEXT_VIEW).asType(); if (annotationHelper.isSubtype(parameterType, textViewType)) { viewParameterPosition = i; viewParameterType = parameterType; List<JFieldRef> idsRefs = annotationHelper.extractAnnotationFieldRefs(element, IRClass.Res.ID, true);
@Override public void assignValue(JBlock targetBlock, IJAssignmentTarget fieldRef, EComponentHolder holder, Element element, Element param) { TypeMirror typeMirror = annotationHelper.extractAnnotationClassParameter(element); if (typeMirror == null) { typeMirror = param.asType(); typeMirror = getProcessingEnvironment().getTypeUtils().erasure(typeMirror); } String typeQualifiedName = typeMirror.toString(); AbstractJClass injectedClass = getJClass(annotationHelper.generatedClassQualifiedNameFromQualifiedName(typeQualifiedName)); JInvocation beanInstance = injectedClass.staticInvoke(EBeanHolder.GET_INSTANCE_METHOD_NAME).arg(holder.getContextRef()); IJStatement assignment = fieldRef.assign(beanInstance); if (param.getKind() == ElementKind.FIELD) { boolean hasNonConfigurationInstanceAnnotation = element.getAnnotation(NonConfigurationInstance.class) != null; if (hasNonConfigurationInstanceAnnotation) { JConditional conditional = targetBlock._if(fieldRef.eq(_null())); conditional._then().add(assignment); assignment = conditional; } } targetBlock.add(assignment); }
value = annotationHelper.extractAnnotationParameter(method, annotationClass.getName(), "value"); keyResId = annotationHelper.extractAnnotationParameter(method, annotationClass.getName(), "keyRes");
private void setResponseErrorHandler(Element element, RestHolder holder) { DeclaredType responseErrorHandler = annotationHelper.extractAnnotationClassParameter(element, getTarget(), "responseErrorHandler"); if (responseErrorHandler != null) { JInvocation errorHandler = codeModelHelper.newBeanOrEBean(responseErrorHandler, holder.getInitContextParam()); holder.getInit().body().add(invoke(holder.getRestTemplateField(), "setErrorHandler").arg(errorHandler)); } } }
private boolean elementExtendsRuntimeExceptionDao(Element element) { TypeMirror elementType = element.asType(); return annotationHelper.isSubtype(elementType, ormLiteHelper.getRuntimeExceptionDaoParametrizedType()); } }
private void setConverters(Element element, RestHolder holder) { List<DeclaredType> converters = annotationHelper.extractAnnotationClassArrayParameter(element, getTarget(), "converters"); JFieldVar restTemplateField = holder.getRestTemplateField(); JBlock init = holder.getInit().body(); init.add(invoke(restTemplateField, "getMessageConverters").invoke("clear")); for (DeclaredType converterType : converters) { JInvocation newConverter = codeModelHelper.newBeanOrEBean(converterType, holder.getInitContextParam()); init.add(invoke(restTemplateField, "getMessageConverters").invoke("add").arg(newConverter)); } }
@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); }
public void annotationParameterIsOptionalValidResId(Element element, Res res, String parameterName, ElementValidation valid) { Integer resId = annotationHelper.extractAnnotationParameter(element, parameterName); if (!resId.equals(ResId.DEFAULT_VALUE) && !idAnnotationHelper.containsIdValue(resId, res)) { valid.addError("Id value not found in R." + res.rName() + ": " + resId); } }
public void resIdsExist(Element element, Res res, FallbackStrategy fallbackStrategy, ElementValidation valid) { String annotationName = idAnnotationHelper.getTarget(); int[] resIds = idAnnotationHelper.extractAnnotationResIdValueParameter(element, annotationName); if (idAnnotationHelper.defaultResIdValue(resIds)) { String[] resNames = idAnnotationHelper.extractAnnotationResNameParameter(element, annotationName); if (idAnnotationHelper.defaultResName(resNames)) { if (fallbackStrategy == FallbackStrategy.USE_ELEMENT_NAME) { String elementName = idAnnotationHelper.extractElementName(element, annotationName); if (!idAnnotationHelper.containsField(elementName, res)) { valid.addError("Resource name not found in R." + res.rName() + ": " + elementName); if (!idAnnotationHelper.containsField(resName, res)) { valid.addError("Resource name not found in R." + res.rName() + ": " + resName); if (!idAnnotationHelper.containsIdValue(resId, res)) { valid.addError("Resource id value not found in R." + res.rName() + ": " + resId);
TypeMirror textViewType = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.TEXT_VIEW).asType(); if (annotationHelper.isSubtype(parameterType, textViewType)) { viewParameterPosition = i; viewParameterType = parameterType; List<JFieldRef> idsRefs = annotationHelper.extractAnnotationFieldRefs(element, IRClass.Res.ID, true);
protected final boolean isTypeOrSubclass(String baseType, Element element) { TypeMirror typeMirror = element.asType(); TypeElement typeElement = annotationHelper.typeElementFromQualifiedName(baseType); return typeElement != null && annotationHelper.isSubtype(typeMirror, typeElement.asType()); }
@Override public void assignValue(JBlock targetBlock, IJAssignmentTarget fieldRef, EComponentHolder holder, Element element, Element param) { TypeMirror typeMirror = annotationHelper.extractAnnotationClassParameter(element); if (typeMirror == null) { typeMirror = param.asType(); typeMirror = getProcessingEnvironment().getTypeUtils().erasure(typeMirror); } String typeQualifiedName = typeMirror.toString(); AbstractJClass injectedClass = getJClass(annotationHelper.generatedClassQualifiedNameFromQualifiedName(typeQualifiedName)); JInvocation beanInstance = injectedClass.staticInvoke(EBeanHolder.GET_INSTANCE_METHOD_NAME).arg(holder.getContextRef()); IJStatement assignment = fieldRef.assign(beanInstance); if (param.getKind() == ElementKind.FIELD) { boolean hasNonConfigurationInstanceAnnotation = element.getAnnotation(NonConfigurationInstance.class) != null; if (hasNonConfigurationInstanceAnnotation) { JConditional conditional = targetBlock._if(fieldRef.eq(_null())); conditional._then().add(assignment); assignment = conditional; } } targetBlock.add(assignment); }
@Override public void assignValue(JBlock targetBlock, IJAssignmentTarget fieldRef, EComponentHolder holder, Element element, Element param) { OrmLiteHolder ormLiteHolder = holder.getPluginHolder(new OrmLiteHolder(holder)); AbstractJClass modelClass = getJClass(ormLiteHelper.getEntityType(param).toString()); AbstractJClass idClass = getJClass(ormLiteHelper.getEntityIdType(param).toString()); IJExpression modelClassDotClass = modelClass.dotclass(); AbstractJClass daoClass = getJClass(OrmLiteClasses.DAO).narrow(modelClass, idClass); AbstractJClass daoImplClass = codeModelHelper.typeMirrorToJClass(param.asType()); TypeMirror databaseHelperTypeMirror = annotationHelper.extractAnnotationParameter(element, "helper"); JFieldVar databaseHelperRef = ormLiteHolder.getDatabaseHelperRef(databaseHelperTypeMirror); IJExpression injectExpr = databaseHelperRef.invoke("getDao").arg(modelClassDotClass); if (elementExtendsRuntimeExceptionDao(param)) { injectExpr = _new(daoImplClass).arg(cast(daoClass, injectExpr)); } JTryBlock tryBlock = targetBlock._try(); tryBlock.body().add(fieldRef.assign(injectExpr)); JCatchBlock catchBlock = tryBlock._catch(getClasses().SQL_EXCEPTION); JVar exception = catchBlock.param("e"); String fieldName = param.getSimpleName().toString(); catchBlock.body() // .staticInvoke(getClasses().LOG, "e") // .arg(logTagForClassHolder(holder))// .arg("Could not create DAO " + fieldName) // .arg(exception); }
private void setRequestFactory(Element element, RestHolder holder) { DeclaredType requestFactoryType = annotationHelper.extractAnnotationClassParameter(element, getTarget(), "requestFactory"); if (requestFactoryType != null) { JInvocation requestFactory = codeModelHelper.newBeanOrEBean(requestFactoryType, holder.getInitContextParam()); holder.getInit().body().add(invoke(holder.getRestTemplateField(), "setRequestFactory").arg(requestFactory)); } }
private void setInterceptors(Element element, RestHolder holder) { List<DeclaredType> interceptors = annotationHelper.extractAnnotationClassArrayParameter(element, getTarget(), "interceptors"); if (interceptors != null) { AbstractJClass listClass = getJClass(ARRAYLIST); AbstractJClass clientInterceptorClass = getJClass(CLIENT_HTTP_REQUEST_INTERCEPTOR); listClass = listClass.narrow(clientInterceptorClass); JFieldVar restTemplateField = holder.getRestTemplateField(); JBlock init = holder.getInit().body(); init.add(invoke(restTemplateField, "setInterceptors").arg(_new(listClass))); for (DeclaredType interceptorType : interceptors) { JInvocation newInterceptor = codeModelHelper.newBeanOrEBean(interceptorType, holder.getInitContextParam()); init.add(invoke(restTemplateField, "getInterceptors").invoke("add").arg(newInterceptor)); } } }