package com.fasterxml.jackson.databind.introspect;
import java.lang.annotation.Annotation;
import java.lang.reflect.Member;
import java.util.Collections;
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.
/**
* 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.
*/
public abstract class AnnotatedMember
extends Annotated
implements java.io.Serializable
{
private static final long serialVersionUID = 1L; // since 2.5
// 19-Dec-2014, tatu: Similarly, assumed NOT to be needed in cases where
// owning object (ObjectMapper or relatives) is being JDK-serialized
Context object needed for resolving generic type associated with this
member (method parameter or return value, or field type).
Since: 2.7
/**
* Context object needed for resolving generic type associated with this
* member (method parameter or return value, or field type).
*
* @since 2.7
*/
protected final transient TypeResolutionContext _typeContext;
// Transient since information not needed after construction, so
// no need to persist
protected final transient AnnotationMap _annotations;
protected AnnotatedMember(TypeResolutionContext ctxt, AnnotationMap annotations) {
super();
_typeContext = ctxt;
_annotations = annotations;
}
Copy-constructor.
Since: 2.5
/**
* Copy-constructor.
*
* @since 2.5
*/
protected AnnotatedMember(AnnotatedMember base) {
_typeContext = base._typeContext;
_annotations = base._annotations;
}
Fluent factory method that will construct a new instance that uses specified
instance annotations instead of currently configured ones.
Since: 2.9 (promoted from `Annotated`)
/**
* Fluent factory method that will construct a new instance that uses specified
* instance annotations instead of currently configured ones.
*
* @since 2.9 (promoted from `Annotated`)
*/
public abstract Annotated withAnnotations(AnnotationMap fallback);
Actual physical class in which this memmber was declared.
/**
* Actual physical class in which this memmber was declared.
*/
public abstract Class<?> getDeclaringClass();
public abstract Member getMember();
public String getFullName() {
return getDeclaringClass().getName() + "#" + getName();
}
Accessor for TypeResolutionContext
that is used for resolving full generic type of this member. Since: 2.7 Deprecated: Since 2.9
/**
* Accessor for {@link TypeResolutionContext} that is used for resolving
* full generic type of this member.
*
* @since 2.7
*
* @deprecated Since 2.9
*/
@Deprecated
public TypeResolutionContext getTypeContext() {
return _typeContext;
}
@Override
public final <A extends Annotation> A getAnnotation(Class<A> acls) {
if (_annotations == null) {
return null;
}
return _annotations.get(acls);
}
@Override
public final boolean hasAnnotation(Class<?> acls) {
if (_annotations == null) {
return false;
}
return _annotations.has(acls);
}
@Override
public boolean hasOneOf(Class<? extends Annotation>[] annoClasses) {
if (_annotations == null) {
return false;
}
return _annotations.hasOneOf(annoClasses);
}
@Override
@Deprecated
public Iterable<Annotation> annotations() {
if (_annotations == null) {
return Collections.emptyList();
}
return _annotations.annotations();
}
NOTE: promoted in 2.9 from `Annotated` up
/**
*<p>
* NOTE: promoted in 2.9 from `Annotated` up
*/
public AnnotationMap getAllAnnotations() { // alas, used by at least one module, hence public
return _annotations;
}
Method that can be called to modify access rights, by calling AccessibleObject.setAccessible
on the underlying annotated element. Note that caller should verify that MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS
is enabled before calling this method; as well as pass force
flag appropriately.
Since: 2.7
/**
* Method that can be called to modify access rights, by calling
* {@link java.lang.reflect.AccessibleObject#setAccessible} on
* the underlying annotated element.
*<p>
* Note that caller should verify that
* {@link com.fasterxml.jackson.databind.MapperFeature#CAN_OVERRIDE_ACCESS_MODIFIERS}
* is enabled before calling this method; as well as pass
* <code>force</code> flag appropriately.
*
* @since 2.7
*/
public final void fixAccess(boolean force) {
Member m = getMember();
if (m != null) { // may be null for virtual members
ClassUtil.checkAndFixAccess(m, force);
}
}
Optional method that can be used to assign value of
this member on given object, if this is a supported
operation for member type.
This is implemented for fields and single-argument
member methods; but not for constructor parameters or
other types of methods (like static methods)
/**
* 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.
This is implemented for fields and no-argument
member methods; but not for constructor parameters or
other types of methods (like static methods)
/**
* 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;
}