com.fasterxml.jackson.databind.introspect

## Class POJOPropertyBuilder

- java.lang.Object
- - com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition
  - - com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder

All Implemented Interfaces:
  Named, Comparable<POJOPropertyBuilder>

    public class POJOPropertyBuilder
    extends BeanPropertyDefinition
    implements Comparable<POJOPropertyBuilder>

Helper class used for aggregating information about a single potential POJO property.

### Nested Class Summary

Nested Classes
`protected static class` `POJOPropertyBuilder.Linked<T>` Node used for creating simple linked lists to efficiently store small sets of things.
`protected static class` `POJOPropertyBuilder.MemberIterator<T extends AnnotatedMember>`

### Field Summary

Fields
`protected AnnotationIntrospector` `_annotationIntrospector`
`protected MapperConfig<?>` `_config`
`protected POJOPropertyBuilder.Linked<AnnotatedParameter>` `_ctorParameters`
`protected POJOPropertyBuilder.Linked<AnnotatedField>` `_fields`
`protected boolean` `_forSerialization` Whether property is being composed for serialization (true) or deserialization (false)
`protected POJOPropertyBuilder.Linked<AnnotatedMethod>` `_getters`
`protected PropertyName` `_internalName` Original internal name, derived from accessor, of this property.
`protected PropertyMetadata` `_metadata`
`protected PropertyName` `_name` External name of logical property; may change with renaming (by new instance being constructed using a new name)
`protected AnnotationIntrospector.ReferenceProperty` `_referenceInfo` Lazily accessed information about this property iff it is a forward or back reference.
`protected POJOPropertyBuilder.Linked<AnnotatedMethod>` `_setters`

### Fields inherited from class com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition

`EMPTY_INCLUDE`

### Constructor Summary

Constructors
`` `POJOPropertyBuilder(MapperConfig<?> config, AnnotationIntrospector ai, boolean forSerialization, PropertyName internalName)`
`protected` `POJOPropertyBuilder(MapperConfig<?> config, AnnotationIntrospector ai, boolean forSerialization, PropertyName internalName, PropertyName name)`
`protected` `POJOPropertyBuilder(POJOPropertyBuilder src, PropertyName newName)`

### Method Summary

All Methods Instance Methods Concrete Methods
`protected String` `_findDefaultValue()`
`protected String` `_findDescription()`
`protected Integer` `_findIndex()`
`protected Boolean` `_findRequired()`
`protected PropertyMetadata` `_getSetterInfo(PropertyMetadata metadata)` Helper method that contains logic for accessing and merging all setter information that we needed, regarding things like possible merging of property value, and handling of incoming nulls.
`protected int` `_getterPriority(AnnotatedMethod m)`
`protected int` `_setterPriority(AnnotatedMethod m)`
`void` `addAll(POJOPropertyBuilder src)` Method for adding all property members from specified collector into this collector.
`void` `addCtor(AnnotatedParameter a, PropertyName name, boolean explName, boolean visible, boolean ignored)`
`void` `addField(AnnotatedField a, PropertyName name, boolean explName, boolean visible, boolean ignored)`
`void` `addGetter(AnnotatedMethod a, PropertyName name, boolean explName, boolean visible, boolean ignored)`
`void` `addSetter(AnnotatedMethod a, PropertyName name, boolean explName, boolean visible, boolean ignored)`
`boolean` `anyIgnorals()`
`boolean` `anyVisible()`
`int` `compareTo(POJOPropertyBuilder other)`
`boolean` `couldDeserialize()`
`boolean` `couldSerialize()`
`Collection<POJOPropertyBuilder>` `explode(Collection<PropertyName> newNames)` Method called when a previous call to `findExplicitNames()` found multiple distinct explicit names, and the property this builder represents basically needs to be broken apart and replaced by a set of more than one properties.
`JsonProperty.Access` `findAccess()`
`Set<PropertyName>` `findExplicitNames()` Method called to find out set of explicit names for accessors bound together due to implicit name.
`JsonInclude.Value` `findInclusion()` Method used to check if this property has specific inclusion override associated with it or not.
`ObjectIdInfo` `findObjectIdInfo()` Method used to check whether this logical property indicates that value POJOs should be written using additional Object Identifier (or, when multiple references exist, all but first AS Object Identifier).
`AnnotationIntrospector.ReferenceProperty` `findReferenceType()` Method used to find whether property is part of a bi-directional reference.
`Class<?>[]` `findViews()` Method used to find View-inclusion definitions for the property.
`protected <T> T` `fromMemberAnnotations(com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.WithMember<T> func)` Helper method used for finding annotation values, from accessors relevant to current usage (deserialization, serialization)
`protected <T> T` `fromMemberAnnotationsExcept(com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.WithMember<T> func, T defaultValue)`
`AnnotatedParameter` `getConstructorParameter()`
`Iterator<AnnotatedParameter>` `getConstructorParameters()` Additional method that may be called instead of `BeanPropertyDefinition.getConstructorParameter()` to get access to all constructor parameters, not just the highest priority one.
`AnnotatedField` `getField()`
`PropertyName` `getFullName()`
`AnnotatedMethod` `getGetter()`
`String` `getInternalName()` Accessor that can be used to determine implicit name from underlying element(s) before possible renaming.
`PropertyMetadata` `getMetadata()` Method for accessing additional metadata.
`String` `getName()` Accessor for name used for external representation (in JSON).
`AnnotatedMember` `getPrimaryMember()` Method used to find the property member (getter, setter, field) that has the highest precedence in current context (getter method when serializing, if available, and so forth), if any.
`JavaType` `getPrimaryType()` Type determined from the primary member for the property being built, considering precedence according to whether we are processing serialization or deserialization.
`Class<?>` `getRawPrimaryType()`
`AnnotatedMethod` `getSetter()`
`PropertyName` `getWrapperName()` Accessor for finding wrapper name to use for property (if any).
`boolean` `hasConstructorParameter()`
`boolean` `hasField()`
`boolean` `hasGetter()`
`boolean` `hasName(PropertyName name)`
`boolean` `hasSetter()`
`boolean` `isExplicitlyIncluded()` Accessor that can be called to check whether property was included due to an explicit marker (usually annotation), or just by naming convention.
`boolean` `isExplicitlyNamed()` Accessor that can be called to check whether property name was due to an explicit marker (usually annotation), or just by naming convention or use of "use-default-name" marker (annotation).
`boolean` `isTypeId()` Method used to check whether this logical property has a marker to indicate it should be used as the type id for polymorphic type handling.
`void` `mergeAnnotations(boolean forSerialization)`
`void` `removeConstructors()` Mutator that will simply drop any constructor parameters property may have.
`void` `removeIgnored()` Method called to remove all entries that are marked as ignored.
`JsonProperty.Access` `removeNonVisible(boolean inferMutators)`
`String` `toString()`
`void` `trimByVisibility()` Method called to trim unnecessary entries, such as implicit getter if there is an explict one available.
`POJOPropertyBuilder` `withName(PropertyName newName)` Method that can be used to create a definition with same settings as this one, but with different (external) name; that is, one for which `BeanPropertyDefinition.getName()` would return `newName`.
`POJOPropertyBuilder` `withSimpleName(String newSimpleName)` Alternate "mutant factory" that will only change simple name, but leave other optional parts (like namespace) as is.

### Methods inherited from class com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition

`findReferenceName, getAccessor, getMutator, getNonConstructorMutator, isRequired`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### _forSerialization

    protected final boolean _forSerialization

Whether property is being composed for serialization (true) or deserialization (false)

#### _config

    protected final MapperConfig<?> _config

#### _annotationIntrospector

    protected final AnnotationIntrospector _annotationIntrospector

#### _name

    protected final PropertyName _name

External name of logical property; may change with renaming (by new instance being constructed using a new name)

#### _internalName

    protected final PropertyName _internalName

Original internal name, derived from accessor, of this property. Will not be changed by renaming.

#### _fields

    protected POJOPropertyBuilder.Linked<AnnotatedField> _fields

#### _ctorParameters

    protected POJOPropertyBuilder.Linked<AnnotatedParameter> _ctorParameters

#### _getters

    protected POJOPropertyBuilder.Linked<AnnotatedMethod> _getters

#### _setters

    protected POJOPropertyBuilder.Linked<AnnotatedMethod> _setters

#### _metadata

    protected transient PropertyMetadata _metadata

#### _referenceInfo

    protected transient AnnotationIntrospector.ReferenceProperty _referenceInfo

Lazily accessed information about this property iff it is a forward or back reference.

Since:
  2.9

### Constructor Detail

#### POJOPropertyBuilder

    public POJOPropertyBuilder(MapperConfig<?> config,
                               AnnotationIntrospector ai,
                               boolean forSerialization,
                               PropertyName internalName)

#### POJOPropertyBuilder

    protected POJOPropertyBuilder(MapperConfig<?> config,
                                  AnnotationIntrospector ai,
                                  boolean forSerialization,
                                  PropertyName internalName,
                                  PropertyName name)

#### POJOPropertyBuilder

    protected POJOPropertyBuilder(POJOPropertyBuilder src,
                                  PropertyName newName)

### Method Detail

#### withName

    public POJOPropertyBuilder withName(PropertyName newName)

Description copied from class: `BeanPropertyDefinition`
Method that can be used to create a definition with same settings as this one, but with different (external) name; that is, one for which `BeanPropertyDefinition.getName()` would return `newName`.

Specified by:
  `withName` in class `BeanPropertyDefinition`

#### withSimpleName

    public POJOPropertyBuilder withSimpleName(String newSimpleName)

Description copied from class: `BeanPropertyDefinition`
Alternate "mutant factory" that will only change simple name, but leave other optional parts (like namespace) as is.

Specified by:
  `withSimpleName` in class `BeanPropertyDefinition`

#### compareTo

    public int compareTo(POJOPropertyBuilder other)

Specified by:
  `compareTo` in interface `Comparable<POJOPropertyBuilder>`

#### getName

    public String getName()

Description copied from class: `BeanPropertyDefinition`
Accessor for name used for external representation (in JSON).

Specified by:
  `getName` in interface `Named`
Specified by:
  `getName` in class `BeanPropertyDefinition`

#### getFullName

    public PropertyName getFullName()

Specified by:
  `getFullName` in class `BeanPropertyDefinition`

#### hasName

    public boolean hasName(PropertyName name)

Overrides:
  `hasName` in class `BeanPropertyDefinition`

#### getInternalName

    public String getInternalName()

Description copied from class: `BeanPropertyDefinition`
Accessor that can be used to determine implicit name from underlying element(s) before possible renaming. This is the "internal" name derived from accessor ("x" from "getX"), and is not based on annotations or naming strategy.

Specified by:
  `getInternalName` in class `BeanPropertyDefinition`

#### getWrapperName

    public PropertyName getWrapperName()

Description copied from class: `BeanPropertyDefinition`
Accessor for finding wrapper name to use for property (if any).

Specified by:
  `getWrapperName` in class `BeanPropertyDefinition`

#### isExplicitlyIncluded

    public boolean isExplicitlyIncluded()

Description copied from class: `BeanPropertyDefinition`
Accessor that can be called to check whether property was included due to an explicit marker (usually annotation), or just by naming convention.

Specified by:
  `isExplicitlyIncluded` in class `BeanPropertyDefinition`
Returns:
  True if property was explicitly included (usually by having one of components being annotated); false if inclusion was purely due to naming or visibility definitions (that is, implicit)

#### isExplicitlyNamed

    public boolean isExplicitlyNamed()

Description copied from class: `BeanPropertyDefinition`
Accessor that can be called to check whether property name was due to an explicit marker (usually annotation), or just by naming convention or use of "use-default-name" marker (annotation).

Note that entries that return true from this method will always return true for `BeanPropertyDefinition.isExplicitlyIncluded()`, but not necessarily vice versa.

Overrides:
  `isExplicitlyNamed` in class `BeanPropertyDefinition`

#### getMetadata

    public PropertyMetadata getMetadata()

Description copied from class: `BeanPropertyDefinition`
Method for accessing additional metadata. NOTE: will never return null, so de-referencing return value is safe.

Specified by:
  `getMetadata` in class `BeanPropertyDefinition`

#### _getSetterInfo

    protected PropertyMetadata _getSetterInfo(PropertyMetadata metadata)

Helper method that contains logic for accessing and merging all setter information that we needed, regarding things like possible merging of property value, and handling of incoming nulls.

#### getPrimaryType

    public JavaType getPrimaryType()

Type determined from the primary member for the property being built, considering precedence according to whether we are processing serialization or deserialization.

Specified by:
  `getPrimaryType` in class `BeanPropertyDefinition`

#### getRawPrimaryType

    public Class<?> getRawPrimaryType()

Specified by:
  `getRawPrimaryType` in class `BeanPropertyDefinition`

#### hasGetter

    public boolean hasGetter()

Specified by:
  `hasGetter` in class `BeanPropertyDefinition`

#### hasSetter

    public boolean hasSetter()

Specified by:
  `hasSetter` in class `BeanPropertyDefinition`

#### hasField

    public boolean hasField()

Specified by:
  `hasField` in class `BeanPropertyDefinition`

#### hasConstructorParameter

    public boolean hasConstructorParameter()

Specified by:
  `hasConstructorParameter` in class `BeanPropertyDefinition`

#### couldDeserialize

    public boolean couldDeserialize()

Overrides:
  `couldDeserialize` in class `BeanPropertyDefinition`

#### couldSerialize

    public boolean couldSerialize()

Overrides:
  `couldSerialize` in class `BeanPropertyDefinition`

#### getGetter

    public AnnotatedMethod getGetter()

Specified by:
  `getGetter` in class `BeanPropertyDefinition`

#### getSetter

    public AnnotatedMethod getSetter()

Specified by:
  `getSetter` in class `BeanPropertyDefinition`

#### getField

    public AnnotatedField getField()

Specified by:
  `getField` in class `BeanPropertyDefinition`

#### getConstructorParameter

    public AnnotatedParameter getConstructorParameter()

Specified by:
  `getConstructorParameter` in class `BeanPropertyDefinition`

#### getConstructorParameters

    public Iterator<AnnotatedParameter> getConstructorParameters()

Description copied from class: `BeanPropertyDefinition`
Additional method that may be called instead of `BeanPropertyDefinition.getConstructorParameter()` to get access to all constructor parameters, not just the highest priority one.

Overrides:
  `getConstructorParameters` in class `BeanPropertyDefinition`

#### getPrimaryMember

    public AnnotatedMember getPrimaryMember()

Description copied from class: `BeanPropertyDefinition`
Method used to find the property member (getter, setter, field) that has the highest precedence in current context (getter method when serializing, if available, and so forth), if any.

Note: abstract since 2.5

Specified by:
  `getPrimaryMember` in class `BeanPropertyDefinition`

#### _getterPriority

    protected int _getterPriority(AnnotatedMethod m)

#### _setterPriority

    protected int _setterPriority(AnnotatedMethod m)

#### findViews

    public Class<?>[] findViews()

Description copied from class: `BeanPropertyDefinition`
Method used to find View-inclusion definitions for the property.

Overrides:
  `findViews` in class `BeanPropertyDefinition`

#### findReferenceType

    public AnnotationIntrospector.ReferenceProperty findReferenceType()

Description copied from class: `BeanPropertyDefinition`
Method used to find whether property is part of a bi-directional reference.

Overrides:
  `findReferenceType` in class `BeanPropertyDefinition`

#### isTypeId

    public boolean isTypeId()

Description copied from class: `BeanPropertyDefinition`
Method used to check whether this logical property has a marker to indicate it should be used as the type id for polymorphic type handling.

Overrides:
  `isTypeId` in class `BeanPropertyDefinition`

#### _findRequired

    protected Boolean _findRequired()

#### _findDescription

    protected String _findDescription()

#### _findIndex

    protected Integer _findIndex()

#### _findDefaultValue

    protected String _findDefaultValue()

#### findObjectIdInfo

    public ObjectIdInfo findObjectIdInfo()

Description copied from class: `BeanPropertyDefinition`
Method used to check whether this logical property indicates that value POJOs should be written using additional Object Identifier (or, when multiple references exist, all but first AS Object Identifier).

Overrides:
  `findObjectIdInfo` in class `BeanPropertyDefinition`

#### findInclusion

    public JsonInclude.Value findInclusion()

Description copied from class: `BeanPropertyDefinition`
Method used to check if this property has specific inclusion override associated with it or not. It should NOT check for any default settings (global, per-type, or containing POJO settings)

Specified by:
  `findInclusion` in class `BeanPropertyDefinition`

#### findAccess

    public JsonProperty.Access findAccess()

#### addField

    public void addField(AnnotatedField a,
                         PropertyName name,
                         boolean explName,
                         boolean visible,
                         boolean ignored)

#### addCtor

    public void addCtor(AnnotatedParameter a,
                        PropertyName name,
                        boolean explName,
                        boolean visible,
                        boolean ignored)

#### addGetter

    public void addGetter(AnnotatedMethod a,
                          PropertyName name,
                          boolean explName,
                          boolean visible,
                          boolean ignored)

#### addSetter

    public void addSetter(AnnotatedMethod a,
                          PropertyName name,
                          boolean explName,
                          boolean visible,
                          boolean ignored)

#### addAll

    public void addAll(POJOPropertyBuilder src)

Method for adding all property members from specified collector into this collector.

#### removeIgnored

    public void removeIgnored()

Method called to remove all entries that are marked as ignored.

#### removeNonVisible

    public JsonProperty.Access removeNonVisible(boolean inferMutators)

Parameters:
  `inferMutators` - Whether mutators can be "pulled in" by visible accessors or not.

#### removeConstructors

    public void removeConstructors()

Mutator that will simply drop any constructor parameters property may have.

Since:
  2.5

#### trimByVisibility

    public void trimByVisibility()

Method called to trim unnecessary entries, such as implicit getter if there is an explict one available. This is important for later stages, to avoid unnecessary conflicts.

#### mergeAnnotations

    public void mergeAnnotations(boolean forSerialization)

#### anyVisible

    public boolean anyVisible()

#### anyIgnorals

    public boolean anyIgnorals()

#### findExplicitNames

    public Set<PropertyName> findExplicitNames()

Method called to find out set of explicit names for accessors bound together due to implicit name.

Since:
  2.4

#### explode

    public Collection<POJOPropertyBuilder> explode(Collection<PropertyName> newNames)

Method called when a previous call to `findExplicitNames()` found multiple distinct explicit names, and the property this builder represents basically needs to be broken apart and replaced by a set of more than one properties.

Since:
  2.4

#### toString

    public String toString()

Overrides:
  `toString` in class `Object`

#### fromMemberAnnotations

    protected <T> T fromMemberAnnotations(com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.WithMember<T> func)

Helper method used for finding annotation values, from accessors relevant to current usage (deserialization, serialization)

#### fromMemberAnnotationsExcept

    protected <T> T fromMemberAnnotationsExcept(com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.WithMember<T> func,
                                                T defaultValue)