builderGeneratorFactory function
Creates a BuilderGenerator from an Element
that has an annotation of the form @XmlAttribute()
, @XmlElement()
, @XmlRootElement()
, or @XmlText()
.
Implementation
BuilderGenerator builderGeneratorFactory(Element element) {
if (element.hasXmlAttribute) {
if (element is FieldElement) {
return xmlAttributeBuilderGeneratorFactory(element);
} else {
throw ArgumentError.value(
element,
'element',
'`@XmlAttribute()` can only be used on fields.',
);
}
} else if (element.hasXmlCDATA) {
if (element is FieldElement) {
return XmlCDATABuilderGenerator(isNullable: element.type.isNullable);
} else {
throw ArgumentError.value(
element,
'element',
'`@XmlCDATA()` can only be used on fields.',
);
}
} else if (element.hasXmlElement) {
if (element is FieldElement) {
return xmlElementBuilderGeneratorFactory(element);
} else {
throw ArgumentError.value(
element,
'element',
'`@XmlElement()` can only be used on fields.',
);
}
} else if (element.hasXmlRootElement) {
if (element is ClassElement) {
return xmlRootElementBuilderGeneratorFactory(element);
} else {
throw ArgumentError.value(
element,
'element',
'`@XmlRootElement()` can only be used on classes.',
);
}
} else if (element.hasXmlText) {
if (element is FieldElement) {
return XmlTextBuilderGenerator(isNullable: element.type.isNullable);
} else {
throw ArgumentError.value(
element,
'element',
'`@XmlText()` can only be used on fields.',
);
}
}
throw ArgumentError.value(
element,
'element',
'`${element.name}` does not have a supported annotation. Add an annotation of the form `@XmlAttribute()`, `@XmlElement()`, `@XmlRootElement()`, or `@XmlText()` to `${element.name}`.',
);
}