@@ -32,11 +32,12 @@ public final class DeserializationConfig
32
32
// since 2.5
33
33
private static final long serialVersionUID = 1 ;
34
34
35
- /**
36
- * Set of {@link DeserializationFeature}s enabled.
35
+ /*
36
+ /**********************************************************
37
+ /* Configured helper objects
38
+ /**********************************************************
37
39
*/
38
- protected final int _deserFeatures ;
39
-
40
+
40
41
/**
41
42
* Linked list that contains all registered problem handlers.
42
43
* Implementation as front-added linked list allows for sharing
@@ -49,6 +50,23 @@ public final class DeserializationConfig
49
50
*/
50
51
protected final JsonNodeFactory _nodeFactory ;
51
52
53
+ /*
54
+ /**********************************************************
55
+ /* Deserialization features
56
+ /**********************************************************
57
+ */
58
+
59
+ /**
60
+ * Set of {@link DeserializationFeature}s enabled.
61
+ */
62
+ protected final int _deserFeatures ;
63
+
64
+ /*
65
+ /**********************************************************
66
+ /* Parser features: generic, format-specific
67
+ /**********************************************************
68
+ */
69
+
52
70
/**
53
71
* States of {@link com.fasterxml.jackson.core.JsonParser.Feature}s to enable/disable.
54
72
*/
@@ -59,6 +77,20 @@ public final class DeserializationConfig
59
77
*/
60
78
protected final int _parserFeaturesToChange ;
61
79
80
+ /**
81
+ * States of {@link com.fasterxml.jackson.core.FormatFeature}s to enable/disable.
82
+ *
83
+ * @since 2.7
84
+ */
85
+ protected final int _formatReadFeatures ;
86
+
87
+ /**
88
+ * Bitflag of {@link com.fasterxml.jackson.core.FormatFeature}s to enable/disable
89
+ *
90
+ * @since 2.7
91
+ */
92
+ protected final int _formatReadFeaturesToChange ;
93
+
62
94
/*
63
95
/**********************************************************
64
96
/* Life-cycle, constructors
@@ -78,18 +110,23 @@ public DeserializationConfig(BaseSettings base,
78
110
_problemHandlers = null ;
79
111
_parserFeatures = 0 ;
80
112
_parserFeaturesToChange = 0 ;
113
+ _formatReadFeatures = 0 ;
114
+ _formatReadFeaturesToChange = 0 ;
81
115
}
82
116
83
117
private DeserializationConfig (DeserializationConfig src ,
84
118
int mapperFeatures , int deserFeatures ,
85
- int parserFeatures , int parserFeatureMask )
119
+ int parserFeatures , int parserFeatureMask ,
120
+ int formatFeatures , int formatFeatureMask )
86
121
{
87
122
super (src , mapperFeatures );
88
123
_deserFeatures = deserFeatures ;
89
124
_nodeFactory = src ._nodeFactory ;
90
125
_problemHandlers = src ._problemHandlers ;
91
126
_parserFeatures = parserFeatures ;
92
127
_parserFeaturesToChange = parserFeatureMask ;
128
+ _formatReadFeatures = formatFeatures ;
129
+ _formatReadFeaturesToChange = formatFeatureMask ;
93
130
}
94
131
95
132
/**
@@ -104,8 +141,10 @@ private DeserializationConfig(DeserializationConfig src, SubtypeResolver str)
104
141
_problemHandlers = src ._problemHandlers ;
105
142
_parserFeatures = src ._parserFeatures ;
106
143
_parserFeaturesToChange = src ._parserFeaturesToChange ;
144
+ _formatReadFeatures = src ._formatReadFeatures ;
145
+ _formatReadFeaturesToChange = src ._formatReadFeaturesToChange ;
107
146
}
108
-
147
+
109
148
private DeserializationConfig (DeserializationConfig src , BaseSettings base )
110
149
{
111
150
super (src , base );
@@ -114,6 +153,8 @@ private DeserializationConfig(DeserializationConfig src, BaseSettings base)
114
153
_problemHandlers = src ._problemHandlers ;
115
154
_parserFeatures = src ._parserFeatures ;
116
155
_parserFeaturesToChange = src ._parserFeaturesToChange ;
156
+ _formatReadFeatures = src ._formatReadFeatures ;
157
+ _formatReadFeaturesToChange = src ._formatReadFeaturesToChange ;
117
158
}
118
159
119
160
private DeserializationConfig (DeserializationConfig src , JsonNodeFactory f )
@@ -124,6 +165,8 @@ private DeserializationConfig(DeserializationConfig src, JsonNodeFactory f)
124
165
_nodeFactory = f ;
125
166
_parserFeatures = src ._parserFeatures ;
126
167
_parserFeaturesToChange = src ._parserFeaturesToChange ;
168
+ _formatReadFeatures = src ._formatReadFeatures ;
169
+ _formatReadFeaturesToChange = src ._formatReadFeaturesToChange ;
127
170
}
128
171
129
172
private DeserializationConfig (DeserializationConfig src ,
@@ -135,6 +178,8 @@ private DeserializationConfig(DeserializationConfig src,
135
178
_nodeFactory = src ._nodeFactory ;
136
179
_parserFeatures = src ._parserFeatures ;
137
180
_parserFeaturesToChange = src ._parserFeaturesToChange ;
181
+ _formatReadFeatures = src ._formatReadFeatures ;
182
+ _formatReadFeaturesToChange = src ._formatReadFeaturesToChange ;
138
183
}
139
184
140
185
private DeserializationConfig (DeserializationConfig src , PropertyName rootName )
@@ -145,6 +190,8 @@ private DeserializationConfig(DeserializationConfig src, PropertyName rootName)
145
190
_nodeFactory = src ._nodeFactory ;
146
191
_parserFeatures = src ._parserFeatures ;
147
192
_parserFeaturesToChange = src ._parserFeaturesToChange ;
193
+ _formatReadFeatures = src ._formatReadFeatures ;
194
+ _formatReadFeaturesToChange = src ._formatReadFeaturesToChange ;
148
195
}
149
196
150
197
private DeserializationConfig (DeserializationConfig src , Class <?> view )
@@ -155,11 +202,10 @@ private DeserializationConfig(DeserializationConfig src, Class<?> view)
155
202
_nodeFactory = src ._nodeFactory ;
156
203
_parserFeatures = src ._parserFeatures ;
157
204
_parserFeaturesToChange = src ._parserFeaturesToChange ;
205
+ _formatReadFeatures = src ._formatReadFeatures ;
206
+ _formatReadFeaturesToChange = src ._formatReadFeaturesToChange ;
158
207
}
159
208
160
- /**
161
- * @since 2.3
162
- */
163
209
protected DeserializationConfig (DeserializationConfig src , ContextAttributes attrs )
164
210
{
165
211
super (src , attrs );
@@ -168,11 +214,10 @@ protected DeserializationConfig(DeserializationConfig src, ContextAttributes att
168
214
_nodeFactory = src ._nodeFactory ;
169
215
_parserFeatures = src ._parserFeatures ;
170
216
_parserFeaturesToChange = src ._parserFeaturesToChange ;
217
+ _formatReadFeatures = src ._formatReadFeatures ;
218
+ _formatReadFeaturesToChange = src ._formatReadFeaturesToChange ;
171
219
}
172
220
173
- /**
174
- * @since 2.1
175
- */
176
221
protected DeserializationConfig (DeserializationConfig src , SimpleMixInResolver mixins )
177
222
{
178
223
super (src , mixins );
@@ -181,8 +226,10 @@ protected DeserializationConfig(DeserializationConfig src, SimpleMixInResolver m
181
226
_nodeFactory = src ._nodeFactory ;
182
227
_parserFeatures = src ._parserFeatures ;
183
228
_parserFeaturesToChange = src ._parserFeaturesToChange ;
229
+ _formatReadFeatures = src ._formatReadFeatures ;
230
+ _formatReadFeaturesToChange = src ._formatReadFeaturesToChange ;
184
231
}
185
-
232
+
186
233
/**
187
234
* Copy-constructor used for making a copy to be used by new {@link ObjectMapper}
188
235
* or {@link ObjectReader}.
@@ -198,11 +245,13 @@ protected DeserializationConfig(DeserializationConfig src, SimpleMixInResolver m
198
245
_nodeFactory = src ._nodeFactory ;
199
246
_parserFeatures = src ._parserFeatures ;
200
247
_parserFeaturesToChange = src ._parserFeaturesToChange ;
248
+ _formatReadFeatures = src ._formatReadFeatures ;
249
+ _formatReadFeaturesToChange = src ._formatReadFeaturesToChange ;
201
250
}
202
-
251
+
203
252
// for unit tests only:
204
253
protected BaseSettings getBaseSettings () { return _base ; }
205
-
254
+
206
255
/*
207
256
/**********************************************************
208
257
/* Life-cycle, factory methods from MapperConfig
@@ -218,7 +267,8 @@ public DeserializationConfig with(MapperFeature... features)
218
267
}
219
268
return (newMapperFlags == _mapperFeatures ) ? this :
220
269
new DeserializationConfig (this , newMapperFlags , _deserFeatures ,
221
- _parserFeatures , _parserFeaturesToChange );
270
+ _parserFeatures , _parserFeaturesToChange ,
271
+ _formatReadFeatures , _formatReadFeaturesToChange );
222
272
223
273
}
224
274
@@ -231,7 +281,8 @@ public DeserializationConfig without(MapperFeature... features)
231
281
}
232
282
return (newMapperFlags == _mapperFeatures ) ? this :
233
283
new DeserializationConfig (this , newMapperFlags , _deserFeatures ,
234
- _parserFeatures , _parserFeaturesToChange );
284
+ _parserFeatures , _parserFeaturesToChange ,
285
+ _formatReadFeatures , _formatReadFeaturesToChange );
235
286
}
236
287
237
288
@ Override
@@ -245,7 +296,8 @@ public DeserializationConfig with(MapperFeature feature, boolean state)
245
296
}
246
297
return (newMapperFlags == _mapperFeatures ) ? this :
247
298
new DeserializationConfig (this , newMapperFlags , _deserFeatures ,
248
- _parserFeatures , _parserFeaturesToChange );
299
+ _parserFeatures , _parserFeaturesToChange ,
300
+ _formatReadFeatures , _formatReadFeaturesToChange );
249
301
}
250
302
251
303
@ Override
@@ -364,7 +416,8 @@ public DeserializationConfig with(DeserializationFeature feature)
364
416
int newDeserFeatures = (_deserFeatures | feature .getMask ());
365
417
return (newDeserFeatures == _deserFeatures ) ? this :
366
418
new DeserializationConfig (this , _mapperFeatures , newDeserFeatures ,
367
- _parserFeatures , _parserFeaturesToChange );
419
+ _parserFeatures , _parserFeaturesToChange ,
420
+ _formatReadFeatures , _formatReadFeaturesToChange );
368
421
}
369
422
370
423
/**
@@ -380,7 +433,8 @@ public DeserializationConfig with(DeserializationFeature first,
380
433
}
381
434
return (newDeserFeatures == _deserFeatures ) ? this :
382
435
new DeserializationConfig (this , _mapperFeatures , newDeserFeatures ,
383
- _parserFeatures , _parserFeaturesToChange );
436
+ _parserFeatures , _parserFeaturesToChange ,
437
+ _formatReadFeatures , _formatReadFeaturesToChange );
384
438
}
385
439
386
440
/**
@@ -395,7 +449,8 @@ public DeserializationConfig withFeatures(DeserializationFeature... features)
395
449
}
396
450
return (newDeserFeatures == _deserFeatures ) ? this :
397
451
new DeserializationConfig (this , _mapperFeatures , newDeserFeatures ,
398
- _parserFeatures , _parserFeaturesToChange );
452
+ _parserFeatures , _parserFeaturesToChange ,
453
+ _formatReadFeatures , _formatReadFeaturesToChange );
399
454
}
400
455
401
456
/**
@@ -407,7 +462,8 @@ public DeserializationConfig without(DeserializationFeature feature)
407
462
int newDeserFeatures = _deserFeatures & ~feature .getMask ();
408
463
return (newDeserFeatures == _deserFeatures ) ? this :
409
464
new DeserializationConfig (this , _mapperFeatures , newDeserFeatures ,
410
- _parserFeatures , _parserFeaturesToChange );
465
+ _parserFeatures , _parserFeaturesToChange ,
466
+ _formatReadFeatures , _formatReadFeaturesToChange );
411
467
}
412
468
413
469
/**
@@ -423,7 +479,8 @@ public DeserializationConfig without(DeserializationFeature first,
423
479
}
424
480
return (newDeserFeatures == _deserFeatures ) ? this :
425
481
new DeserializationConfig (this , _mapperFeatures , newDeserFeatures ,
426
- _parserFeatures , _parserFeaturesToChange );
482
+ _parserFeatures , _parserFeaturesToChange ,
483
+ _formatReadFeatures , _formatReadFeaturesToChange );
427
484
}
428
485
429
486
/**
@@ -438,7 +495,8 @@ public DeserializationConfig withoutFeatures(DeserializationFeature... features)
438
495
}
439
496
return (newDeserFeatures == _deserFeatures ) ? this :
440
497
new DeserializationConfig (this , _mapperFeatures , newDeserFeatures ,
441
- _parserFeatures , _parserFeaturesToChange );
498
+ _parserFeatures , _parserFeaturesToChange ,
499
+ _formatReadFeatures , _formatReadFeaturesToChange );
442
500
}
443
501
444
502
/*
@@ -459,7 +517,8 @@ public DeserializationConfig with(JsonParser.Feature feature)
459
517
int newMask = _parserFeaturesToChange | feature .getMask ();
460
518
return ((_parserFeatures == newSet ) && (_parserFeaturesToChange == newMask )) ? this :
461
519
new DeserializationConfig (this , _mapperFeatures , _deserFeatures ,
462
- newSet , newMask );
520
+ _parserFeatures , _parserFeaturesToChange ,
521
+ _formatReadFeatures , _formatReadFeaturesToChange );
463
522
}
464
523
465
524
/**
@@ -479,7 +538,8 @@ public DeserializationConfig withFeatures(JsonParser.Feature... features)
479
538
}
480
539
return ((_parserFeatures == newSet ) && (_parserFeaturesToChange == newMask )) ? this :
481
540
new DeserializationConfig (this , _mapperFeatures , _deserFeatures ,
482
- newSet , newMask );
541
+ _parserFeatures , _parserFeaturesToChange ,
542
+ _formatReadFeatures , _formatReadFeaturesToChange );
483
543
}
484
544
485
545
/**
@@ -494,7 +554,8 @@ public DeserializationConfig without(JsonParser.Feature feature)
494
554
int newMask = _parserFeaturesToChange | feature .getMask ();
495
555
return ((_parserFeatures == newSet ) && (_parserFeaturesToChange == newMask )) ? this :
496
556
new DeserializationConfig (this , _mapperFeatures , _deserFeatures ,
497
- newSet , newMask );
557
+ _parserFeatures , _parserFeaturesToChange ,
558
+ _formatReadFeatures , _formatReadFeaturesToChange );
498
559
}
499
560
500
561
/**
@@ -514,6 +575,87 @@ public DeserializationConfig withoutFeatures(JsonParser.Feature... features)
514
575
}
515
576
return ((_parserFeatures == newSet ) && (_parserFeaturesToChange == newMask )) ? this :
516
577
new DeserializationConfig (this , _mapperFeatures , _deserFeatures ,
578
+ _parserFeatures , _parserFeaturesToChange ,
579
+ _formatReadFeatures , _formatReadFeaturesToChange );
580
+ }
581
+
582
+ /*
583
+ /**********************************************************
584
+ /* Life-cycle, JsonParser.FormatFeature-based factory methods
585
+ /**********************************************************
586
+ */
587
+
588
+ /**
589
+ * Fluent factory method that will construct and return a new configuration
590
+ * object instance with specified features enabled.
591
+ *
592
+ * @since 2.7
593
+ */
594
+ public DeserializationConfig with (FormatFeature feature )
595
+ {
596
+ int newSet = _formatReadFeatures | feature .getMask ();
597
+ int newMask = _formatReadFeaturesToChange | feature .getMask ();
598
+ return ((_formatReadFeatures == newSet ) && (_formatReadFeaturesToChange == newMask )) ? this :
599
+ new DeserializationConfig (this , _mapperFeatures , _deserFeatures ,
600
+ _parserFeatures , _parserFeaturesToChange ,
601
+ newSet , newMask );
602
+ }
603
+
604
+ /**
605
+ * Fluent factory method that will construct and return a new configuration
606
+ * object instance with specified features enabled.
607
+ *
608
+ * @since 2.7
609
+ */
610
+ public DeserializationConfig withFeatures (FormatFeature ... features )
611
+ {
612
+ int newSet = _formatReadFeatures ;
613
+ int newMask = _formatReadFeaturesToChange ;
614
+ for (FormatFeature f : features ) {
615
+ int mask = f .getMask ();
616
+ newSet |= mask ;
617
+ newMask |= mask ;
618
+ }
619
+ return ((_formatReadFeatures == newSet ) && (_formatReadFeaturesToChange == newMask )) ? this :
620
+ new DeserializationConfig (this , _mapperFeatures , _deserFeatures ,
621
+ _parserFeatures , _parserFeaturesToChange ,
622
+ newSet , newMask );
623
+ }
624
+
625
+ /**
626
+ * Fluent factory method that will construct and return a new configuration
627
+ * object instance with specified feature disabled.
628
+ *
629
+ * @since 2.7
630
+ */
631
+ public DeserializationConfig without (FormatFeature feature )
632
+ {
633
+ int newSet = _formatReadFeatures & ~feature .getMask ();
634
+ int newMask = _formatReadFeaturesToChange | feature .getMask ();
635
+ return ((_formatReadFeatures == newSet ) && (_formatReadFeaturesToChange == newMask )) ? this :
636
+ new DeserializationConfig (this , _mapperFeatures , _deserFeatures ,
637
+ _parserFeatures , _parserFeaturesToChange ,
638
+ newSet , newMask );
639
+ }
640
+
641
+ /**
642
+ * Fluent factory method that will construct and return a new configuration
643
+ * object instance with specified features disabled.
644
+ *
645
+ * @since 2.7
646
+ */
647
+ public DeserializationConfig withoutFeatures (FormatFeature ... features )
648
+ {
649
+ int newSet = _formatReadFeatures ;
650
+ int newMask = _formatReadFeaturesToChange ;
651
+ for (FormatFeature f : features ) {
652
+ int mask = f .getMask ();
653
+ newSet &= ~mask ;
654
+ newMask |= mask ;
655
+ }
656
+ return ((_formatReadFeatures == newSet ) && (_formatReadFeaturesToChange == newMask )) ? this :
657
+ new DeserializationConfig (this , _mapperFeatures , _deserFeatures ,
658
+ _parserFeatures , _parserFeaturesToChange ,
517
659
newSet , newMask );
518
660
}
519
661
0 commit comments