/** * Gets or creates the BindInfo object associated to a schema component. * * @return Always return a non-null valid BindInfo object. Even if no declaration was specified, * this method creates a new BindInfo so that new decls can be added. */ public BindInfo getOrCreateBindInfo(XSComponent schemaComponent) { BindInfo bi = _getBindInfoReadOnly(schemaComponent); if (bi != null) return bi; // XSOM is read-only, so we cannot add new annotations. // for components that didn't have annotations, // we maintain an external map. bi = new BindInfo(); bi.setOwner(this, schemaComponent); externalBindInfos.put(schemaComponent, bi); return bi; }
/** * Gets the BindInfo object associated to a schema component. * * @return null if no bind info is associated to this schema component. */ private BindInfo _getBindInfoReadOnly(XSComponent schemaComponent) { BindInfo bi = externalBindInfos.get(schemaComponent); if (bi != null) return bi; XSAnnotation annon = schemaComponent.getAnnotation(); if (annon != null) { bi = (BindInfo) annon.getAnnotation(); if (bi != null) { if (bi.getOwner() == null) bi.setOwner(this, schemaComponent); return bi; } } return null; }
/** List up all the global bindings. */ private void promoteGlobalBindings() { // promote any global bindings in the schema XSSchemaSet schemas = Ring.get(XSSchemaSet.class); for (XSSchema s : schemas.getSchemas()) { BindInfo bi = getBindInfo(s); // collect all global customizations model.getCustomizations().addAll(bi.toCustomizationList()); BIGlobalBinding gb = bi.get(BIGlobalBinding.class); if (gb == null) continue; if (globalBinding == null) { globalBinding = gb; globalBinding.markAsAcknowledged(); } else { // acknowledge this customization and report an error // otherwise the user will see "customization is attached to a wrong place" error, // which is incorrect gb.markAsAcknowledged(); getErrorReporter().error(gb.getLocation(), Messages.ERR_MULTIPLE_GLOBAL_BINDINGS); getErrorReporter() .error(globalBinding.getLocation(), Messages.ERR_MULTIPLE_GLOBAL_BINDINGS_OTHER); } } if (globalBinding == null) { // no global customization is present. // use the default one globalBinding = new BIGlobalBinding(); BindInfo big = new BindInfo(); big.addDecl(globalBinding); big.setOwner(this, null); } // code generation mode model.strategy = globalBinding.getCodeGenerationStrategy(); model.rootClass = globalBinding.getSuperClass(); model.rootInterface = globalBinding.getSuperInterface(); particleBinder = globalBinding.isSimpleMode() ? new ExpressionParticleBinder() : new DefaultParticleBinder(); // check XJC extensions and realize them BISerializable serial = globalBinding.getSerializable(); if (serial != null) { model.serializable = true; model.serialVersionUID = serial.uid; } // obtain the name conversion mode if (globalBinding.nameConverter != null) model.setNameConverter(globalBinding.nameConverter); // attach global conversions to the appropriate simple types globalBinding.dispatchGlobalConversions(schemas); globalBinding.errorCheck(); }