Beispiel #1
0
  /**
   * 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;
  }
Beispiel #2
0
  /**
   * 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;
  }
Beispiel #3
0
  /** 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();
  }