constructorGeneratorFactory function
Creates a ConstructorGenerator from an Element
that has an attribute of the form @XmlAttribute()
, @XmlElement()
, @XmlRootElement()
, or @XmlText()
.
Implementation
ConstructorGenerator constructorGeneratorFactory(Element element) {
if (element.hasXmlAttribute) {
if (element is FieldElement) {
return xmlAttributeConstructorGeneratorFactory(element);
} else {
throw ArgumentError.value(
element,
'element',
'`@XmlAttribute()` can only be used on fields.',
);
}
} else if (element.hasXmlCDATA) {
if (element is FieldElement) {
return XmlCDATAConstructorGenerator(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 xmlElementConstructorGeneratorFactory(element);
} else {
throw ArgumentError.value(
element,
'element',
'`@XmlElement()` can only be used on fields.',
);
}
} else if (element.hasXmlRootElement) {
if (element is ClassElement) {
return xmlRootElementConstructorGeneratorFactory(element);
} else {
throw ArgumentError.value(
element,
'element',
'`@XmlRootElement()` can only be used on classes.',
);
}
} else if (element.hasXmlText) {
if (element is FieldElement) {
return XmlTextConstructorGenerator(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}`.',
);
}