Example #1
0
  public JAXBModelImpl(
      TypeInfoSet<TypeMirror, TypeElement, VariableElement, ExecutableElement> types,
      AnnotationReader<TypeMirror, TypeElement, VariableElement, ExecutableElement> reader,
      Collection<Reference> rootClasses,
      Map<QName, Reference> additionalElementDecls) {
    this.types = types;
    this.reader = reader;
    this.additionalElementDecls = additionalElementDecls;

    Navigator<TypeMirror, TypeElement, VariableElement, ExecutableElement> navigator =
        types.getNavigator();

    for (ClassInfo<TypeMirror, TypeElement> i : types.beans().values()) {
      classList.add(i.getName());
    }

    for (ArrayInfo<TypeMirror, TypeElement> a : types.arrays().values()) {
      String javaName = navigator.getTypeName(a.getType());
      classList.add(javaName);
    }

    for (EnumLeafInfo<TypeMirror, TypeElement> l : types.enums().values()) {
      QName tn = l.getTypeName();
      if (tn != null) {
        String javaName = navigator.getTypeName(l.getType());
        classList.add(javaName);
      }
    }

    for (Reference ref : rootClasses) refMap.put(ref, getXmlType(ref));

    // check for collision between "additional" ones and the ones given to JAXB
    // and eliminate duplication
    Iterator<Map.Entry<QName, Reference>> itr = additionalElementDecls.entrySet().iterator();
    while (itr.hasNext()) {
      Map.Entry<QName, Reference> entry = itr.next();
      if (entry.getValue() == null) continue;

      NonElement<TypeMirror, TypeElement> xt = getXmlType(entry.getValue());

      assert xt != null;
      refMap.put(entry.getValue(), xt);
      if (xt instanceof ClassInfo) {
        ClassInfo<TypeMirror, TypeElement> xct = (ClassInfo<TypeMirror, TypeElement>) xt;
        Element<TypeMirror, TypeElement> elem = xct.asElement();
        if (elem != null && elem.getElementName().equals(entry.getKey())) {
          itr.remove();
          continue;
        }
      }
      ElementInfo<TypeMirror, TypeElement> ei = types.getElementInfo(null, entry.getKey());
      if (ei != null && ei.getContentType() == xt) itr.remove();
    }
  }
Example #2
0
  private NonElement<TypeMirror, TypeElement> getXmlType(Reference r) {
    if (r == null) throw new IllegalArgumentException();

    XmlJavaTypeAdapter xjta = r.annotations.getAnnotation(XmlJavaTypeAdapter.class);
    XmlList xl = r.annotations.getAnnotation(XmlList.class);

    Ref<TypeMirror, TypeElement> ref =
        new Ref<TypeMirror, TypeElement>(reader, types.getNavigator(), r.type, xjta, xl);

    return types.getTypeInfo(ref);
  }
Example #3
0
  private synchronized XmlSchemaGenerator<
          TypeMirror, TypeElement, VariableElement, ExecutableElement>
      getSchemaGenerator() {
    if (xsdgen == null) {
      xsdgen =
          new XmlSchemaGenerator<TypeMirror, TypeElement, VariableElement, ExecutableElement>(
              types.getNavigator(), types);

      for (Map.Entry<QName, Reference> e : additionalElementDecls.entrySet()) {
        Reference value = e.getValue();
        if (value != null) {
          NonElement<TypeMirror, TypeElement> typeInfo = refMap.get(value);
          if (typeInfo == null)
            throw new IllegalArgumentException(
                e.getValue() + " was not specified to JavaCompiler.bind");
          TypeMirror type = value.type;
          xsdgen.add(e.getKey(), !(type != null && type.getKind().isPrimitive()), typeInfo);
        } else {
          xsdgen.add(e.getKey(), false, null);
        }
      }
    }
    return xsdgen;
  }