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);
}
Aggregations