Class POJOPropertiesCollector
- java.lang.Object
-
- com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector
-
public class POJOPropertiesCollector extends java.lang.ObjectHelper class used for aggregating information about all possible properties of a POJO.
-
-
Field Summary
Fields Modifier and Type Field Description protected AccessorNamingStrategy_accessorNamingHandler used for name-mangling of getter, mutator (setter/with) methodsprotected AnnotationIntrospector_annotationIntrospectorprotected java.util.LinkedList<AnnotatedMember>_anyGetterFieldprotected java.util.LinkedList<AnnotatedMember>_anyGettersprotected java.util.LinkedList<AnnotatedMember>_anySetterFieldprotected java.util.LinkedList<AnnotatedMethod>_anySettersprotected AnnotatedClass_classDefLow-level introspected class information (methods, fields etc)protected boolean_collectedState flag we keep to indicate whether actual property information has been collected or not.protected MapperConfig<?>_configConfiguration settingsprotected java.util.List<POJOPropertyBuilder>_creatorPropertiesprotected java.util.Map<PropertyName,PropertyName>_fieldRenameMappingsA set of "field renamings" that have been discovered, indicating intended renaming of other accessors: key is the implicit original name and value intended name to use instead.protected com.fasterxml.jackson.annotation.JsonFormat.Value_formatOverridesLazily accessed information about POJO format overridesprotected boolean_forSerializationTrue if introspection is done for serialization (giving precedence for serialization annotations), or not (false, deserialization)protected java.util.HashSet<java.lang.String>_ignoredPropertyNamesLazily collected list of properties that can be implicitly ignored during serialization; only updated when collecting information for deserialization purposesprotected java.util.LinkedHashMap<java.lang.Object,AnnotatedMember>_injectablesLazily collected list of members that were annotated to indicate that they represent mutators for deserializer value injection.protected boolean_isRecordTypeprotected java.util.LinkedList<AnnotatedMember>_jsonKeyAccessorsAccessors (field or "getter" method annotated withJsonKeyprotected java.util.LinkedList<AnnotatedMember>_jsonValueAccessorsAccessors (field or "getter" method) annotated withJsonValueprotected PotentialCreators_potentialCreatorsprotected java.util.LinkedHashMap<java.lang.String,POJOPropertyBuilder>_propertiesSet of logical property information collected so far.protected JavaType_typeType of POJO for which properties are being collected.protected boolean_useAnnotationsprotected VisibilityChecker<?>_visibilityChecker
-
Constructor Summary
Constructors Modifier Constructor Description protectedPOJOPropertiesCollector(MapperConfig<?> config, boolean forSerialization, JavaType type, AnnotatedClass classDef, AccessorNamingStrategy accessorNaming)
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected void_addCreators(java.util.Map<java.lang.String,POJOPropertyBuilder> props)protected void_addFields(java.util.Map<java.lang.String,POJOPropertyBuilder> props)Method for collecting basic information on all fields foundprotected void_addGetterMethod(java.util.Map<java.lang.String,POJOPropertyBuilder> props, AnnotatedMethod m, AnnotationIntrospector ai)protected void_addInjectables(java.util.Map<java.lang.String,POJOPropertyBuilder> props)protected void_addMethods(java.util.Map<java.lang.String,POJOPropertyBuilder> props)Method for collecting basic information on all accessor methods foundprotected void_addSetterMethod(java.util.Map<java.lang.String,POJOPropertyBuilder> props, AnnotatedMethod m, AnnotationIntrospector ai)protected void_collectIgnorals(java.lang.String name)Helper method called to add explicitly ignored properties to a list of known ignored properties; this helps in proper reporting of errors.protected void_doAddInjectable(com.fasterxml.jackson.annotation.JacksonInject.Value injectable, AnnotatedMember m)protected POJOPropertyBuilder_property(java.util.Map<java.lang.String,POJOPropertyBuilder> props, PropertyName name)protected POJOPropertyBuilder_property(java.util.Map<java.lang.String,POJOPropertyBuilder> props, java.lang.String implName)protected void_removeUnwantedAccessors(java.util.Map<java.lang.String,POJOPropertyBuilder> props)Method called to further get rid of unwanted individual accessors, based on read/write settings and rules for "pulling in" accessors (or not).protected void_removeUnwantedProperties(java.util.Map<java.lang.String,POJOPropertyBuilder> props)Method called to get rid of candidate properties that are marked as ignored.protected void_renameProperties(java.util.Map<java.lang.String,POJOPropertyBuilder> props)protected void_renameUsing(java.util.Map<java.lang.String,POJOPropertyBuilder> propMap, PropertyNamingStrategy naming)protected void_renameWithWrappers(java.util.Map<java.lang.String,POJOPropertyBuilder> props)protected boolean_replaceCreatorProperty(java.util.List<POJOPropertyBuilder> creatorProperties, POJOPropertyBuilder prop)protected boolean_resolveFieldVsGetter(java.util.List<AnnotatedMember> accessors)Method that will be given aListwith 2 or more accessors that may be in conflict: it will need to remove lower-priority accessors to leave just a single highest-priority accessor to use.protected void_sortProperties(java.util.Map<java.lang.String,POJOPropertyBuilder> props)protected voidcollectAll()Internal method that will collect actual property information.AnnotationIntrospectorgetAnnotationIntrospector()AnnotatedMembergetAnyGetter()Deprecated.Since 2.12 use separategetAnyGetterMethod()andgetAnyGetterField().AnnotatedMembergetAnyGetterField()AnnotatedMembergetAnyGetterMethod()AnnotatedMembergetAnySetterField()AnnotatedMethodgetAnySetterMethod()AnnotatedClassgetClassDef()MapperConfig<?>getConfig()com.fasterxml.jackson.annotation.JsonFormat.ValuegetFormatOverrides()java.util.Set<java.lang.String>getIgnoredPropertyNames()Accessor for set of properties that are explicitly marked to be ignored via per-property markers (but NOT class annotations).java.util.Map<java.lang.Object,AnnotatedMember>getInjectables()AnnotatedMembergetJsonKeyAccessor()AnnotatedMembergetJsonValueAccessor()ObjectIdInfogetObjectIdInfo()Accessor to find out whether type specified requires inclusion of Object Identifier.PotentialCreatorsgetPotentialCreators()java.util.List<BeanPropertyDefinition>getProperties()protected java.util.Map<java.lang.String,POJOPropertyBuilder>getPropertyMap()JavaTypegetType()booleanisRecordType()protected voidreportProblem(java.lang.String msg, java.lang.Object... args)
-
-
-
Field Detail
-
_config
protected final MapperConfig<?> _config
Configuration settings
-
_accessorNaming
protected final AccessorNamingStrategy _accessorNaming
Handler used for name-mangling of getter, mutator (setter/with) methods- Since:
- 2.12
-
_forSerialization
protected final boolean _forSerialization
True if introspection is done for serialization (giving precedence for serialization annotations), or not (false, deserialization)
-
_type
protected final JavaType _type
Type of POJO for which properties are being collected.
-
_classDef
protected final AnnotatedClass _classDef
Low-level introspected class information (methods, fields etc)
-
_visibilityChecker
protected final VisibilityChecker<?> _visibilityChecker
-
_annotationIntrospector
protected final AnnotationIntrospector _annotationIntrospector
-
_useAnnotations
protected final boolean _useAnnotations
- Since:
- 2.9
-
_isRecordType
protected final boolean _isRecordType
- Since:
- 2.15
-
_collected
protected boolean _collected
State flag we keep to indicate whether actual property information has been collected or not.
-
_properties
protected java.util.LinkedHashMap<java.lang.String,POJOPropertyBuilder> _properties
Set of logical property information collected so far.Since 2.6, this has been constructed (more) lazily, to defer throwing of exceptions for potential conflicts in cases where this may not be an actual problem.
-
_creatorProperties
protected java.util.List<POJOPropertyBuilder> _creatorProperties
-
_potentialCreators
protected PotentialCreators _potentialCreators
- Since:
- 2.18
-
_fieldRenameMappings
protected java.util.Map<PropertyName,PropertyName> _fieldRenameMappings
A set of "field renamings" that have been discovered, indicating intended renaming of other accessors: key is the implicit original name and value intended name to use instead.Note that these renamings are applied earlier than "regular" (explicit) renamings and affect implicit name: their effect may be changed by further renaming based on explicit indicators. The main use case is to effectively relink accessors based on fields discovered, and used to sort of correct otherwise missing linkage between fields and other accessors.
- Since:
- 2.11
-
_anyGetters
protected java.util.LinkedList<AnnotatedMember> _anyGetters
-
_anyGetterField
protected java.util.LinkedList<AnnotatedMember> _anyGetterField
- Since:
- 2.12
-
_anySetters
protected java.util.LinkedList<AnnotatedMethod> _anySetters
-
_anySetterField
protected java.util.LinkedList<AnnotatedMember> _anySetterField
-
_jsonKeyAccessors
protected java.util.LinkedList<AnnotatedMember> _jsonKeyAccessors
Accessors (field or "getter" method annotated withJsonKey- Since:
- 2.12
-
_jsonValueAccessors
protected java.util.LinkedList<AnnotatedMember> _jsonValueAccessors
Accessors (field or "getter" method) annotated withJsonValue
-
_ignoredPropertyNames
protected java.util.HashSet<java.lang.String> _ignoredPropertyNames
Lazily collected list of properties that can be implicitly ignored during serialization; only updated when collecting information for deserialization purposes
-
_injectables
protected java.util.LinkedHashMap<java.lang.Object,AnnotatedMember> _injectables
Lazily collected list of members that were annotated to indicate that they represent mutators for deserializer value injection.
-
_formatOverrides
protected com.fasterxml.jackson.annotation.JsonFormat.Value _formatOverrides
Lazily accessed information about POJO format overrides- Since:
- 2.17
-
-
Constructor Detail
-
POJOPropertiesCollector
protected POJOPropertiesCollector(MapperConfig<?> config, boolean forSerialization, JavaType type, AnnotatedClass classDef, AccessorNamingStrategy accessorNaming)
- Since:
- 2.12
-
-
Method Detail
-
getConfig
public MapperConfig<?> getConfig()
-
getType
public JavaType getType()
-
isRecordType
public boolean isRecordType()
- Since:
- 2.15
-
getClassDef
public AnnotatedClass getClassDef()
-
getAnnotationIntrospector
public AnnotationIntrospector getAnnotationIntrospector()
-
getProperties
public java.util.List<BeanPropertyDefinition> getProperties()
-
getPotentialCreators
public PotentialCreators getPotentialCreators()
-
getInjectables
public java.util.Map<java.lang.Object,AnnotatedMember> getInjectables()
-
getJsonKeyAccessor
public AnnotatedMember getJsonKeyAccessor()
- Since:
- 2.12
-
getJsonValueAccessor
public AnnotatedMember getJsonValueAccessor()
- Since:
- 2.9
-
getAnyGetter
@Deprecated public AnnotatedMember getAnyGetter()
Deprecated.Since 2.12 use separategetAnyGetterMethod()andgetAnyGetterField().Alias forgetAnyGetterMethod().
-
getAnyGetterField
public AnnotatedMember getAnyGetterField()
- Since:
- 2.12 (before only had "getAnyGetter()")
-
getAnyGetterMethod
public AnnotatedMember getAnyGetterMethod()
- Since:
- 2.12 (before only had "getAnyGetter()")
-
getAnySetterField
public AnnotatedMember getAnySetterField()
-
getAnySetterMethod
public AnnotatedMethod getAnySetterMethod()
-
getIgnoredPropertyNames
public java.util.Set<java.lang.String> getIgnoredPropertyNames()
Accessor for set of properties that are explicitly marked to be ignored via per-property markers (but NOT class annotations).
-
getObjectIdInfo
public ObjectIdInfo getObjectIdInfo()
Accessor to find out whether type specified requires inclusion of Object Identifier.
-
getPropertyMap
protected java.util.Map<java.lang.String,POJOPropertyBuilder> getPropertyMap()
-
getFormatOverrides
public com.fasterxml.jackson.annotation.JsonFormat.Value getFormatOverrides()
- Since:
- 2.17
-
collectAll
protected void collectAll()
Internal method that will collect actual property information.- Since:
- 2.6
-
_addFields
protected void _addFields(java.util.Map<java.lang.String,POJOPropertyBuilder> props)
Method for collecting basic information on all fields found
-
_addCreators
protected void _addCreators(java.util.Map<java.lang.String,POJOPropertyBuilder> props)
-
_addMethods
protected void _addMethods(java.util.Map<java.lang.String,POJOPropertyBuilder> props)
Method for collecting basic information on all accessor methods found
-
_addGetterMethod
protected void _addGetterMethod(java.util.Map<java.lang.String,POJOPropertyBuilder> props, AnnotatedMethod m, AnnotationIntrospector ai)
-
_addSetterMethod
protected void _addSetterMethod(java.util.Map<java.lang.String,POJOPropertyBuilder> props, AnnotatedMethod m, AnnotationIntrospector ai)
-
_addInjectables
protected void _addInjectables(java.util.Map<java.lang.String,POJOPropertyBuilder> props)
-
_doAddInjectable
protected void _doAddInjectable(com.fasterxml.jackson.annotation.JacksonInject.Value injectable, AnnotatedMember m)
-
_removeUnwantedProperties
protected void _removeUnwantedProperties(java.util.Map<java.lang.String,POJOPropertyBuilder> props)
Method called to get rid of candidate properties that are marked as ignored.
-
_removeUnwantedAccessors
protected void _removeUnwantedAccessors(java.util.Map<java.lang.String,POJOPropertyBuilder> props)
Method called to further get rid of unwanted individual accessors, based on read/write settings and rules for "pulling in" accessors (or not).
-
_collectIgnorals
protected void _collectIgnorals(java.lang.String name)
Helper method called to add explicitly ignored properties to a list of known ignored properties; this helps in proper reporting of errors.
-
_renameProperties
protected void _renameProperties(java.util.Map<java.lang.String,POJOPropertyBuilder> props)
-
_renameUsing
protected void _renameUsing(java.util.Map<java.lang.String,POJOPropertyBuilder> propMap, PropertyNamingStrategy naming)
-
_renameWithWrappers
protected void _renameWithWrappers(java.util.Map<java.lang.String,POJOPropertyBuilder> props)
-
_sortProperties
protected void _sortProperties(java.util.Map<java.lang.String,POJOPropertyBuilder> props)
-
_resolveFieldVsGetter
protected boolean _resolveFieldVsGetter(java.util.List<AnnotatedMember> accessors)
Method that will be given aListwith 2 or more accessors that may be in conflict: it will need to remove lower-priority accessors to leave just a single highest-priority accessor to use. If this succeeds method returnstrue, otherwisefalse.NOTE: method will directly modify given
Listdirectly, regardless of whether it ultimately succeeds or not.- Returns:
- True if seeming conflict was resolved and there only remains single accessor
-
reportProblem
protected void reportProblem(java.lang.String msg, java.lang.Object... args)
-
_property
protected POJOPropertyBuilder _property(java.util.Map<java.lang.String,POJOPropertyBuilder> props, PropertyName name)
-
_property
protected POJOPropertyBuilder _property(java.util.Map<java.lang.String,POJOPropertyBuilder> props, java.lang.String implName)
-
_replaceCreatorProperty
protected boolean _replaceCreatorProperty(java.util.List<POJOPropertyBuilder> creatorProperties, POJOPropertyBuilder prop)
-
-