use of com.sun.tools.xjc.generator.annotation.spec.XmlElementWriter in project jaxb-ri by eclipse-ee4j.
the class AbstractField method writeXmlElementAnnotation.
/**
* Generate the simplest XmlElement annotation possible taking all semantic optimizations
* into account. This method is essentially equivalent to:
*
* xew.name(ctype.getTagName().getLocalPart())
* .namespace(ctype.getTagName().getNamespaceURI())
* .type(jtype)
* .defaultValue(ctype.getDefaultValue());
*
* @param checkWrapper true if the method might need to generate XmlElements
*/
private void writeXmlElementAnnotation(JAnnotatable field, CTypeRef ctype, JType jtype, boolean checkWrapper) {
// lazily create - we don't know if we need to generate anything yet
XmlElementWriter xew = null;
// these values are used to determine how to optimize the generated annotation
XmlNsForm formDefault = parent()._package().getElementFormDefault();
String propName = prop.getName(false);
String enclosingTypeNS;
if (parent().target.getTypeName() == null)
enclosingTypeNS = parent()._package().getMostUsedNamespaceURI();
else
enclosingTypeNS = parent().target.getTypeName().getNamespaceURI();
// generate the name property?
String generatedName = ctype.getTagName().getLocalPart();
if (!generatedName.equals(propName)) {
if (xew == null)
xew = getXew(checkWrapper, field);
xew.name(generatedName);
}
// generate the namespace property?
String generatedNS = ctype.getTagName().getNamespaceURI();
if (((formDefault == XmlNsForm.QUALIFIED) && !generatedNS.equals(enclosingTypeNS)) || ((formDefault == XmlNsForm.UNQUALIFIED) && !generatedNS.equals(""))) {
if (xew == null)
xew = getXew(checkWrapper, field);
xew.namespace(generatedNS);
}
// generate the required() property?
CElementPropertyInfo ep = (CElementPropertyInfo) prop;
if (ep.isRequired() && exposedType.isReference()) {
if (xew == null)
xew = getXew(checkWrapper, field);
xew.required(true);
}
// if it's a collection, we can't use a primitive, however.
if (ep.isRequired() && !prop.isCollection())
jtype = jtype.unboxify();
// generate @XmlElement(type=...)
if (!jtype.equals(exposedType) || (getOptions().runtime14 && prop.isCollection())) {
if (xew == null)
xew = getXew(checkWrapper, field);
xew.type(jtype);
}
// generate defaultValue property?
final String defaultValue = ctype.getDefaultValue();
if (defaultValue != null) {
if (xew == null)
xew = getXew(checkWrapper, field);
xew.defaultValue(defaultValue);
}
// generate the nillable property?
if (ctype.isNillable()) {
if (xew == null)
xew = getXew(checkWrapper, field);
xew.nillable(true);
}
}
Aggregations