Skip to content

Commit 5fe4e2d

Browse files
authored
Changes wrt databind/3043 (SerializerProvider -> SerializationContext) (#331)
1 parent 50f57af commit 5fe4e2d

16 files changed

+137
-144
lines changed

datetime/src/main/java/tools/jackson/datatype/jsr310/ser/DurationSerializer.java

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,7 @@
2626
import tools.jackson.core.JsonParser;
2727
import tools.jackson.core.JsonToken;
2828

29-
import tools.jackson.databind.BeanProperty;
30-
import tools.jackson.databind.JavaType;
31-
import tools.jackson.databind.ValueSerializer;
32-
import tools.jackson.databind.SerializationFeature;
33-
import tools.jackson.databind.SerializerProvider;
29+
import tools.jackson.databind.*;
3430
import tools.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
3531
import tools.jackson.databind.jsonFormatVisitors.JsonIntegerFormatVisitor;
3632
import tools.jackson.databind.jsonFormatVisitors.JsonValueFormat;
@@ -97,15 +93,15 @@ protected SerializationFeature getTimestampsFeature() {
9793
}
9894

9995
@Override
100-
public ValueSerializer<?> createContextual(SerializerProvider prov, BeanProperty property)
96+
public ValueSerializer<?> createContextual(SerializationContext ctxt, BeanProperty property)
10197
{
102-
DurationSerializer ser = (DurationSerializer) super.createContextual(prov, property);
103-
JsonFormat.Value format = findFormatOverrides(prov, property, handledType());
98+
DurationSerializer ser = (DurationSerializer) super.createContextual(ctxt, property);
99+
JsonFormat.Value format = findFormatOverrides(ctxt, property, handledType());
104100
if (format != null && format.hasPattern()) {
105101
final String pattern = format.getPattern();
106102
DurationUnitConverter p = DurationUnitConverter.from(pattern);
107103
if (p == null) {
108-
prov.reportBadDefinition(handledType(),
104+
ctxt.reportBadDefinition(handledType(),
109105
String.format(
110106
"Bad 'pattern' definition (\"%s\") for `Duration`: expected one of [%s]",
111107
pattern, DurationUnitConverter.descForAllowed()));
@@ -116,15 +112,15 @@ public ValueSerializer<?> createContextual(SerializerProvider prov, BeanProperty
116112
}
117113

118114
@Override
119-
public void serialize(Duration duration, JsonGenerator generator, SerializerProvider provider)
115+
public void serialize(Duration duration, JsonGenerator generator, SerializationContext ctxt)
120116
throws JacksonException
121117
{
122-
if (useTimestamp(provider)) {
118+
if (useTimestamp(ctxt)) {
123119
// 03-Aug-2022, tatu: As per [modules-java8#224] need to consider
124120
// Pattern first, and only then nano-seconds/millis difference
125121
if (_durationUnitConverter != null) {
126122
generator.writeNumber(_durationUnitConverter.convert(duration));
127-
} else if (useNanoseconds(provider)) {
123+
} else if (useNanoseconds(ctxt)) {
128124
generator.writeNumber(_toNanos(duration));
129125
} else {
130126
generator.writeNumber(duration.toMillis());
@@ -157,8 +153,8 @@ protected void _acceptTimestampVisitor(JsonFormatVisitorWrapper visitor, JavaTyp
157153
JsonIntegerFormatVisitor v2 = visitor.expectIntegerFormat(typeHint);
158154
if (v2 != null) {
159155
v2.numberType(JsonParser.NumberType.LONG);
160-
SerializerProvider provider = visitor.getProvider();
161-
if ((provider != null) && useNanoseconds(provider)) {
156+
SerializationContext ctxt = visitor.getContext();
157+
if ((ctxt != null) && useNanoseconds(ctxt)) {
162158
// big number, no more specific qualifier to use...
163159
} else { // otherwise good old Unix timestamp, in milliseconds
164160
v2.format(JsonValueFormat.UTC_MILLISEC);
@@ -167,9 +163,9 @@ protected void _acceptTimestampVisitor(JsonFormatVisitorWrapper visitor, JavaTyp
167163
}
168164

169165
@Override
170-
protected JsonToken serializationShape(SerializerProvider provider) {
171-
if (useTimestamp(provider)) {
172-
if (useNanoseconds(provider)) {
166+
protected JsonToken serializationShape(SerializationContext ctxt) {
167+
if (useTimestamp(ctxt)) {
168+
if (useNanoseconds(ctxt)) {
173169
return JsonToken.VALUE_NUMBER_FLOAT;
174170
}
175171
return JsonToken.VALUE_NUMBER_INT;
@@ -183,7 +179,7 @@ protected JSR310FormattedSerializerBase<?> withFeatures(Boolean writeZoneId, Boo
183179
}
184180

185181
@Override
186-
protected DateTimeFormatter _useDateTimeFormatter(SerializerProvider prov, JsonFormat.Value format) {
182+
protected DateTimeFormatter _useDateTimeFormatter(SerializationContext ctxt, JsonFormat.Value format) {
187183
return null;
188184
}
189185
}

datetime/src/main/java/tools/jackson/datatype/jsr310/ser/InstantSerializerBase.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@
2828
import tools.jackson.core.JsonToken;
2929
import tools.jackson.core.JsonParser.NumberType;
3030

31-
import tools.jackson.databind.JavaType;
32-
import tools.jackson.databind.SerializationFeature;
33-
import tools.jackson.databind.SerializerProvider;
31+
import tools.jackson.databind.*;
3432
import tools.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
3533
import tools.jackson.databind.jsonFormatVisitors.JsonIntegerFormatVisitor;
3634
import tools.jackson.databind.jsonFormatVisitors.JsonNumberFormatVisitor;
@@ -83,11 +81,11 @@ protected abstract JSR310FormattedSerializerBase<?> withFormat(DateTimeFormatter
8381
JsonFormat.Shape shape);
8482

8583
@Override
86-
public void serialize(T value, JsonGenerator generator, SerializerProvider provider)
84+
public void serialize(T value, JsonGenerator generator, SerializationContext ctxt)
8785
throws JacksonException
8886
{
89-
if (useTimestamp(provider)) {
90-
if (useNanoseconds(provider)) {
87+
if (useTimestamp(ctxt)) {
88+
if (useNanoseconds(ctxt)) {
9189
generator.writeNumber(DecimalUtils.toBigDecimal(
9290
getEpochSeconds.applyAsLong(value), getNanoseconds.applyAsInt(value)
9391
));
@@ -97,14 +95,14 @@ public void serialize(T value, JsonGenerator generator, SerializerProvider provi
9795
return;
9896
}
9997

100-
generator.writeString(formatValue(value, provider));
98+
generator.writeString(formatValue(value, ctxt));
10199
}
102100

103101
// Overridden to ensure that our timestamp handling is as expected
104102
@Override
105103
protected void _acceptTimestampVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
106104
{
107-
if (useNanoseconds(visitor.getProvider())) {
105+
if (useNanoseconds(visitor.getContext())) {
108106
JsonNumberFormatVisitor v2 = visitor.expectNumberFormat(typeHint);
109107
if (v2 != null) {
110108
v2.numberType(NumberType.BIG_DECIMAL);
@@ -119,26 +117,26 @@ protected void _acceptTimestampVisitor(JsonFormatVisitorWrapper visitor, JavaTyp
119117
}
120118

121119
@Override
122-
protected JsonToken serializationShape(SerializerProvider provider) {
123-
if (useTimestamp(provider)) {
124-
if (useNanoseconds(provider)) {
120+
protected JsonToken serializationShape(SerializationContext ctxt) {
121+
if (useTimestamp(ctxt)) {
122+
if (useNanoseconds(ctxt)) {
125123
return JsonToken.VALUE_NUMBER_FLOAT;
126124
}
127125
return JsonToken.VALUE_NUMBER_INT;
128126
}
129127
return JsonToken.VALUE_STRING;
130128
}
131129

132-
protected String formatValue(T value, SerializerProvider provider)
130+
protected String formatValue(T value, SerializationContext ctxt)
133131
{
134132
DateTimeFormatter formatter = (_formatter != null) ? _formatter : defaultFormat;
135133
if (formatter != null) {
136134
if (formatter.getZone() == null) { // timezone set if annotated on property
137135
// If the user specified to use the context TimeZone explicitly, and the formatter provided doesn't contain a TZ
138136
// Then we use the TZ specified in the objectMapper
139-
if (provider.getConfig().hasExplicitTimeZone()
140-
&& provider.isEnabled(SerializationFeature.WRITE_DATES_WITH_CONTEXT_TIME_ZONE)) {
141-
formatter = formatter.withZone(provider.getTimeZone().toZoneId());
137+
if (ctxt.getConfig().hasExplicitTimeZone()
138+
&& ctxt.isEnabled(SerializationFeature.WRITE_DATES_WITH_CONTEXT_TIME_ZONE)) {
139+
formatter = formatter.withZone(ctxt.getTimeZone().toZoneId());
142140
}
143141
}
144142
return formatter.format(value);

datetime/src/main/java/tools/jackson/datatype/jsr310/ser/JSR310FormattedSerializerBase.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ protected JSR310FormattedSerializerBase<?> withFeatures(Boolean writeZoneId,
109109
}
110110

111111
@Override
112-
public ValueSerializer<?> createContextual(SerializerProvider prov,
112+
public ValueSerializer<?> createContextual(SerializationContext ctxt,
113113
BeanProperty property)
114114
{
115-
JsonFormat.Value format = findFormatOverrides(prov, property, handledType());
115+
JsonFormat.Value format = findFormatOverrides(ctxt, property, handledType());
116116
if (format != null) {
117117
Boolean useTimestamp = null;
118118

@@ -127,7 +127,7 @@ public ValueSerializer<?> createContextual(SerializerProvider prov,
127127

128128
// If not, do we have a pattern?
129129
if (format.hasPattern()) {
130-
dtf = _useDateTimeFormatter(prov, format);
130+
dtf = _useDateTimeFormatter(ctxt, format);
131131
}
132132
JSR310FormattedSerializerBase<?> ser = this;
133133
if ((shape != _shape) || (useTimestamp != _useTimestamp) || (dtf != _formatter)) {
@@ -150,7 +150,7 @@ public ValueSerializer<?> createContextual(SerializerProvider prov,
150150
@Override
151151
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
152152
{
153-
if (useTimestamp(visitor.getProvider())) {
153+
if (useTimestamp(visitor.getContext())) {
154154
_acceptTimestampVisitor(visitor, typeHint);
155155
} else {
156156
JsonStringFormatVisitor v2 = visitor.expectStringFormat(typeHint);
@@ -164,16 +164,16 @@ protected void _acceptTimestampVisitor(JsonFormatVisitorWrapper visitor, JavaTyp
164164
{
165165
// By default, most sub-types use JSON Array, so do this:
166166
// 28-May-2019, tatu: serialized as a List<Integer>, presumably
167-
JsonArrayFormatVisitor v2 = visitor.expectArrayFormat(_integerListType(visitor.getProvider()));
167+
JsonArrayFormatVisitor v2 = visitor.expectArrayFormat(_integerListType(visitor.getContext()));
168168
if (v2 != null) {
169169
v2.itemsFormat(JsonFormatTypes.INTEGER);
170170
}
171171
}
172172

173-
protected JavaType _integerListType(SerializerProvider prov) {
173+
protected JavaType _integerListType(SerializationContext ctxt) {
174174
JavaType t = _integerListType;
175175
if (t == null) {
176-
t = prov.getTypeFactory()
176+
t = ctxt.getTypeFactory()
177177
.constructCollectionType(List.class, Integer.class);
178178
_integerListType = t;
179179
}
@@ -194,7 +194,7 @@ protected SerializationFeature getTimestampsFeature() {
194194
return SerializationFeature.WRITE_DATES_AS_TIMESTAMPS;
195195
}
196196

197-
protected boolean useTimestamp(SerializerProvider provider) {
197+
protected boolean useTimestamp(SerializationContext ctxt) {
198198
if (_useTimestamp != null) {
199199
return _useTimestamp.booleanValue();
200200
}
@@ -207,18 +207,17 @@ protected boolean useTimestamp(SerializerProvider provider) {
207207
}
208208
}
209209
// assume that explicit formatter definition implies use of textual format
210-
return (_formatter == null) && (provider != null)
211-
&& provider.isEnabled(getTimestampsFeature());
210+
return (_formatter == null) && (ctxt != null) && ctxt.isEnabled(getTimestampsFeature());
212211
}
213212

214-
protected boolean _useTimestampExplicitOnly(SerializerProvider provider) {
213+
protected boolean _useTimestampExplicitOnly(SerializationContext ctxt) {
215214
if (_useTimestamp != null) {
216215
return _useTimestamp.booleanValue();
217216
}
218217
return false;
219218
}
220219

221-
protected boolean useNanoseconds(SerializerProvider provider) {
220+
protected boolean useNanoseconds(SerializationContext ctxt) {
222221
if (_useNanoseconds != null) {
223222
return _useNanoseconds.booleanValue();
224223
}
@@ -230,15 +229,15 @@ protected boolean useNanoseconds(SerializerProvider provider) {
230229
return true;
231230
}
232231
}
233-
return (provider != null)
234-
&& provider.isEnabled(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS);
232+
return (ctxt != null)
233+
&& ctxt.isEnabled(SerializationFeature.WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS);
235234
}
236235

237236
// modules-java8#189: to be overridden by other formatters using this as base class
238-
protected DateTimeFormatter _useDateTimeFormatter(SerializerProvider prov, JsonFormat.Value format) {
237+
protected DateTimeFormatter _useDateTimeFormatter(SerializationContext ctxt, JsonFormat.Value format) {
239238
DateTimeFormatter dtf;
240239
final String pattern = format.getPattern();
241-
final Locale locale = format.hasLocale() ? format.getLocale() : prov.getLocale();
240+
final Locale locale = format.hasLocale() ? format.getLocale() : ctxt.getLocale();
242241
if (locale == null) {
243242
dtf = DateTimeFormatter.ofPattern(pattern);
244243
} else {

datetime/src/main/java/tools/jackson/datatype/jsr310/ser/JSR310SerializerBase.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import tools.jackson.core.JsonToken;
66
import tools.jackson.core.type.WritableTypeId;
77

8-
import tools.jackson.databind.SerializerProvider;
8+
import tools.jackson.databind.SerializationContext;
99
import tools.jackson.databind.jsontype.TypeSerializer;
1010
import tools.jackson.databind.ser.std.StdSerializer;
1111

@@ -21,7 +21,7 @@ protected JSR310SerializerBase(Class<?> supportedType) {
2121
}
2222

2323
@Override
24-
public void serializeWithType(T value, JsonGenerator g, SerializerProvider ctxt,
24+
public void serializeWithType(T value, JsonGenerator g, SerializationContext ctxt,
2525
TypeSerializer typeSer)
2626
throws JacksonException
2727
{
@@ -36,5 +36,5 @@ public void serializeWithType(T value, JsonGenerator g, SerializerProvider ctxt,
3636
* shape of value during serialization; needed to know how type id is to be
3737
* serialized.
3838
*/
39-
protected abstract JsonToken serializationShape(SerializerProvider provider);
39+
protected abstract JsonToken serializationShape(SerializationContext ctxt);
4040
}

datetime/src/main/java/tools/jackson/datatype/jsr310/ser/LocalDateSerializer.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@ protected LocalDateSerializer withFormat(DateTimeFormatter dtf,
6060
}
6161

6262
@Override
63-
public void serialize(LocalDate date, JsonGenerator g, SerializerProvider provider)
63+
public void serialize(LocalDate date, JsonGenerator g, SerializationContext ctxt)
6464
throws JacksonException
6565
{
66-
if (useTimestamp(provider)) {
66+
if (useTimestamp(ctxt)) {
6767
if (_shape == JsonFormat.Shape.NUMBER_INT) {
6868
g.writeNumber(date.toEpochDay());
6969
} else {
7070
g.writeStartArray();
71-
_serializeAsArrayContents(date, g, provider);
71+
_serializeAsArrayContents(date, g, ctxt);
7272
g.writeEndArray();
7373
}
7474
} else {
@@ -78,7 +78,7 @@ public void serialize(LocalDate date, JsonGenerator g, SerializerProvider provid
7878

7979
@Override
8080
public void serializeWithType(LocalDate value, JsonGenerator g,
81-
SerializerProvider ctxt, TypeSerializer typeSer)
81+
SerializationContext ctxt, TypeSerializer typeSer)
8282
throws JacksonException
8383
{
8484
WritableTypeId typeIdDef = typeSer.writeTypePrefix(g, ctxt,
@@ -96,7 +96,7 @@ public void serializeWithType(LocalDate value, JsonGenerator g,
9696
}
9797

9898
protected void _serializeAsArrayContents(LocalDate value, JsonGenerator g,
99-
SerializerProvider provider)
99+
SerializationContext ctxt)
100100
throws JacksonException
101101
{
102102
g.writeNumber(value.getYear());
@@ -107,8 +107,8 @@ protected void _serializeAsArrayContents(LocalDate value, JsonGenerator g,
107107
@Override
108108
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint)
109109
{
110-
SerializerProvider provider = visitor.getProvider();
111-
boolean useTimestamp = (provider != null) && useTimestamp(provider);
110+
SerializationContext ctxt = visitor.getContext();
111+
boolean useTimestamp = (ctxt != null) && useTimestamp(ctxt);
112112
if (useTimestamp) {
113113
_acceptTimestampVisitor(visitor, typeHint);
114114
} else {
@@ -120,8 +120,8 @@ public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType t
120120
}
121121

122122
@Override // since 2.9
123-
protected JsonToken serializationShape(SerializerProvider provider) {
124-
if (useTimestamp(provider)) {
123+
protected JsonToken serializationShape(SerializationContext ctxt) {
124+
if (useTimestamp(ctxt)) {
125125
if (_shape == JsonFormat.Shape.NUMBER_INT) {
126126
return JsonToken.VALUE_NUMBER_INT;
127127
}

0 commit comments

Comments
 (0)