/* */ 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()); /* */ }
/*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(); }
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; }