package com.fasterxml.jackson.databind.introspect;

import java.util.Collections;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.AnnotationIntrospector;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.PropertyMetadata;
import com.fasterxml.jackson.databind.PropertyName;
import com.fasterxml.jackson.databind.cfg.MapperConfig;

Intermediate BeanProperty class shared by concrete readable- and writable property implementations for sharing common functionality.
Since:2.7
/** * Intermediate {@link BeanProperty} class shared by concrete readable- and * writable property implementations for sharing common functionality. * * @since 2.7 */
public abstract class ConcreteBeanPropertyBase implements BeanProperty, java.io.Serializable { private static final long serialVersionUID = 1;
Additional information about property
Since:2.3
/** * Additional information about property * * @since 2.3 */
protected final PropertyMetadata _metadata;
Lazily accessed value for per-property format override definition.
Since:2.8
/** * Lazily accessed value for per-property format override definition. * * @since 2.8 */
protected transient JsonFormat.Value _propertyFormat;
Since:2.9
/** * @since 2.9 */
protected transient List<PropertyName> _aliases; protected ConcreteBeanPropertyBase(PropertyMetadata md) { _metadata = (md == null) ? PropertyMetadata.STD_REQUIRED_OR_OPTIONAL : md; } protected ConcreteBeanPropertyBase(ConcreteBeanPropertyBase src) { _metadata = src._metadata; _propertyFormat = src._propertyFormat; } @Override public boolean isRequired() { return _metadata.isRequired(); } @Override public PropertyMetadata getMetadata() { return _metadata; } @Override public boolean isVirtual() { return false; } @Override @Deprecated public final JsonFormat.Value findFormatOverrides(AnnotationIntrospector intr) { JsonFormat.Value f = null; if (intr != null) { AnnotatedMember member = getMember(); if (member != null) { f = intr.findFormat(member); } } if (f == null) { f = EMPTY_FORMAT; } return f; } @Override public JsonFormat.Value findPropertyFormat(MapperConfig<?> config, Class<?> baseType) { // 15-Apr-2016, tatu: Let's calculate lazily, retain; assumption being however that // baseType is always the same JsonFormat.Value v = _propertyFormat; if (v == null) { JsonFormat.Value v1 = config.getDefaultPropertyFormat(baseType); JsonFormat.Value v2 = null; AnnotationIntrospector intr = config.getAnnotationIntrospector(); if (intr != null) { AnnotatedMember member = getMember(); if (member != null) { v2 = intr.findFormat(member); } } if (v1 == null) { v = (v2 == null) ? EMPTY_FORMAT : v2; } else { v = (v2 == null) ? v1 : v1.withOverrides(v2); } _propertyFormat = v; } return v; } @Override public JsonInclude.Value findPropertyInclusion(MapperConfig<?> config, Class<?> baseType) { AnnotationIntrospector intr = config.getAnnotationIntrospector(); AnnotatedMember member = getMember(); if (member == null) { JsonInclude.Value def = config.getDefaultPropertyInclusion(baseType); return def; } JsonInclude.Value v0 = config.getDefaultInclusion(baseType, member.getRawType()); if (intr == null) { return v0; } JsonInclude.Value v = intr.findPropertyInclusion(member); if (v0 == null) { return v; } return v0.withOverrides(v); } @Override public List<PropertyName> findAliases(MapperConfig<?> config) { List<PropertyName> aliases = _aliases; if (aliases == null) { AnnotationIntrospector intr = config.getAnnotationIntrospector(); if (intr != null) { aliases = intr.findPropertyAliases(getMember()); } if (aliases == null) { aliases = Collections.emptyList(); } _aliases = aliases; } return aliases; } }