protected ClassInfoImpl<T,C,F,M> createClassInfo(C clazz, Locatable upstream ) { return new ClassInfoImpl<T,C,F,M>(this,upstream,clazz); }
C sc = nav().getSuperClass(c); if (shouldRecurseSuperClass(sc)) { findFieldProperties(sc,at); for( F f : nav().getDeclaredFields(c) ) { Annotation[] annotations = reader().getAllFieldAnnotations(f,this); boolean isDummy = reader().hasFieldAnnotation(OverrideAnnotationOf.class, f); if( nav().isTransient(f) ) { if(hasJAXBAnnotation(annotations)) builder.reportError(new IllegalAnnotationException( Messages.TRANSIENT_FIELD_NOT_BINDABLE.format(nav().getFieldName(f)), getSomeJAXBAnnotation(annotations))); } else if( nav().isStaticField(f) ) { if(hasJAXBAnnotation(annotations)) addProperty(createFieldSeed(f),annotations, false); } else { if(at==XmlAccessType.FIELD ||(at==XmlAccessType.PUBLIC_MEMBER && nav().isPublicField(f)) || hasJAXBAnnotation(annotations)) { if (isDummy) { ClassInfo<T, C> top = getBaseClass(); while ((top != null) && (top.getProperty("content") == null)) { top = top.getBaseClass(); PropertySeed seed = createFieldSeed(f);
/** * A {@link ClassInfo} can be referenced by {@link XmlIDREF} if * it has an ID property. */ public boolean canBeReferencedByIDREF() { for (PropertyInfo<T,C> p : getProperties()) { if(p.id()== ID.ID) return true; } ClassInfoImpl<T,C,F,M> base = getBaseClass(); if(base!=null) return base.canBeReferencedByIDREF(); else return false; }
C sc = nav().getSuperClass(c); if(shouldRecurseSuperClass(sc)) collectGetterSetters(sc,getters,setters); Collection<? extends M> methods = nav().getDeclaredMethods(c); Map<String,List<M>> allSetters = new LinkedHashMap<String,List<M>>(); for( M method : methods ) { boolean used = false; // if this method is added to getters or setters if(nav().isBridgeMethod(method)) continue; // ignore String name = nav().getMethodName(method); int arity = nav().getMethodParameters(method).length; if(nav().isStaticMethod(method)) { ensureNoAnnotation(method); continue; String propName = getPropertyNameFromGetMethod(name); if(propName!=null && arity==0) { getters.put(propName,method); propName = getPropertyNameFromSetMethod(name); if(propName!=null && arity==1) { List<M> propSetters = allSetters.get(propName); ensureNoAnnotation(method);
if(index==null) continue; switch(index) { case 0: checkConflict(t ,ann); t = (XmlTransient) ann; break; case 1: checkConflict(aa ,ann); aa = (XmlAnyAttribute) ann; break; case 2: checkConflict(a ,ann); a = (XmlAttribute) ann; break; case 3: checkConflict(v ,ann); v = (XmlValue) ann; break; case 4: checkConflict(e1 ,ann); e1 = (XmlElement) ann; break; case 5: checkConflict(e2 ,ann); e2 = (XmlElements) ann; break; case 6: checkConflict(r1 ,ann); r1 = (XmlElementRef) ann; break; case 7: checkConflict(r2 ,ann); r2 = (XmlElementRefs) ann; break; case 8: checkConflict(xae,ann); xae = (XmlAnyElement) ann; break; case 9: checkConflict(mx, ann); mx = (XmlMixed) ann; break; case 10: checkConflict(ov, ann); ov = (OverrideAnnotationOf) ann; break; default: List<Annotation> err = makeSet(t,aa,a,v,pickOne(e1,e2),pickOne(r1,r2,xae)); throw new ConflictException(err); if(nav().isSubClassOf( seed.getRawType(), nav().ref(Map.class) ) && !seed.hasAnnotation(XmlJavaTypeAdapter.class)) group = PropertyGroup.MAP; group = PropertyGroup.ELEMENT; } else if (group.equals(PropertyGroup.ELEMENT)) { // see issue 791 - make sure @XmlElement annotated map property is mapped to map if (nav().isSubClassOf( seed.getRawType(), nav().ref(Map.class)) && !seed.hasAnnotation(XmlJavaTypeAdapter.class)) { group = PropertyGroup.MAP; builder.reportError(new IllegalAnnotationException( Messages.TWO_ATTRIBUTE_WILDCARDS.format(
collectGetterSetters(clazz, getters, setters); c = nav().getSuperClass(c); } while(shouldRecurseSuperClass(c)); resurrect(getters, complete); resurrect(setters, complete); Annotation[] ga = getter!=null ? reader().getAllMethodAnnotations(getter,new MethodLocatable<M>(this,getter,nav())) : EMPTY_ANNOTATIONS; Annotation[] sa = setter!=null ? reader().getAllMethodAnnotations(setter,new MethodLocatable<M>(this,setter,nav())) : EMPTY_ANNOTATIONS; boolean hasAnnotation = hasJAXBAnnotation(ga) || hasJAXBAnnotation(sa); boolean isOverriding = false; if(!hasAnnotation) { isOverriding = (getter!=null && nav().isOverriding(getter,c)) && (setter!=null && nav().isOverriding(setter,c)); || (at==XmlAccessType.PUBLIC_MEMBER && isConsideredPublic(getter) && isConsideredPublic(setter) && !isOverriding) || hasAnnotation) { && !nav().isSameType(nav().getReturnType(getter), nav().getMethodParameters(setter)[0])) { nav().getTypeName(nav().getReturnType(getter)), nav().getTypeName(nav().getMethodParameters(setter)[0]) ), new MethodLocatable<M>( this, getter, nav()), new MethodLocatable<M>( this, setter, nav()))); continue;
@Override public RuntimePropertySeed createAccessorSeed(Method getter, Method setter) { Accessor acc; try { acc = accessorFactory.createPropertyAccessor(clazz, getter, setter); } catch(JAXBException e) { builder.reportError(new IllegalAnnotationException( Messages.CUSTOM_ACCESSORFACTORY_PROPERTY_ERROR.format( nav().getClassName(clazz), e.toString()), this )); acc = Accessor.getErrorInstance(); // error recovery } return new RuntimePropertySeed( super.createAccessorSeed(getter,setter), acc ); }
@Override protected RuntimePropertySeed createFieldSeed(Field field) { final boolean readOnly = Modifier.isStatic(field.getModifiers()); Accessor acc; try { if (supressAccessorWarnings) { acc = ((InternalAccessorFactory)accessorFactory).createFieldAccessor(clazz, field, readOnly, supressAccessorWarnings); } else { acc = accessorFactory.createFieldAccessor(clazz, field, readOnly); } } catch(JAXBException e) { builder.reportError(new IllegalAnnotationException( Messages.CUSTOM_ACCESSORFACTORY_FIELD_ERROR.format( nav().getClassName(clazz), e.toString()), this )); acc = Accessor.getErrorInstance(); // error recovery } return new RuntimePropertySeed(super.createFieldSeed(field), acc ); }
if(index==null) continue; switch(index) { case 0: checkConflict(t ,ann); t = (XmlTransient) ann; break; case 1: checkConflict(aa ,ann); aa = (XmlAnyAttribute) ann; break; case 2: checkConflict(a ,ann); a = (XmlAttribute) ann; break; case 3: checkConflict(v ,ann); v = (XmlValue) ann; break; case 4: checkConflict(e1 ,ann); e1 = (XmlElement) ann; break; case 5: checkConflict(e2 ,ann); e2 = (XmlElements) ann; break; case 6: checkConflict(r1 ,ann); r1 = (XmlElementRef) ann; break; case 7: checkConflict(r2 ,ann); r2 = (XmlElementRefs) ann; break; case 8: checkConflict(xae,ann); xae = (XmlAnyElement) ann; break; case 9: checkConflict(mx, ann); mx = (XmlMixed) ann; break; case 10: checkConflict(ov, ann); ov = (OverrideAnnotationOf) ann; break; default: List<Annotation> err = makeSet(t,aa,a,v,pickOne(e1,e2),pickOne(r1,r2,xae)); throw new ConflictException(err); if(nav().isSubClassOf( seed.getRawType(), nav().ref(Map.class) ) && !seed.hasAnnotation(XmlJavaTypeAdapter.class)) group = PropertyGroup.MAP; group = PropertyGroup.ELEMENT; } else if (group.equals(PropertyGroup.ELEMENT)) { // see issue 791 - make sure @XmlElement annotated map property is mapped to map if (nav().isSubClassOf( seed.getRawType(), nav().ref(Map.class)) && !seed.hasAnnotation(XmlJavaTypeAdapter.class)) { group = PropertyGroup.MAP; builder.reportError(new IllegalAnnotationException( Messages.TWO_ATTRIBUTE_WILDCARDS.format(
collectGetterSetters(clazz, getters, setters); c = nav().getSuperClass(c); } while(shouldRecurseSuperClass(c)); resurrect(getters, complete); resurrect(setters, complete); Annotation[] ga = getter!=null ? reader().getAllMethodAnnotations(getter,new MethodLocatable<M>(this,getter,nav())) : EMPTY_ANNOTATIONS; Annotation[] sa = setter!=null ? reader().getAllMethodAnnotations(setter,new MethodLocatable<M>(this,setter,nav())) : EMPTY_ANNOTATIONS; boolean hasAnnotation = hasJAXBAnnotation(ga) || hasJAXBAnnotation(sa); boolean isOverriding = false; if(!hasAnnotation) { isOverriding = (getter!=null && nav().isOverriding(getter,c)) && (setter!=null && nav().isOverriding(setter,c)); || (at==XmlAccessType.PUBLIC_MEMBER && isConsideredPublic(getter) && isConsideredPublic(setter) && !isOverriding) || hasAnnotation) { && !nav().isSameType(nav().getReturnType(getter), nav().getMethodParameters(setter)[0])) { nav().getTypeName(nav().getReturnType(getter)), nav().getTypeName(nav().getMethodParameters(setter)[0]) ), new MethodLocatable<M>( this, getter, nav()), new MethodLocatable<M>( this, setter, nav()))); continue;
C sc = nav().getSuperClass(c); if(shouldRecurseSuperClass(sc)) collectGetterSetters(sc,getters,setters); Collection<? extends M> methods = nav().getDeclaredMethods(c); Map<String,List<M>> allSetters = new LinkedHashMap<String,List<M>>(); for( M method : methods ) { boolean used = false; // if this method is added to getters or setters if(nav().isBridgeMethod(method)) continue; // ignore String name = nav().getMethodName(method); int arity = nav().getMethodParameters(method).length; if(nav().isStaticMethod(method)) { ensureNoAnnotation(method); continue; String propName = getPropertyNameFromGetMethod(name); if(propName!=null && arity==0) { getters.put(propName,method); propName = getPropertyNameFromSetMethod(name); if(propName!=null && arity==1) { List<M> propSetters = allSetters.get(propName); ensureNoAnnotation(method);
@Override public RuntimePropertySeed createAccessorSeed(Method getter, Method setter) { Accessor acc; try { acc = accessorFactory.createPropertyAccessor(clazz, getter, setter); } catch(JAXBException e) { builder.reportError(new IllegalAnnotationException( Messages.CUSTOM_ACCESSORFACTORY_PROPERTY_ERROR.format( nav().getClassName(clazz), e.toString()), this )); acc = Accessor.getErrorInstance(); // error recovery } return new RuntimePropertySeed( super.createAccessorSeed(getter,setter), acc ); }
@Override protected RuntimePropertySeed createFieldSeed(Field field) { final boolean readOnly = Modifier.isStatic(field.getModifiers()); Accessor acc; try { if (supressAccessorWarnings) { acc = ((InternalAccessorFactory)accessorFactory).createFieldAccessor(clazz, field, readOnly, supressAccessorWarnings); } else { acc = accessorFactory.createFieldAccessor(clazz, field, readOnly); } } catch(JAXBException e) { builder.reportError(new IllegalAnnotationException( Messages.CUSTOM_ACCESSORFACTORY_FIELD_ERROR.format( nav().getClassName(clazz), e.toString()), this )); acc = Accessor.getErrorInstance(); // error recovery } return new RuntimePropertySeed(super.createFieldSeed(field), acc ); }
if(index==null) continue; switch(index) { case 0: checkConflict(t ,ann); t = (XmlTransient) ann; break; case 1: checkConflict(aa ,ann); aa = (XmlAnyAttribute) ann; break; case 2: checkConflict(a ,ann); a = (XmlAttribute) ann; break; case 3: checkConflict(v ,ann); v = (XmlValue) ann; break; case 4: checkConflict(e1 ,ann); e1 = (XmlElement) ann; break; case 5: checkConflict(e2 ,ann); e2 = (XmlElements) ann; break; case 6: checkConflict(r1 ,ann); r1 = (XmlElementRef) ann; break; case 7: checkConflict(r2 ,ann); r2 = (XmlElementRefs) ann; break; case 8: checkConflict(xae,ann); xae = (XmlAnyElement) ann; break; case 9: checkConflict(mx, ann); mx = (XmlMixed) ann; break; case 10: checkConflict(ov, ann); ov = (OverrideAnnotationOf) ann; break; default: List<Annotation> err = makeSet(t,aa,a,v,pickOne(e1,e2),pickOne(r1,r2,xae)); throw new ConflictException(err); if(nav().isSubClassOf( seed.getRawType(), nav().ref(Map.class) ) && !seed.hasAnnotation(XmlJavaTypeAdapter.class)) group = PropertyGroup.MAP; group = PropertyGroup.ELEMENT; } else if (group.equals(PropertyGroup.ELEMENT)) { // see issue 791 - make sure @XmlElement annotated map property is mapped to map if (nav().isSubClassOf( seed.getRawType(), nav().ref(Map.class)) && !seed.hasAnnotation(XmlJavaTypeAdapter.class)) { group = PropertyGroup.MAP; builder.reportError(new IllegalAnnotationException( Messages.TWO_ATTRIBUTE_WILDCARDS.format(
C sc = nav().getSuperClass(c); if (shouldRecurseSuperClass(sc)) { findFieldProperties(sc,at); for( F f : nav().getDeclaredFields(c) ) { Annotation[] annotations = reader().getAllFieldAnnotations(f,this); boolean isDummy = reader().hasFieldAnnotation(OverrideAnnotationOf.class, f); if( nav().isTransient(f) ) { if(hasJAXBAnnotation(annotations)) builder.reportError(new IllegalAnnotationException( Messages.TRANSIENT_FIELD_NOT_BINDABLE.format(nav().getFieldName(f)), getSomeJAXBAnnotation(annotations))); } else if( nav().isStaticField(f) ) { if(hasJAXBAnnotation(annotations)) addProperty(createFieldSeed(f),annotations, false); } else { if(at==XmlAccessType.FIELD ||(at==XmlAccessType.PUBLIC_MEMBER && nav().isPublicField(f)) || hasJAXBAnnotation(annotations)) { if (isDummy) { ClassInfo<T, C> top = getBaseClass(); while ((top != null) && (top.getProperty("content") == null)) { top = top.getBaseClass(); PropertySeed seed = createFieldSeed(f);
collectGetterSetters(clazz, getters, setters); c = nav().getSuperClass(c); } while(shouldRecurseSuperClass(c)); resurrect(getters, complete); resurrect(setters, complete); Annotation[] ga = getter!=null ? reader().getAllMethodAnnotations(getter,new MethodLocatable<M>(this,getter,nav())) : EMPTY_ANNOTATIONS; Annotation[] sa = setter!=null ? reader().getAllMethodAnnotations(setter,new MethodLocatable<M>(this,setter,nav())) : EMPTY_ANNOTATIONS; boolean hasAnnotation = hasJAXBAnnotation(ga) || hasJAXBAnnotation(sa); boolean isOverriding = false; if(!hasAnnotation) { isOverriding = (getter!=null && nav().isOverriding(getter,c)) && (setter!=null && nav().isOverriding(setter,c)); || (at==XmlAccessType.PUBLIC_MEMBER && isConsideredPublic(getter) && isConsideredPublic(setter) && !isOverriding) || hasAnnotation) { && !nav().isSameType(nav().getReturnType(getter), nav().getMethodParameters(setter)[0])) { nav().getTypeName(nav().getReturnType(getter)), nav().getTypeName(nav().getMethodParameters(setter)[0]) ), new MethodLocatable<M>( this, getter, nav()), new MethodLocatable<M>( this, setter, nav()))); continue;
C sc = nav().getSuperClass(c); if(shouldRecurseSuperClass(sc)) collectGetterSetters(sc,getters,setters); Collection<? extends M> methods = nav().getDeclaredMethods(c); Map<String,List<M>> allSetters = new LinkedHashMap<String,List<M>>(); for( M method : methods ) { boolean used = false; // if this method is added to getters or setters if(nav().isBridgeMethod(method)) continue; // ignore String name = nav().getMethodName(method); int arity = nav().getMethodParameters(method).length; if(nav().isStaticMethod(method)) { ensureNoAnnotation(method); continue; String propName = getPropertyNameFromGetMethod(name); if(propName!=null && arity==0) { getters.put(propName,method); propName = getPropertyNameFromSetMethod(name); if(propName!=null && arity==1) { List<M> propSetters = allSetters.get(propName); ensureNoAnnotation(method);
/** * A {@link ClassInfo} can be referenced by {@link XmlIDREF} if * it has an ID property. */ public boolean canBeReferencedByIDREF() { for (PropertyInfo<T,C> p : getProperties()) { if(p.id()== ID.ID) return true; } ClassInfoImpl<T,C,F,M> base = getBaseClass(); if(base!=null) return base.canBeReferencedByIDREF(); else return false; }
protected ClassInfoImpl<T,C,F,M> createClassInfo(C clazz, Locatable upstream ) { return new ClassInfoImpl<T,C,F,M>(this,upstream,clazz); }
@Override public RuntimePropertySeed createAccessorSeed(Method getter, Method setter) { Accessor acc; try { acc = accessorFactory.createPropertyAccessor(clazz, getter, setter); } catch(JAXBException e) { builder.reportError(new IllegalAnnotationException( Messages.CUSTOM_ACCESSORFACTORY_PROPERTY_ERROR.format( nav().getClassName(clazz), e.toString()), this )); acc = Accessor.getErrorInstance(); // error recovery } return new RuntimePropertySeed( super.createAccessorSeed(getter,setter), acc ); }