Search in sources :

Example 1 with BIEnum

use of com.sun.tools.xjc.reader.xmlschema.bindinfo.BIEnum in project jaxb-ri by eclipse-ee4j.

the class SimpleTypeBuilder method find.

/**
 * Checks if there's any binding available on the given type.
 *
 * @return
 *      null if not (which causes the {@link #compose(XSSimpleType)} method
 *      to do ascending.
 */
private TypeUse find(XSSimpleType type) {
    TypeUse r;
    boolean noAutoEnum = false;
    // check for user specified conversion
    BindInfo info = builder.getBindInfo(type);
    BIConversion conv = info.get(BIConversion.class);
    if (conv != null) {
        // a conversion was found
        conv.markAsAcknowledged();
        return conv.getTypeUse(type);
    }
    // look for enum customization, which is another user specified conversion
    BIEnum en = info.get(BIEnum.class);
    if (en != null) {
        en.markAsAcknowledged();
        if (!en.isMapped()) {
            noAutoEnum = true;
        } else {
            // the type is OK
            if (!canBeMappedToTypeSafeEnum(type)) {
                getErrorReporter().error(en.getLocation(), Messages.ERR_CANNOT_BE_TYPE_SAFE_ENUM);
                getErrorReporter().error(type.getLocator(), Messages.ERR_CANNOT_BE_TYPE_SAFE_ENUM_LOCATION);
                // recover by ignoring this customization
                return null;
            }
            // reference?
            if (en.ref != null) {
                if (!JJavaName.isFullyQualifiedClassName(en.ref)) {
                    Ring.get(ErrorReceiver.class).error(en.getLocation(), Messages.format(Messages.ERR_INCORRECT_CLASS_NAME, en.ref));
                    // recover by ignoring @ref
                    return null;
                }
                return new CClassRef(model, type, en, info.toCustomizationList());
            }
            // so in this stage we can safely cast it to XSRestrictionSimpleType
            return bindToTypeSafeEnum((XSRestrictionSimpleType) type, en.className, en.javadoc, en.members, getEnumMemberMode().getModeWithEnum(), en.getLocation());
        }
    }
    // if the type is built in, look for the default binding
    if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(type.getTargetNamespace())) {
        String name = type.getName();
        if (name != null) {
            r = lookupBuiltin(name);
            if (r != null)
                return r;
        }
    }
    // also check for swaRef
    if (type.getTargetNamespace().equals(WellKnownNamespace.SWA_URI)) {
        String name = type.getName();
        if (name != null && name.equals("swaRef"))
            return CBuiltinLeafInfo.STRING.makeAdapted(SwaRefAdapterMarker.class, false);
    }
    // if so, built a EnumXDucer from it and return it.
    if (type.isRestriction() && !noAutoEnum) {
        XSRestrictionSimpleType rst = type.asRestriction();
        if (shouldBeMappedToTypeSafeEnumByDefault(rst)) {
            r = bindToTypeSafeEnum(rst, null, null, Collections.emptyMap(), getEnumMemberMode(), null);
            if (r != null)
                return r;
        }
    }
    return (CNonElement) getClassSelector()._bindToClass(type, null, false);
}
Also used : TypeUse(com.sun.tools.xjc.model.TypeUse) BIConversion(com.sun.tools.xjc.reader.xmlschema.bindinfo.BIConversion) XSRestrictionSimpleType(com.sun.xml.xsom.XSRestrictionSimpleType) SwaRefAdapterMarker(org.glassfish.jaxb.core.v2.runtime.SwaRefAdapterMarker) CClassRef(com.sun.tools.xjc.model.CClassRef) CNonElement(com.sun.tools.xjc.model.CNonElement) ErrorReceiver(com.sun.tools.xjc.ErrorReceiver) BIEnum(com.sun.tools.xjc.reader.xmlschema.bindinfo.BIEnum) BindInfo(com.sun.tools.xjc.reader.xmlschema.bindinfo.BindInfo)

Aggregations

ErrorReceiver (com.sun.tools.xjc.ErrorReceiver)1 CClassRef (com.sun.tools.xjc.model.CClassRef)1 CNonElement (com.sun.tools.xjc.model.CNonElement)1 TypeUse (com.sun.tools.xjc.model.TypeUse)1 BIConversion (com.sun.tools.xjc.reader.xmlschema.bindinfo.BIConversion)1 BIEnum (com.sun.tools.xjc.reader.xmlschema.bindinfo.BIEnum)1 BindInfo (com.sun.tools.xjc.reader.xmlschema.bindinfo.BindInfo)1 XSRestrictionSimpleType (com.sun.xml.xsom.XSRestrictionSimpleType)1 SwaRefAdapterMarker (org.glassfish.jaxb.core.v2.runtime.SwaRefAdapterMarker)1