package com.fasterxml.jackson.databind.introspect; import java.lang.annotation.Annotation; import java.lang.reflect.Member; import com.fasterxml.jackson.databind.util.ClassUtil; /** * Intermediate base class for annotated entities that are members of * a class; fields, methods and constructors. This is a superset * of things that can represent logical properties as it contains * constructors in addition to fields and methods. * * @author tatu */ public abstract class AnnotatedMember extends Annotated implements java.io.Serializable { private static final long serialVersionUID = 7364428299211355871L; // Transient since information not needed after construction, so // no need to persist protected final transient AnnotationMap _annotations; protected AnnotatedMember(AnnotationMap annotations) { super(); _annotations = annotations; } public abstract Class<?> getDeclaringClass(); public abstract Member getMember(); @Override protected AnnotationMap getAllAnnotations() { return _annotations; } /** * Method called to override an annotation, usually due to a mix-in * annotation masking or overriding an annotation 'real' constructor * has. */ public final void addOrOverride(Annotation a) { _annotations.add(a); } /** * Method called to augment annotations, by adding specified * annotation if and only if it is not yet present in the * annotation map we have. */ public final void addIfNotPresent(Annotation a) { _annotations.addIfNotPresent(a); } /** * Method that can be called to modify access rights, by calling * {@link java.lang.reflect.AccessibleObject#setAccessible} on * the underlying annotated element. */ public final void fixAccess() { ClassUtil.checkAndFixAccess(getMember()); } /** * Optional method that can be used to assign value of * this member on given object, if this is a supported * operation for member type. *<p> * This is implemented for fields and single-argument * member methods; but not for constructor parameters or * other types of methods (like static methods) */ public abstract void setValue(Object pojo, Object value) throws UnsupportedOperationException, IllegalArgumentException; /** * Optional method that can be used to access the value of * this member on given object, if this is a supported * operation for member type. *<p> * This is implemented for fields and no-argument * member methods; but not for constructor parameters or * other types of methods (like static methods) */ public abstract Object getValue(Object pojo) throws UnsupportedOperationException, IllegalArgumentException; }