/*     */ public static <T> TransducedAccessor<T> get(
     JAXBContextImpl context, RuntimeNonElementRef ref)
       /*     */ {
   /* 142 */ Transducer xducer = RuntimeModelBuilder.createTransducer(ref);
   /* 143 */ RuntimePropertyInfo prop = ref.getSource();
   /*     */
   /* 145 */ if (prop.isCollection()) {
     /* 146 */ return new ListTransducedAccessorImpl(
         xducer,
         prop.getAccessor(),
         Lister.create(
             Navigator.REFLECTION.erasure(prop.getRawType()), prop.id(), prop.getAdapter()));
     /*     */ }
   /*     */
   /* 151 */ if (prop.id() == ID.IDREF) {
     /* 152 */ return new IDREFTransducedAccessorImpl(prop.getAccessor());
     /*     */ }
   /* 154 */ if ((xducer.isDefault()) && (context != null) && (!context.fastBoot)) {
     /* 155 */ TransducedAccessor xa = OptimizedTransducedAccessorFactory.get(prop);
     /* 156 */ if (xa != null) return xa;
     /*     */ }
   /*     */
   /* 159 */ if (xducer.useNamespace()) {
     /* 160 */ return new CompositeContextDependentTransducedAccessorImpl(
         context, xducer, prop.getAccessor());
     /*     */ }
   /* 162 */ return new CompositeTransducedAccessorImpl(context, xducer, prop.getAccessor());
   /*     */ }
Exemplo n.º 2
0
  /*package*/ ClassBeanInfoImpl(JAXBContextImpl owner, RuntimeClassInfo ci) {
    super(owner, ci, ci.getClazz(), ci.getTypeName(), ci.isElement(), false, true);

    this.ci = ci;
    this.inheritedAttWildcard = ci.getAttributeWildcard();
    this.xducer = ci.getTransducer();
    this.factoryMethod = ci.getFactoryMethod();
    this.retainPropertyInfo = owner.retainPropertyInfo;

    // make the factory accessible
    if (factoryMethod != null) {
      int classMod = factoryMethod.getDeclaringClass().getModifiers();

      if (!Modifier.isPublic(classMod) || !Modifier.isPublic(factoryMethod.getModifiers())) {
        // attempt to make it work even if the constructor is not accessible
        try {
          factoryMethod.setAccessible(true);
        } catch (SecurityException e) {
          // but if we don't have a permission to do so, work gracefully.
          logger.log(
              Level.FINE, "Unable to make the method of " + factoryMethod + " accessible", e);
          throw e;
        }
      }
    }

    if (ci.getBaseClass() == null) this.superClazz = null;
    else this.superClazz = owner.getOrCreate(ci.getBaseClass());

    if (superClazz != null && superClazz.xmlLocatorField != null)
      xmlLocatorField = superClazz.xmlLocatorField;
    else xmlLocatorField = ci.getLocatorField();

    // create property objects
    Collection<? extends RuntimePropertyInfo> ps = ci.getProperties();
    this.properties = new Property[ps.size()];
    int idx = 0;
    boolean elementOnly = true;
    for (RuntimePropertyInfo info : ps) {
      Property p = PropertyFactory.create(owner, info);
      if (info.id() == ID.ID) idProperty = p;
      properties[idx++] = p;
      elementOnly &= info.elementOnlyContent();
      checkOverrideProperties(p);
    }
    // super class' idProperty might not be computed at this point,
    // so check that later

    hasElementOnlyContentModel(elementOnly);
    // again update this value later when we know that of the super class

    if (ci.isElement()) tagName = owner.nameBuilder.createElementName(ci.getElementName());
    else tagName = null;

    setLifecycleFlags();
  }
Exemplo n.º 3
0
  protected ArrayProperty(JAXBContextImpl context, RuntimePropertyInfo prop) {
    super(context, prop);

    assert prop.isCollection();
    lister =
        Lister.create(
            Navigator.REFLECTION.erasure(prop.getRawType()), prop.id(), prop.getAdapter());
    assert lister != null;
    acc = prop.getAccessor().optimize(context);
    assert acc != null;
  }