public ValidatorHelper(TargetAnnotationHelper targetAnnotationHelper) { annotationHelper = targetAnnotationHelper; param = new ValidatorParameterHelper(annotationHelper); parcelerHelper = new ParcelerHelper(environment()); }
public boolean isParcelType(TypeMirror typeMirror, boolean root) { if (typeMirror instanceof DeclaredType && getElementUtils().getTypeElement(CanonicalNameConstants.PARCEL_ANNOTATION) != null) { DeclaredType declaredType = (DeclaredType) typeMirror; TypeElement element = (TypeElement) declaredType.asElement(); String name = element.getQualifiedName().toString(); if (isAnnotatedWith(element, CanonicalNameConstants.PARCEL_ANNOTATION)) { return true; } if (SUPPORTED_PARCEL_TYPES.containsKey(name)) { boolean genericsMatch = true; Integer genericsSize = SUPPORTED_PARCEL_TYPES.get(name); if (genericsSize == declaredType.getTypeArguments().size() && (!root || genericsSize > 0)) { for (int i = 0; i < genericsSize; i++) { genericsMatch &= isParcelType(declaredType.getTypeArguments().get(i), false); } return genericsMatch; } } } return false; } }
element.getKind() == TypeKind.TYPEVAR && hasTypeArguments(getUpperBound(element)); ParcelerHelper parcelerHelper = new ParcelerHelper(environment); } else if (parcelerHelper.isParcelType(type)) { methodNameToSave = "put" + "Parcelable"; methodNameToRestore = "get" + "Parcelable";
public boolean isParcelType(TypeMirror typeMirror) { return isParcelType(typeMirror, true); }
element.getKind() == TypeKind.TYPEVAR && hasTypeArguments(getUpperBound(element)); ParcelerHelper parcelerHelper = new ParcelerHelper(environment); } else if (parcelerHelper.isParcelType(type)) { methodNameToSave = "put" + "Parcelable"; methodNameToRestore = "get" + "Parcelable";
public void canBePutInABundle(Element element, ElementValidation valid) { TypeMirror typeMirror = element.asType(); String typeString = element.asType().toString(); if (!isKnownBundleCompatibleType(typeString)) { if (typeMirror instanceof ArrayType) { ArrayType arrayType = (ArrayType) element.asType(); typeMirror = arrayType.getComponentType(); } if (typeMirror.getKind() != TypeKind.NONE) { TypeMirror parcelableType = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.PARCELABLE).asType(); TypeMirror serializableType = annotationHelper.typeElementFromQualifiedName("java.io.Serializable").asType(); if (typeString.startsWith(CanonicalNameConstants.SPARSE_ARRAY)) { DeclaredType declaredType = (DeclaredType) typeMirror; List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments(); if (typeArguments.size() != 1 || !annotationHelper.isSubtype(typeArguments.get(0), parcelableType)) { valid.addError("Unrecognized type. The type argument of SparseArray should implement Parcelable."); } } else if (!annotationHelper.isSubtype(typeMirror, parcelableType) && !annotationHelper.isSubtype(typeMirror, serializableType) && !parcelerHelper.isParcelType(typeMirror)) { valid.addError("Unrecognized type. Please let your attribute be primitive or implement Serializable or Parcelable or an annotated Parceler bean."); } } } }
public boolean isParcelType(TypeMirror typeMirror, boolean root) { if (typeMirror instanceof DeclaredType && getElementUtils().getTypeElement(CanonicalNameConstants.PARCEL_ANNOTATION) != null) { DeclaredType declaredType = (DeclaredType) typeMirror; TypeElement element = (TypeElement) declaredType.asElement(); String name = element.getQualifiedName().toString(); if (isAnnotatedWith(element, CanonicalNameConstants.PARCEL_ANNOTATION)) { return true; } if (SUPPORTED_PARCEL_TYPES.containsKey(name)) { boolean genericsMatch = true; Integer genericsSize = SUPPORTED_PARCEL_TYPES.get(name); if (genericsSize == declaredType.getTypeArguments().size() && (!root || genericsSize > 0)) { for (int i = 0; i < genericsSize; i++) { genericsMatch &= isParcelType(declaredType.getTypeArguments().get(i), false); } return genericsMatch; } } } return false; } }
public JInvocation getSuperPutExtraInvocation(TypeMirror elementType, JVar extraParam, JFieldVar extraKeyField) { IJExpression extraParameterArg = extraParam; // Cast to Parcelable, wrap with Parcels.wrap or cast Serializable if needed if (elementType.getKind() == TypeKind.DECLARED) { Elements elementUtils = environment.getProcessingEnvironment().getElementUtils(); TypeMirror parcelableType = elementUtils.getTypeElement(PARCELABLE).asType(); if (typeUtils.isSubtype(elementType, parcelableType)) { TypeMirror serializableType = elementUtils.getTypeElement(SERIALIZABLE).asType(); if (typeUtils.isSubtype(elementType, serializableType)) { extraParameterArg = cast(environment.getClasses().PARCELABLE, extraParameterArg); } } else if (!BundleHelper.METHOD_SUFFIX_BY_TYPE_NAME.containsKey(elementType.toString()) && parcelerHelper.isParcelType(elementType)) { extraParameterArg = environment.getJClass(CanonicalNameConstants.PARCELS_UTILITY_CLASS).staticInvoke("wrap").arg(extraParameterArg); } else { TypeMirror stringType = elementUtils.getTypeElement(STRING).asType(); if (!typeUtils.isSubtype(elementType, stringType)) { extraParameterArg = cast(environment.getClasses().SERIALIZABLE, extraParameterArg); } } } return _super().invoke("extra").arg(extraKeyField).arg(extraParameterArg); }
public IntentBuilder(HasIntentBuilder holder, AndroidManifest androidManifest) { this.environment = holder.getEnvironment(); this.holder = holder; this.androidManifest = androidManifest; this.annotationHelper = new AnnotationHelper(environment); this.parcelerHelper = new ParcelerHelper(environment); codeModelHelper = new APTCodeModelHelper(environment); elementUtils = environment.getProcessingEnvironment().getElementUtils(); typeUtils = environment.getProcessingEnvironment().getTypeUtils(); contextClass = environment.getClasses().CONTEXT; intentClass = environment.getClasses().INTENT; }
public boolean isParcelType(TypeMirror typeMirror) { return isParcelType(typeMirror, true); }
public ValidatorHelper(TargetAnnotationHelper targetAnnotationHelper) { annotationHelper = targetAnnotationHelper; param = new ValidatorParameterHelper(annotationHelper); parcelerHelper = new ParcelerHelper(environment()); }
public void canBePutInABundle(Element element, ElementValidation valid) { TypeMirror typeMirror = element.asType(); String typeString = element.asType().toString(); if (!isKnownBundleCompatibleType(typeString)) { if (typeMirror instanceof ArrayType) { ArrayType arrayType = (ArrayType) element.asType(); typeMirror = arrayType.getComponentType(); } if (typeMirror.getKind() != TypeKind.NONE) { TypeMirror parcelableType = annotationHelper.typeElementFromQualifiedName(CanonicalNameConstants.PARCELABLE).asType(); TypeMirror serializableType = annotationHelper.typeElementFromQualifiedName("java.io.Serializable").asType(); if (typeString.startsWith(CanonicalNameConstants.SPARSE_ARRAY)) { DeclaredType declaredType = (DeclaredType) typeMirror; List<? extends TypeMirror> typeArguments = declaredType.getTypeArguments(); if (typeArguments.size() != 1 || !annotationHelper.isSubtype(typeArguments.get(0), parcelableType)) { valid.addError("Unrecognized type. The type argument of SparseArray should implement Parcelable."); } } else if (!annotationHelper.isSubtype(typeMirror, parcelableType) && !annotationHelper.isSubtype(typeMirror, serializableType) && !parcelerHelper.isParcelType(typeMirror)) { valid.addError("Unrecognized type. Please let your attribute be primitive or implement Serializable or Parcelable or an annotated Parceler bean."); } } } }
public IntentBuilder(HasIntentBuilder holder, AndroidManifest androidManifest) { this.environment = holder.getEnvironment(); this.holder = holder; this.androidManifest = androidManifest; this.annotationHelper = new AnnotationHelper(environment); this.parcelerHelper = new ParcelerHelper(environment); codeModelHelper = new APTCodeModelHelper(environment); elementUtils = environment.getProcessingEnvironment().getElementUtils(); typeUtils = environment.getProcessingEnvironment().getTypeUtils(); contextClass = environment.getClasses().CONTEXT; intentClass = environment.getClasses().INTENT; }
public JInvocation getSuperPutExtraInvocation(TypeMirror elementType, JVar extraParam, JFieldVar extraKeyField) { IJExpression extraParameterArg = extraParam; // Cast to Parcelable, wrap with Parcels.wrap or cast Serializable if needed if (elementType.getKind() == TypeKind.DECLARED) { Elements elementUtils = environment.getProcessingEnvironment().getElementUtils(); TypeMirror parcelableType = elementUtils.getTypeElement(PARCELABLE).asType(); if (typeUtils.isSubtype(elementType, parcelableType)) { TypeMirror serializableType = elementUtils.getTypeElement(SERIALIZABLE).asType(); if (typeUtils.isSubtype(elementType, serializableType)) { extraParameterArg = cast(environment.getClasses().PARCELABLE, extraParameterArg); } } else if (!BundleHelper.METHOD_SUFFIX_BY_TYPE_NAME.containsKey(elementType.toString()) && parcelerHelper.isParcelType(elementType)) { extraParameterArg = environment.getJClass(CanonicalNameConstants.PARCELS_UTILITY_CLASS).staticInvoke("wrap").arg(extraParameterArg); } else { TypeMirror stringType = elementUtils.getTypeElement(STRING).asType(); if (!typeUtils.isSubtype(elementType, stringType)) { extraParameterArg = cast(environment.getClasses().SERIALIZABLE, extraParameterArg); } } } return _super().invoke("extra").arg(extraKeyField).arg(extraParameterArg); }