xmlElementBuilderGeneratorFactory function
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,
);
}
}
}