xmlElementBuilderGeneratorFactory function

BuilderGenerator xmlElementBuilderGeneratorFactory(
  1. FieldElement element
)

Creates a BuilderGenerator from a FieldElement that has an annotation of the form @XmlElement().

Implementation

BuilderGenerator xmlElementBuilderGeneratorFactory(FieldElement element) {
  final xmlElement = element.getXmlElement()!.toXmlElementValue()!;

  final type = element.type;
  if (type is ParameterizedType &&
      (type.isDartCoreIterable || type.isDartCoreList || type.isDartCoreSet)) {
    final converterElement = element.getXmlConverterElement(type: type);
    if (converterElement != null) {
      return IterableBuilderGenerator(
        XmlConverterXmlElementBuilderGenerator(
          xmlElement.name ?? element.getEncodedFieldName(),
          converterElement.name!,
          namespace: xmlElement.namespace,
          isSelfClosing: xmlElement.isSelfClosing,
          includeIfNull: xmlElement.includeIfNull,
          isNullable: type.typeArguments.single.isNullable,
        ),
        isNullable: type.isNullable,
      );
    } else if (type.typeArguments.single.element!.hasXmlSerializable) {
      return IterableBuilderGenerator(
        XmlSerializableXmlElementBuilderGenerator(
          xmlElement.name ?? element.getEncodedFieldName(),
          namespace: xmlElement.namespace,
          isSelfClosing: xmlElement.isSelfClosing,
          includeIfNull: xmlElement.includeIfNull,
          isNullable: type.typeArguments.single.isNullable,
        ),
        isNullable: type.isNullable,
      );
    } else {
      return IterableBuilderGenerator(
        XmlTextXmlElementBuilderGenerator(
          xmlElement.name ?? element.getEncodedFieldName(),
          namespace: xmlElement.namespace,
          isSelfClosing: xmlElement.isSelfClosing,
          includeIfNull: xmlElement.includeIfNull,
          isNullable: type.typeArguments.single.isNullable,
        ),
        isNullable: type.isNullable,
      );
    }
  } else {
    final converterElement = element.getXmlConverterElement(type: type);
    if (converterElement != null) {
      return XmlConverterXmlElementBuilderGenerator(
        xmlElement.name ?? element.getEncodedFieldName(),
        converterElement.name!,
        namespace: xmlElement.namespace,
        isSelfClosing: xmlElement.isSelfClosing,
        includeIfNull: xmlElement.includeIfNull,
        isNullable: type.isNullable,
      );
    } else if (type.element!.hasXmlSerializable) {
      return XmlSerializableXmlElementBuilderGenerator(
        xmlElement.name ?? element.getEncodedFieldName(),
        namespace: xmlElement.namespace,
        isSelfClosing: xmlElement.isSelfClosing,
        includeIfNull: xmlElement.includeIfNull,
        isNullable: type.isNullable,
      );
    } else {
      return XmlTextXmlElementBuilderGenerator(
        xmlElement.name ?? element.getEncodedFieldName(),
        namespace: xmlElement.namespace,
        isSelfClosing: xmlElement.isSelfClosing,
        includeIfNull: xmlElement.includeIfNull,
        isNullable: type.isNullable,
      );
    }
  }
}