Skip to content

Commit a64e1bf

Browse files
committed
Merge branch '2.12'
2 parents 818a44f + 2e494a9 commit a64e1bf

File tree

56 files changed

+165
-147
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+165
-147
lines changed

src/main/java/com/fasterxml/jackson/databind/AnnotationIntrospector.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
import com.fasterxml.jackson.core.Version;
88
import com.fasterxml.jackson.core.Versioned;
99

10-
import com.fasterxml.jackson.databind.JsonDeserializer;
11-
import com.fasterxml.jackson.databind.JsonSerializer;
1210
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
1311
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
1412
import com.fasterxml.jackson.databind.cfg.MapperConfig;

src/main/java/com/fasterxml/jackson/databind/cfg/BaseSettings.java

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.fasterxml.jackson.core.Base64Variant;
88

99
import com.fasterxml.jackson.databind.*;
10+
import com.fasterxml.jackson.databind.introspect.AccessorNamingStrategy;
1011
import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
1112
import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
1213
import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
@@ -30,9 +31,9 @@ public final class BaseSettings
3031
private static final TimeZone DEFAULT_TIMEZONE = TimeZone.getTimeZone("UTC");
3132

3233
/*
33-
/**********************************************************
34+
/**********************************************************************
3435
/* Configuration settings; introspection, related
35-
/**********************************************************
36+
/**********************************************************************
3637
*/
3738

3839
/**
@@ -45,10 +46,15 @@ public final class BaseSettings
4546
*/
4647
protected final PropertyNamingStrategy _propertyNamingStrategy;
4748

49+
/**
50+
* Provider for creating {@link AccessorNamingStrategy} instances to use
51+
*/
52+
protected final AccessorNamingStrategy.Provider _accessorNaming;
53+
4854
/*
49-
/**********************************************************
50-
/* Configuration settings; type resolution
51-
/**********************************************************
55+
/**********************************************************************
56+
/* Configuration settings; polymorphic type resolution
57+
/**********************************************************************
5258
*/
5359

5460
/**
@@ -121,14 +127,16 @@ public final class BaseSettings
121127
/**********************************************************
122128
*/
123129

124-
public BaseSettings(AnnotationIntrospector ai, PropertyNamingStrategy pns,
130+
public BaseSettings(AnnotationIntrospector ai,
131+
PropertyNamingStrategy pns, AccessorNamingStrategy.Provider accNaming,
125132
TypeResolverBuilder<?> defaultTyper, PolymorphicTypeValidator ptv,
126133
DateFormat dateFormat, HandlerInstantiator hi,
127134
Locale locale, TimeZone tz, Base64Variant defaultBase64,
128135
JsonNodeFactory nodeFactory)
129136
{
130137
_annotationIntrospector = ai;
131138
_propertyNamingStrategy = pns;
139+
_accessorNaming = accNaming;
132140
_defaultTyper = defaultTyper;
133141
_typeValidator = ptv;
134142
_dateFormat = dateFormat;
@@ -149,7 +157,7 @@ public BaseSettings withAnnotationIntrospector(AnnotationIntrospector ai) {
149157
if (_annotationIntrospector == ai) {
150158
return this;
151159
}
152-
return new BaseSettings(ai, _propertyNamingStrategy,
160+
return new BaseSettings(ai, _propertyNamingStrategy, _accessorNaming,
153161
_defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale,
154162
_timeZone, _defaultBase64, _nodeFactory);
155163
}
@@ -166,7 +174,16 @@ public BaseSettings with(PropertyNamingStrategy pns) {
166174
if (_propertyNamingStrategy == pns) {
167175
return this;
168176
}
169-
return new BaseSettings(_annotationIntrospector, pns,
177+
return new BaseSettings(_annotationIntrospector, pns, _accessorNaming,
178+
_defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale,
179+
_timeZone, _defaultBase64, _nodeFactory);
180+
}
181+
182+
public BaseSettings with(AccessorNamingStrategy.Provider p) {
183+
if (_accessorNaming == p) {
184+
return this;
185+
}
186+
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, p,
170187
_defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale,
171188
_timeZone, _defaultBase64, _nodeFactory);
172189
}
@@ -175,7 +192,7 @@ public BaseSettings with(TypeResolverBuilder<?> typer) {
175192
if (_defaultTyper == typer) {
176193
return this;
177194
}
178-
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy,
195+
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming,
179196
typer, _typeValidator, _dateFormat, _handlerInstantiator, _locale,
180197
_timeZone, _defaultBase64, _nodeFactory);
181198
}
@@ -184,7 +201,7 @@ public BaseSettings with(PolymorphicTypeValidator ptv) {
184201
if (_typeValidator == ptv) {
185202
return this;
186203
}
187-
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy,
204+
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming,
188205
_defaultTyper, ptv, _dateFormat, _handlerInstantiator, _locale,
189206
_timeZone, _defaultBase64, _nodeFactory);
190207
}
@@ -198,7 +215,7 @@ public BaseSettings with(DateFormat df) {
198215
if ((df != null) && hasExplicitTimeZone()) {
199216
df = _force(df, _timeZone);
200217
}
201-
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy,
218+
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming,
202219
_defaultTyper, _typeValidator, df, _handlerInstantiator, _locale,
203220
_timeZone, _defaultBase64, _nodeFactory);
204221
}
@@ -207,7 +224,7 @@ public BaseSettings with(HandlerInstantiator hi) {
207224
if (_handlerInstantiator == hi) {
208225
return this;
209226
}
210-
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy,
227+
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming,
211228
_defaultTyper, _typeValidator, _dateFormat, hi, _locale,
212229
_timeZone, _defaultBase64, _nodeFactory);
213230
}
@@ -216,7 +233,7 @@ public BaseSettings with(Locale l) {
216233
if (_locale == l) {
217234
return this;
218235
}
219-
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy,
236+
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming,
220237
_defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, l,
221238
_timeZone, _defaultBase64, _nodeFactory);
222239
}
@@ -234,10 +251,8 @@ public BaseSettings with(TimeZone tz)
234251
if (tz == _timeZone) {
235252
return this;
236253
}
237-
238254
DateFormat df = _force(_dateFormat, tz);
239-
return new BaseSettings(_annotationIntrospector,
240-
_propertyNamingStrategy,
255+
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming,
241256
_defaultTyper, _typeValidator, df, _handlerInstantiator, _locale,
242257
tz, _defaultBase64, _nodeFactory);
243258
}
@@ -246,8 +261,7 @@ public BaseSettings with(Base64Variant base64) {
246261
if (base64 == _defaultBase64) {
247262
return this;
248263
}
249-
return new BaseSettings(_annotationIntrospector,
250-
_propertyNamingStrategy,
264+
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming,
251265
_defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale,
252266
_timeZone, base64, _nodeFactory);
253267
}
@@ -256,8 +270,7 @@ public BaseSettings with(JsonNodeFactory nodeFactory) {
256270
if (nodeFactory == _nodeFactory) {
257271
return this;
258272
}
259-
return new BaseSettings(_annotationIntrospector,
260-
_propertyNamingStrategy,
273+
return new BaseSettings(_annotationIntrospector, _propertyNamingStrategy, _accessorNaming,
261274
_defaultTyper, _typeValidator, _dateFormat, _handlerInstantiator, _locale,
262275
_timeZone, _defaultBase64, nodeFactory);
263276
}
@@ -276,6 +289,10 @@ public PropertyNamingStrategy getPropertyNamingStrategy() {
276289
return _propertyNamingStrategy;
277290
}
278291

292+
public AccessorNamingStrategy.Provider getAccessorNaming() {
293+
return _accessorNaming;
294+
}
295+
279296
public TypeResolverBuilder<?> getDefaultTyper() {
280297
return _defaultTyper;
281298
}

src/main/java/com/fasterxml/jackson/databind/cfg/MapperBuilder.java

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,15 @@
1010
import com.fasterxml.jackson.annotation.JsonInclude;
1111
import com.fasterxml.jackson.annotation.JsonSetter;
1212
import com.fasterxml.jackson.annotation.JsonTypeInfo;
13+
1314
import com.fasterxml.jackson.core.*;
1415
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
1516
import com.fasterxml.jackson.core.util.Snapshottable;
17+
1618
import com.fasterxml.jackson.databind.*;
1719
import com.fasterxml.jackson.databind.deser.*;
18-
import com.fasterxml.jackson.databind.introspect.BasicClassIntrospector;
19-
import com.fasterxml.jackson.databind.introspect.ClassIntrospector;
20-
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
21-
import com.fasterxml.jackson.databind.introspect.MixInResolver;
22-
import com.fasterxml.jackson.databind.introspect.MixInHandler;
23-
import com.fasterxml.jackson.databind.introspect.VisibilityChecker;
24-
import com.fasterxml.jackson.databind.jsontype.NamedType;
25-
import com.fasterxml.jackson.databind.jsontype.DefaultBaseTypeLimitingValidator;
26-
import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator;
27-
import com.fasterxml.jackson.databind.jsontype.SubtypeResolver;
28-
import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
29-
import com.fasterxml.jackson.databind.jsontype.TypeResolverProvider;
20+
import com.fasterxml.jackson.databind.introspect.*;
21+
import com.fasterxml.jackson.databind.jsontype.*;
3022
import com.fasterxml.jackson.databind.jsontype.impl.DefaultTypeResolverBuilder;
3123
import com.fasterxml.jackson.databind.jsontype.impl.StdSubtypeResolver;
3224
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
@@ -58,9 +50,11 @@ public abstract class MapperBuilder<M extends ObjectMapper,
5850

5951
protected final static PolymorphicTypeValidator DEFAULT_TYPE_VALIDATOR = new DefaultBaseTypeLimitingValidator();
6052

53+
protected final static AccessorNamingStrategy.Provider DEFAULT_ACCESSOR_NAMING = new DefaultAccessorNamingStrategy.Provider();
54+
6155
protected final static BaseSettings DEFAULT_BASE_SETTINGS = new BaseSettings(
6256
DEFAULT_ANNOTATION_INTROSPECTOR,
63-
null,
57+
null, DEFAULT_ACCESSOR_NAMING,
6458
null, // no default typing, by default
6559
DEFAULT_TYPE_VALIDATOR, // and polymorphic type by class won't pass either
6660
StdDateFormat.instance, null,
@@ -1138,17 +1132,45 @@ public B polymorphicTypeValidator(PolymorphicTypeValidator ptv) {
11381132
* id resolvers), given a class.
11391133
*
11401134
* @param hi Instantiator to use; if null, use the default implementation
1135+
*
1136+
* @return Builder instance itself to allow chaining
11411137
*/
11421138
public B handlerInstantiator(HandlerInstantiator hi) {
11431139
_baseSettings = _baseSettings.with(hi);
11441140
return _this();
11451141
}
11461142

1143+
/**
1144+
* Method for configuring {@link PropertyNamingStrategy} to use for adapting
1145+
* POJO property names (internal) into content property names (external)
1146+
*
1147+
* @param s Strategy instance to use; if null, use the default implementation
1148+
*
1149+
* @return Builder instance itself to allow chaining
1150+
*/
11471151
public B propertyNamingStrategy(PropertyNamingStrategy s) {
11481152
_baseSettings = _baseSettings.with(s);
11491153
return _this();
11501154
}
11511155

1156+
/**
1157+
* Method for configuring {@link AccessorNamingStrategy} to use for auto-detecting
1158+
* accessor ("getter") and mutator ("setter") methods based on naming of methods.
1159+
*
1160+
* @param s Strategy instance to use; if null, use the default implementation
1161+
*
1162+
* @return Builder instance itself to allow chaining
1163+
*
1164+
* @since 2.12
1165+
*/
1166+
public B accessorNaming(AccessorNamingStrategy.Provider s) {
1167+
if (s == null) {
1168+
s = new DefaultAccessorNamingStrategy.Provider();
1169+
}
1170+
_baseSettings = _baseSettings.with(s);
1171+
return _this();
1172+
}
1173+
11521174
/*
11531175
/**********************************************************************
11541176
/* Changing factories, serialization

src/main/java/com/fasterxml/jackson/databind/cfg/MapperConfig.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,11 @@ public final PropertyNamingStrategy getPropertyNamingStrategy() {
190190
return _base.getPropertyNamingStrategy();
191191
}
192192

193+
// @since 2.12
194+
public final AccessorNamingStrategy.Provider getAccessorNaming() {
195+
return _base.getAccessorNaming();
196+
}
197+
193198
public final HandlerInstantiator getHandlerInstantiator() {
194199
return _base.getHandlerInstantiator();
195200
}

src/main/java/com/fasterxml/jackson/databind/cfg/MapperConfigBase.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import java.util.*;
55

66
import com.fasterxml.jackson.annotation.*;
7+
78
import com.fasterxml.jackson.core.Base64Variant;
89
import com.fasterxml.jackson.core.type.TypeReference;
10+
911
import com.fasterxml.jackson.databind.*;
1012
import com.fasterxml.jackson.databind.introspect.*;
1113
import com.fasterxml.jackson.databind.jsontype.SubtypeResolver;
@@ -277,7 +279,7 @@ public final T with(TypeResolverBuilder<?> trb) {
277279

278280
/**
279281
* Fluent factory method that will construct a new instance with
280-
* specified {@link JsonNodeFactory}
282+
* specified {@link JsonNodeFactory}.
281283
*/
282284
public final T with(JsonNodeFactory f) {
283285
return _withBase(_base.with(f));

src/main/java/com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private static class JavaUtilCollectionsConverter implements Converter<Object,Ob
121121

122122
private final int _kind;
123123

124-
private JavaUtilCollectionsConverter(int kind, JavaType inputType) {
124+
JavaUtilCollectionsConverter(int kind, JavaType inputType) {
125125
_inputType = inputType;
126126
_kind = kind;
127127
}

src/main/java/com/fasterxml/jackson/databind/deser/std/CollectionDeserializer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
1212
import com.fasterxml.jackson.databind.deser.*;
1313
import com.fasterxml.jackson.databind.deser.impl.ReadableObjectId.Referring;
14-
import com.fasterxml.jackson.databind.deser.std.ContainerDeserializerBase;
1514
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
1615
import com.fasterxml.jackson.databind.type.LogicalType;
1716
import com.fasterxml.jackson.databind.util.ClassUtil;

src/main/java/com/fasterxml/jackson/databind/introspect/DefaultAccessorNamingStrategy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ private static boolean isGroovyMetaClassGetter(AnnotatedMethod am) {
153153
/**
154154
* Provider for {@link DefaultAccessorNamingStrategy}.
155155
*/
156-
protected static class Provider
156+
public final static class Provider
157157
extends AccessorNamingStrategy.Provider
158158
implements java.io.Serializable
159159
{

src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,6 @@
1818
*/
1919
public class POJOPropertiesCollector
2020
{
21-
// !!! TEMPORARY
22-
protected final static AccessorNamingStrategy.Provider NAMING_PROVIDER
23-
= new DefaultAccessorNamingStrategy.Provider();
24-
2521
/*
2622
/**********************************************************************
2723
/* Configuration
@@ -150,7 +146,7 @@ protected POJOPropertiesCollector(MapperConfig<?> config, boolean forSerializati
150146
_visibilityChecker = _config.getDefaultVisibilityChecker(type.getRawClass(),
151147
classDef);
152148

153-
_accessorNaming = NAMING_PROVIDER.forPOJO(_config, classDef, mutatorPrefix);
149+
_accessorNaming = config.getAccessorNaming().forPOJO(_config, classDef, mutatorPrefix);
154150
}
155151

156152
/*

src/main/java/com/fasterxml/jackson/databind/util/TokenBuffer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2179,11 +2179,11 @@ private final void assignNativeIds(int index, Object objectId, Object typeId)
21792179
}
21802180
}
21812181

2182-
private Object findObjectId(int index) {
2182+
public Object findObjectId(int index) {
21832183
return (_nativeIds == null) ? null : _nativeIds.get(_objectIdIndex(index));
21842184
}
21852185

2186-
private Object findTypeId(int index) {
2186+
public Object findTypeId(int index) {
21872187
return (_nativeIds == null) ? null : _nativeIds.get(_typeIdIndex(index));
21882188
}
21892189

0 commit comments

Comments
 (0)