Skip to content

Commit 15e0052

Browse files
committed
Fix #4530: make ConstructorDetector accessible on serialiation side too
1 parent 65a312f commit 15e0052

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -914,6 +914,7 @@ public final JsonNodeFactory getNodeFactory() {
914914
/**
915915
* @since 2.12
916916
*/
917+
@Override // since 2.18
917918
public ConstructorDetector getConstructorDetector() {
918919
if (_ctorDetector == null) {
919920
return ConstructorDetector.DEFAULT;

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

+2
Original file line numberDiff line numberDiff line change
@@ -2305,6 +2305,8 @@ public ObjectMapper setNodeFactory(JsonNodeFactory f) {
23052305
*/
23062306
public ObjectMapper setConstructorDetector(ConstructorDetector cd) {
23072307
_deserializationConfig = _deserializationConfig.with(cd);
2308+
// since 2.18
2309+
_serializationConfig = _serializationConfig.with(cd);
23082310
return this;
23092311
}
23102312

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

+51
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ public final class SerializationConfig
6060
*/
6161
protected final PrettyPrinter _defaultPrettyPrinter;
6262

63+
/**
64+
* @since 2.18 (only in DeserializationConfig from 2.12)
65+
*/
66+
protected final ConstructorDetector _ctorDetector;
67+
6368
/*
6469
/**********************************************************
6570
/* Serialization features
@@ -120,6 +125,7 @@ public SerializationConfig(BaseSettings base,
120125
_serFeatures = SER_FEATURE_DEFAULTS;
121126
_filterProvider = null;
122127
_defaultPrettyPrinter = DEFAULT_PRETTY_PRINTER;
128+
_ctorDetector = null;
123129
_generatorFeatures = 0;
124130
_generatorFeaturesToChange = 0;
125131
_formatWriteFeatures = 0;
@@ -151,6 +157,7 @@ protected SerializationConfig(SerializationConfig src,
151157
_serFeatures = src._serFeatures;
152158
_filterProvider = src._filterProvider;
153159
_defaultPrettyPrinter = src._defaultPrettyPrinter;
160+
_ctorDetector = src._ctorDetector;
154161
_generatorFeatures = src._generatorFeatures;
155162
_generatorFeaturesToChange = src._generatorFeaturesToChange;
156163
_formatWriteFeatures = src._formatWriteFeatures;
@@ -170,6 +177,7 @@ private SerializationConfig(SerializationConfig src, SubtypeResolver str)
170177
_serFeatures = src._serFeatures;
171178
_filterProvider = src._filterProvider;
172179
_defaultPrettyPrinter = src._defaultPrettyPrinter;
180+
_ctorDetector = src._ctorDetector;
173181
_generatorFeatures = src._generatorFeatures;
174182
_generatorFeaturesToChange = src._generatorFeaturesToChange;
175183
_formatWriteFeatures = src._formatWriteFeatures;
@@ -185,6 +193,7 @@ private SerializationConfig(SerializationConfig src,
185193
_serFeatures = serFeatures;
186194
_filterProvider = src._filterProvider;
187195
_defaultPrettyPrinter = src._defaultPrettyPrinter;
196+
_ctorDetector = src._ctorDetector;
188197
_generatorFeatures = generatorFeatures;
189198
_generatorFeaturesToChange = generatorFeatureMask;
190199
_formatWriteFeatures = formatFeatures;
@@ -197,6 +206,7 @@ private SerializationConfig(SerializationConfig src, BaseSettings base)
197206
_serFeatures = src._serFeatures;
198207
_filterProvider = src._filterProvider;
199208
_defaultPrettyPrinter = src._defaultPrettyPrinter;
209+
_ctorDetector = src._ctorDetector;
200210
_generatorFeatures = src._generatorFeatures;
201211
_generatorFeaturesToChange = src._generatorFeaturesToChange;
202212
_formatWriteFeatures = src._formatWriteFeatures;
@@ -209,6 +219,7 @@ private SerializationConfig(SerializationConfig src, FilterProvider filters)
209219
_serFeatures = src._serFeatures;
210220
_filterProvider = filters;
211221
_defaultPrettyPrinter = src._defaultPrettyPrinter;
222+
_ctorDetector = src._ctorDetector;
212223
_generatorFeatures = src._generatorFeatures;
213224
_generatorFeaturesToChange = src._generatorFeaturesToChange;
214225
_formatWriteFeatures = src._formatWriteFeatures;
@@ -221,6 +232,7 @@ private SerializationConfig(SerializationConfig src, Class<?> view)
221232
_serFeatures = src._serFeatures;
222233
_filterProvider = src._filterProvider;
223234
_defaultPrettyPrinter = src._defaultPrettyPrinter;
235+
_ctorDetector = src._ctorDetector;
224236
_generatorFeatures = src._generatorFeatures;
225237
_generatorFeaturesToChange = src._generatorFeaturesToChange;
226238
_formatWriteFeatures = src._formatWriteFeatures;
@@ -233,6 +245,7 @@ private SerializationConfig(SerializationConfig src, PropertyName rootName)
233245
_serFeatures = src._serFeatures;
234246
_filterProvider = src._filterProvider;
235247
_defaultPrettyPrinter = src._defaultPrettyPrinter;
248+
_ctorDetector = src._ctorDetector;
236249
_generatorFeatures = src._generatorFeatures;
237250
_generatorFeaturesToChange = src._generatorFeaturesToChange;
238251
_formatWriteFeatures = src._formatWriteFeatures;
@@ -248,6 +261,7 @@ protected SerializationConfig(SerializationConfig src, ContextAttributes attrs)
248261
_serFeatures = src._serFeatures;
249262
_filterProvider = src._filterProvider;
250263
_defaultPrettyPrinter = src._defaultPrettyPrinter;
264+
_ctorDetector = src._ctorDetector;
251265
_generatorFeatures = src._generatorFeatures;
252266
_generatorFeaturesToChange = src._generatorFeaturesToChange;
253267
_formatWriteFeatures = src._formatWriteFeatures;
@@ -263,6 +277,7 @@ protected SerializationConfig(SerializationConfig src, SimpleMixInResolver mixin
263277
_serFeatures = src._serFeatures;
264278
_filterProvider = src._filterProvider;
265279
_defaultPrettyPrinter = src._defaultPrettyPrinter;
280+
_ctorDetector = src._ctorDetector;
266281
_generatorFeatures = src._generatorFeatures;
267282
_generatorFeaturesToChange = src._generatorFeaturesToChange;
268283
_formatWriteFeatures = src._formatWriteFeatures;
@@ -278,6 +293,7 @@ protected SerializationConfig(SerializationConfig src, PrettyPrinter defaultPP)
278293
_serFeatures = src._serFeatures;
279294
_filterProvider = src._filterProvider;
280295
_defaultPrettyPrinter = defaultPP;
296+
_ctorDetector = src._ctorDetector;
281297
_generatorFeatures = src._generatorFeatures;
282298
_generatorFeaturesToChange = src._generatorFeaturesToChange;
283299
_formatWriteFeatures = src._formatWriteFeatures;
@@ -293,6 +309,23 @@ protected SerializationConfig(SerializationConfig src, DatatypeFeatures dtFeatur
293309
_serFeatures = src._serFeatures;
294310
_filterProvider = src._filterProvider;
295311
_defaultPrettyPrinter = src._defaultPrettyPrinter;
312+
_ctorDetector = src._ctorDetector;
313+
_generatorFeatures = src._generatorFeatures;
314+
_generatorFeaturesToChange = src._generatorFeaturesToChange;
315+
_formatWriteFeatures = src._formatWriteFeatures;
316+
_formatWriteFeaturesToChange = src._formatWriteFeaturesToChange;
317+
}
318+
319+
/**
320+
* @since 2.18
321+
*/
322+
protected SerializationConfig(SerializationConfig src, ConstructorDetector ctorDetector)
323+
{
324+
super(src);
325+
_serFeatures = src._serFeatures;
326+
_filterProvider = src._filterProvider;
327+
_defaultPrettyPrinter = src._defaultPrettyPrinter;
328+
_ctorDetector = ctorDetector;
296329
_generatorFeatures = src._generatorFeatures;
297330
_generatorFeaturesToChange = src._generatorFeaturesToChange;
298331
_formatWriteFeatures = src._formatWriteFeatures;
@@ -724,6 +757,16 @@ public SerializationConfig withDefaultPrettyPrinter(PrettyPrinter pp) {
724757
return (_defaultPrettyPrinter == pp) ? this: new SerializationConfig(this, pp);
725758
}
726759

760+
/**
761+
* @since 2.18
762+
*/
763+
public SerializationConfig with(ConstructorDetector ctorDetector) {
764+
if (_ctorDetector == ctorDetector) {
765+
return this;
766+
}
767+
return new SerializationConfig(this, ctorDetector);
768+
}
769+
727770
/*
728771
/**********************************************************
729772
/* Factories for objects configured here
@@ -892,6 +935,14 @@ public PrettyPrinter getDefaultPrettyPrinter() {
892935
return _defaultPrettyPrinter;
893936
}
894937

938+
@Override // since 2.18
939+
public ConstructorDetector getConstructorDetector() {
940+
if (_ctorDetector == null) {
941+
return ConstructorDetector.DEFAULT;
942+
}
943+
return _ctorDetector;
944+
}
945+
895946
/*
896947
/**********************************************************
897948
/* Introspection methods

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

+5
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,11 @@ public CacheProvider getCacheProvider() {
691691
return _base.getCacheProvider();
692692
}
693693

694+
/**
695+
* @since 2.18 (in DeserializationConfig-only since 2.12)
696+
*/
697+
public abstract ConstructorDetector getConstructorDetector();
698+
694699
/*
695700
/**********************************************************
696701
/* Methods for instantiating handlers

0 commit comments

Comments
 (0)