xmlElementConstructorGeneratorFactory function

ConstructorGenerator xmlElementConstructorGeneratorFactory(
  1. FieldElement element
)

Creates a ConstructorGenerator from a FieldElement that has an attribute of the form @XmlElement().

Implementation

ConstructorGenerator xmlElementConstructorGeneratorFactory(
  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 IterableConstructorGenerator(
        XmlConverterXmlElementConstructorGenerator(
          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 IterableConstructorGenerator(
        XmlSerializableXmlElementConstructorGenerator(
          xmlElement.name ?? element.getEncodedFieldName(),
          namespace: xmlElement.namespace,
          isSelfClosing: xmlElement.isSelfClosing,
          includeIfNull: xmlElement.includeIfNull,
          isNullable: type.typeArguments.single.isNullable,
        ),
        isNullable: type.isNullable,
      );
    } else {
      return IterableConstructorGenerator(
        XmlTextXmlElementConstructorGenerator(
          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 XmlConverterXmlElementConstructorGenerator(
        xmlElement.name ?? element.getEncodedFieldName(),
        converterElement.name!,
        namespace: xmlElement.namespace,
        isSelfClosing: xmlElement.isSelfClosing,
        includeIfNull: xmlElement.includeIfNull,
        isNullable: type.isNullable,
      );
    } else if (type.element!.hasXmlSerializable) {
      return XmlSerializableXmlElementConstructorGenerator(
        xmlElement.name ?? element.getEncodedFieldName(),
        namespace: xmlElement.namespace,
        isSelfClosing: xmlElement.isSelfClosing,
        includeIfNull: xmlElement.includeIfNull,
        isNullable: type.isNullable,
      );
    } else {
      return XmlTextXmlElementConstructorGenerator(
        xmlElement.name ?? element.getEncodedFieldName(),
        namespace: xmlElement.namespace,
        isSelfClosing: xmlElement.isSelfClosing,
        includeIfNull: xmlElement.includeIfNull,
        isNullable: type.isNullable,
      );
    }
  }
}