blob: be3ed2e4a39adf47bd06cb29b07eebf5f64a62a3 [file] [log] [blame]
package org.codehaus.jackson.map;
import org.codehaus.jackson.type.JavaType;
/**
* Helper class used to introspect features of POJO value classes
* used with Jackson. The main use is for finding out
* POJO construction (creator) and value access (getters, setters)
* methods and annotations that define configuration of using
* those methods.
*/
public abstract class ClassIntrospector<T extends BeanDescription>
{
/*
/**********************************************************
/* Helper interfaces
/**********************************************************
*/
/**
* Interface used for decoupling details of how mix-in annotation
* definitions are accessed (via this interface), and how
* they are stored (defined by classes that implement the interface)
*/
public interface MixInResolver
{
/**
* Method that will check if there are "mix-in" classes (with mix-in
* annotations) for given class
*/
public Class<?> findMixInClassFor(Class<?> cls);
}
protected ClassIntrospector() { }
/*
/**********************************************************
/* Public API: factory methods
/**********************************************************
*/
/**
* Factory method that constructs an introspector that has all
* information needed for serialization purposes.
*/
public abstract T forSerialization(SerializationConfig cfg, JavaType type,
MixInResolver r);
/**
* Factory method that constructs an introspector that has all
* information needed for deserialization purposes.
*/
public abstract T forDeserialization(DeserializationConfig cfg, JavaType type,
MixInResolver r);
/**
* Factory method that constructs an introspector that has
* information necessary for creating instances of given
* class ("creator"), as well as class annotations, but
* no information on member methods
*/
public abstract T forCreation(DeserializationConfig cfg, JavaType type,
MixInResolver r);
/**
* Factory method that constructs an introspector that only has
* information regarding annotations class itself (or its supertypes) has,
* but nothing on methods or constructors.
*/
public abstract T forClassAnnotations(MapperConfig<?> cfg, JavaType type,
MixInResolver r);
/**
* Factory method that constructs an introspector that only has
* information regarding annotations class itself has (but NOT including
* its supertypes), but nothing on methods or constructors.
*
* @since 1.5
*/
public abstract T forDirectClassAnnotations(MapperConfig<?> cfg, JavaType type,
MixInResolver r);
/*
/**********************************************************
/* Deprecated methods
/**********************************************************
*/
/**
* Factory method that constructs an introspector that only has
* information regarding annotations class itself (or its supertypes) has,
* but nothing on methods or constructors.
*
* @deprecated since 1.9, use variant that takes JavaType
*/
@Deprecated
public T forClassAnnotations(MapperConfig<?> cfg, Class<?> cls,
MixInResolver r) {
return forClassAnnotations(cfg, cfg.constructType(cls), r);
}
/**
* Factory method that constructs an introspector that only has
* information regarding annotations class itself has (but NOT including
* its supertypes), but nothing on methods or constructors.
*
* @since 1.5
*
* @deprecated since 1.9, use variant that takes JavaType
*/
@Deprecated
public T forDirectClassAnnotations(MapperConfig<?> cfg, Class<?> cls,
MixInResolver r) {
return forDirectClassAnnotations(cfg, cfg.constructType(cls), r);
}
}