Search in sources :

Example 1 with XmlElementWriter

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);
    }
}
Also used : CElementPropertyInfo(com.sun.tools.xjc.model.CElementPropertyInfo) XmlNsForm(jakarta.xml.bind.annotation.XmlNsForm) XmlElementWriter(com.sun.tools.xjc.generator.annotation.spec.XmlElementWriter)

Aggregations

XmlElementWriter (com.sun.tools.xjc.generator.annotation.spec.XmlElementWriter)1 CElementPropertyInfo (com.sun.tools.xjc.model.CElementPropertyInfo)1 XmlNsForm (jakarta.xml.bind.annotation.XmlNsForm)1