Package com.fasterxml.jackson.jr.ob.impl
Class TypeDetector
- java.lang.Object
-
- com.fasterxml.jackson.jr.ob.impl.TypeDetector
-
public class TypeDetector extends Object
Helper object used for efficient detection of type information relevant to our conversion needs when writing out Java Objects as JSON.Note that usage pattern is such that a single "root" instance is kept by each
JSON
instance; and an actual per-operation instance must be constructed by callingperOperationInstance(int)
: reason for this is that instances use simple caching to handle the common case of repeating types within JSON Arrays.
-
-
Field Summary
Fields Modifier and Type Field Description protected int
_features
protected Map<ClassKey,ValueReader>
_incompleteReaders
During resolution, some readers may be in-progress, but need to be linked: for example, with cyclic type references.protected ClassKey
_key
Reusable lookup key; only used by per-thread instances.protected ConcurrentHashMap<ClassKey,ValueReader>
_knownReaders
Set ofValueReader
s that we have resolvedprotected ConcurrentHashMap<ClassKey,Integer>
_knownSerTypes
Mapping from classes to resolved type constants or indexes, to use for serialization.protected CopyOnWriteArrayList<BeanPropertyWriter[]>
_knownWriters
protected Class<?>
_prevClass
protected int
_prevType
protected Object
_readerLock
protected TypeResolver
_typeResolver
For generic containers (Collections, Maps, arrays), we may need this guy.protected static int
CACHE_FLAGS
protected static int
MAX_CACHED_READERS
While we should be able to cache all types in the active working set, we should also avoid potential unbounded retention, since there is generally just one big `TypeDetector` instances per JVM (or at least ClassLoader).protected BeanPropertyWriter[]
NO_PROPS_FOR_WRITE
static int
SER_BOOLEAN
static int
SER_BOOLEAN_ARRAY
static int
SER_BYTE_ARRAY
static int
SER_CALENDAR
static int
SER_CHAR
static int
SER_CHAR_ARRAY
static int
SER_CHARACTER_SEQUENCE
static int
SER_CLASS
static int
SER_COLLECTION
All kinds ofCollection
s other thanList
sstatic int
SER_DATE
static int
SER_ENUM
static int
SER_FILE
static int
SER_INT_ARRAY
static int
SER_ITERABLE
Anything that implementsIterable
, but notCollection
.static int
SER_LIST
All kinds ofList
s.static int
SER_LONG_ARRAY
static int
SER_MAP
All kinds ofMap
s.static int
SER_NUMBER_BIG_DECIMAL
static int
SER_NUMBER_BIG_INTEGER
static int
SER_NUMBER_BYTE
static int
SER_NUMBER_DOUBLE
static int
SER_NUMBER_FLOAT
static int
SER_NUMBER_INTEGER
static int
SER_NUMBER_LONG
static int
SER_NUMBER_SHORT
static int
SER_OBJECT_ARRAY
Arrays of non-primitive typesstatic int
SER_STRING
static int
SER_TREE_NODE
An implementation ofTreeNode
static int
SER_UNKNOWN
Type not yet resolvedstatic int
SER_URI
static int
SER_URL
static int
SER_UUID
-
Constructor Summary
Constructors Modifier Constructor Description protected
TypeDetector(int features)
Constructor for the blueprint instanceprotected
TypeDetector(TypeDetector base, int features)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected int
_findPOJOSerializationType(Class<?> raw)
protected int
_findSimple(Class<?> raw, boolean forSer)
protected BeanReader
_resolveBeanForDeser(Class<?> raw)
static TypeDetector
blueprint(int features)
protected ValueReader
collectionReader(Class<?> collectionType, ResolvedType valueType)
protected ValueReader
collectionReader(Class<?> contextType, Type collectionType)
protected ValueReader
createReader(Class<?> contextType, Class<?> type, Type genericType)
ValueReader
enumReader(Class<?> enumType)
ValueReader
findReader(Class<?> raw)
Method used during deserialization to find handler for given non-generic type.int
findSerializationType(Class<?> raw)
The main lookup method used to find type identifier for given raw class; including Bean types (if allowed).BeanPropertyWriter[]
getPropertyWriters(int index)
protected ValueReader
mapReader(Class<?> mapType, ResolvedType valueType)
protected ValueReader
mapReader(Class<?> contextType, Type mapType)
TypeDetector
perOperationInstance(int features)
protected BeanPropertyWriter[]
resolveBeanForSer(Class<?> raw, POJODefinition classDef)
protected POJODefinition
resolvePOJODefinition(Class<?> raw)
-
-
-
Field Detail
-
NO_PROPS_FOR_WRITE
protected final BeanPropertyWriter[] NO_PROPS_FOR_WRITE
-
MAX_CACHED_READERS
protected static final int MAX_CACHED_READERS
While we should be able to cache all types in the active working set, we should also avoid potential unbounded retention, since there is generally just one big `TypeDetector` instances per JVM (or at least ClassLoader).- See Also:
- Constant Field Values
-
SER_UNKNOWN
public static final int SER_UNKNOWN
Type not yet resolved- See Also:
- Constant Field Values
-
SER_MAP
public static final int SER_MAP
All kinds ofMap
s.- See Also:
- Constant Field Values
-
SER_LIST
public static final int SER_LIST
All kinds ofList
s.- See Also:
- Constant Field Values
-
SER_COLLECTION
public static final int SER_COLLECTION
All kinds ofCollection
s other thanList
s- See Also:
- Constant Field Values
-
SER_OBJECT_ARRAY
public static final int SER_OBJECT_ARRAY
Arrays of non-primitive types- See Also:
- Constant Field Values
-
SER_INT_ARRAY
public static final int SER_INT_ARRAY
- See Also:
- Constant Field Values
-
SER_LONG_ARRAY
public static final int SER_LONG_ARRAY
- See Also:
- Constant Field Values
-
SER_BOOLEAN_ARRAY
public static final int SER_BOOLEAN_ARRAY
- See Also:
- Constant Field Values
-
SER_TREE_NODE
public static final int SER_TREE_NODE
An implementation ofTreeNode
- See Also:
- Constant Field Values
-
SER_STRING
public static final int SER_STRING
- See Also:
- Constant Field Values
-
SER_CHARACTER_SEQUENCE
public static final int SER_CHARACTER_SEQUENCE
- See Also:
- Constant Field Values
-
SER_CHAR_ARRAY
public static final int SER_CHAR_ARRAY
- See Also:
- Constant Field Values
-
SER_BYTE_ARRAY
public static final int SER_BYTE_ARRAY
- See Also:
- Constant Field Values
-
SER_NUMBER_BYTE
public static final int SER_NUMBER_BYTE
- See Also:
- Constant Field Values
-
SER_NUMBER_SHORT
public static final int SER_NUMBER_SHORT
- See Also:
- Constant Field Values
-
SER_NUMBER_INTEGER
public static final int SER_NUMBER_INTEGER
- See Also:
- Constant Field Values
-
SER_NUMBER_LONG
public static final int SER_NUMBER_LONG
- See Also:
- Constant Field Values
-
SER_NUMBER_FLOAT
public static final int SER_NUMBER_FLOAT
- See Also:
- Constant Field Values
-
SER_NUMBER_DOUBLE
public static final int SER_NUMBER_DOUBLE
- See Also:
- Constant Field Values
-
SER_NUMBER_BIG_INTEGER
public static final int SER_NUMBER_BIG_INTEGER
- See Also:
- Constant Field Values
-
SER_NUMBER_BIG_DECIMAL
public static final int SER_NUMBER_BIG_DECIMAL
- See Also:
- Constant Field Values
-
SER_BOOLEAN
public static final int SER_BOOLEAN
- See Also:
- Constant Field Values
-
SER_CHAR
public static final int SER_CHAR
- See Also:
- Constant Field Values
-
SER_ENUM
public static final int SER_ENUM
- See Also:
- Constant Field Values
-
SER_DATE
public static final int SER_DATE
- See Also:
- Constant Field Values
-
SER_CALENDAR
public static final int SER_CALENDAR
- See Also:
- Constant Field Values
-
SER_CLASS
public static final int SER_CLASS
- See Also:
- Constant Field Values
-
SER_FILE
public static final int SER_FILE
- See Also:
- Constant Field Values
-
SER_UUID
public static final int SER_UUID
- See Also:
- Constant Field Values
-
SER_URL
public static final int SER_URL
- See Also:
- Constant Field Values
-
SER_URI
public static final int SER_URI
- See Also:
- Constant Field Values
-
SER_ITERABLE
public static final int SER_ITERABLE
Anything that implementsIterable
, but notCollection
.- See Also:
- Constant Field Values
-
CACHE_FLAGS
protected static final int CACHE_FLAGS
-
_knownSerTypes
protected final ConcurrentHashMap<ClassKey,Integer> _knownSerTypes
Mapping from classes to resolved type constants or indexes, to use for serialization.
-
_knownWriters
protected final CopyOnWriteArrayList<BeanPropertyWriter[]> _knownWriters
-
_typeResolver
protected final TypeResolver _typeResolver
For generic containers (Collections, Maps, arrays), we may need this guy.
-
_knownReaders
protected final ConcurrentHashMap<ClassKey,ValueReader> _knownReaders
Set ofValueReader
s that we have resolved
-
_incompleteReaders
protected Map<ClassKey,ValueReader> _incompleteReaders
During resolution, some readers may be in-progress, but need to be linked: for example, with cyclic type references.
-
_readerLock
protected final Object _readerLock
-
_key
protected ClassKey _key
Reusable lookup key; only used by per-thread instances.
-
_prevClass
protected Class<?> _prevClass
-
_prevType
protected int _prevType
-
_features
protected int _features
-
-
Constructor Detail
-
TypeDetector
protected TypeDetector(int features)
Constructor for the blueprint instance
-
TypeDetector
protected TypeDetector(TypeDetector base, int features)
-
-
Method Detail
-
blueprint
public static final TypeDetector blueprint(int features)
-
perOperationInstance
public TypeDetector perOperationInstance(int features)
-
resolvePOJODefinition
protected POJODefinition resolvePOJODefinition(Class<?> raw)
-
_findSimple
protected int _findSimple(Class<?> raw, boolean forSer)
-
getPropertyWriters
public BeanPropertyWriter[] getPropertyWriters(int index)
-
findSerializationType
public final int findSerializationType(Class<?> raw)
The main lookup method used to find type identifier for given raw class; including Bean types (if allowed).
-
_findPOJOSerializationType
protected int _findPOJOSerializationType(Class<?> raw)
-
resolveBeanForSer
protected BeanPropertyWriter[] resolveBeanForSer(Class<?> raw, POJODefinition classDef)
-
enumReader
public ValueReader enumReader(Class<?> enumType)
-
collectionReader
protected ValueReader collectionReader(Class<?> contextType, Type collectionType)
-
collectionReader
protected ValueReader collectionReader(Class<?> collectionType, ResolvedType valueType)
-
mapReader
protected ValueReader mapReader(Class<?> contextType, Type mapType)
-
mapReader
protected ValueReader mapReader(Class<?> mapType, ResolvedType valueType)
-
findReader
public ValueReader findReader(Class<?> raw)
Method used during deserialization to find handler for given non-generic type.
-
createReader
protected ValueReader createReader(Class<?> contextType, Class<?> type, Type genericType)
-
_resolveBeanForDeser
protected BeanReader _resolveBeanForDeser(Class<?> raw)
-
-