Skip to content

Commit c0ceefd

Browse files
committed
Refactoring to change how default visibility settings are handled, to prepare for #1347
1 parent 880c64b commit c0ceefd

File tree

9 files changed

+77
-107
lines changed

9 files changed

+77
-107
lines changed

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

+18-9
Original file line numberDiff line numberDiff line change
@@ -291,16 +291,14 @@ public boolean useForType(JavaType t)
291291
// 16-May-2009, tatu: Ditto ^^^
292292
protected final static AnnotationIntrospector DEFAULT_ANNOTATION_INTROSPECTOR = new JacksonAnnotationIntrospector();
293293

294-
protected final static VisibilityChecker<?> STD_VISIBILITY_CHECKER = VisibilityChecker.Std.defaultInstance();
295-
296294
/**
297295
* Base settings contain defaults used for all {@link ObjectMapper}
298296
* instances.
299297
*/
300298
protected final static BaseSettings DEFAULT_BASE = new BaseSettings(
301299
null, // can not share global ClassIntrospector any more (2.5+)
302300
DEFAULT_ANNOTATION_INTROSPECTOR,
303-
STD_VISIBILITY_CHECKER, null, TypeFactory.defaultInstance(),
301+
null, TypeFactory.defaultInstance(),
304302
null, StdDateFormat.instance, null,
305303
Locale.getDefault(),
306304
null, // to indicate "use Jackson default TimeZone" (UTC since Jackson 2.7)
@@ -1225,10 +1223,8 @@ public void setVisibilityChecker(VisibilityChecker<?> vc) {
12251223
*
12261224
* @since 2.6
12271225
*/
1228-
@SuppressWarnings("deprecation")
12291226
public ObjectMapper setVisibility(VisibilityChecker<?> vc) {
1230-
_deserializationConfig = _deserializationConfig.with(vc);
1231-
_serializationConfig = _serializationConfig.with(vc);
1227+
_configOverrides.setDefaultVisibility(vc);
12321228
return this;
12331229
}
12341230

@@ -1256,11 +1252,11 @@ public ObjectMapper setVisibility(VisibilityChecker<?> vc) {
12561252
* @return Modified mapper instance (that is, "this"), to allow chaining
12571253
* of configuration calls
12581254
*/
1259-
@SuppressWarnings("deprecation")
12601255
public ObjectMapper setVisibility(PropertyAccessor forMethod, JsonAutoDetect.Visibility visibility)
12611256
{
1262-
_deserializationConfig = _deserializationConfig.withVisibility(forMethod, visibility);
1263-
_serializationConfig = _serializationConfig.withVisibility(forMethod, visibility);
1257+
VisibilityChecker<?> vc = _configOverrides.getDefaultVisibility();
1258+
vc = vc.withVisibility(forMethod, visibility);
1259+
_configOverrides.setDefaultVisibility(vc);
12641260
return this;
12651261
}
12661262

@@ -1404,6 +1400,19 @@ public ObjectMapper setDefaultSetterInfo(JsonSetter.Value v) {
14041400
return this;
14051401
}
14061402

1403+
/**
1404+
* Method for setting auto-detection visibility definition
1405+
* defaults, which are in effect unless overridden by
1406+
* annotations (like <code>JsonAutoDetect</code>) or per-type
1407+
* visibility overrides.
1408+
*
1409+
* @since 2.9
1410+
*/
1411+
public ObjectMapper setDefaultVisibility(JsonAutoDetect.Value vis) {
1412+
_configOverrides.setDefaultVisibility(VisibilityChecker.Std.construct(vis));
1413+
return this;
1414+
}
1415+
14071416
/*
14081417
/**********************************************************
14091418
/* Type information configuration

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

+13-39
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
import java.util.Locale;
55
import java.util.TimeZone;
66

7-
import com.fasterxml.jackson.annotation.JsonAutoDetect;
8-
import com.fasterxml.jackson.annotation.PropertyAccessor;
97
import com.fasterxml.jackson.core.Base64Variant;
108
import com.fasterxml.jackson.databind.*;
119
import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
1210
import com.fasterxml.jackson.databind.introspect.ClassIntrospector;
13-
import com.fasterxml.jackson.databind.introspect.VisibilityChecker;
1411
import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
1512
import com.fasterxml.jackson.databind.type.TypeFactory;
1613
import com.fasterxml.jackson.databind.util.StdDateFormat;
@@ -54,17 +51,6 @@ public final class BaseSettings
5451
*/
5552
protected final AnnotationIntrospector _annotationIntrospector;
5653

57-
/**
58-
* Object used for determining whether specific property elements
59-
* (method, constructors, fields) can be auto-detected based on
60-
* their visibility (access modifiers). Can be changed to allow
61-
* different minimum visibility levels for auto-detection. Note
62-
* that this is the global handler; individual types (classes)
63-
* can further override active checker used (using
64-
* {@link JsonAutoDetect} annotation)
65-
*/
66-
protected final VisibilityChecker<?> _visibilityChecker;
67-
6854
/**
6955
* Custom property naming strategy in use, if any.
7056
*/
@@ -145,13 +131,12 @@ public final class BaseSettings
145131
*/
146132

147133
public BaseSettings(ClassIntrospector ci, AnnotationIntrospector ai,
148-
VisibilityChecker<?> vc, PropertyNamingStrategy pns, TypeFactory tf,
134+
PropertyNamingStrategy pns, TypeFactory tf,
149135
TypeResolverBuilder<?> typer, DateFormat dateFormat, HandlerInstantiator hi,
150136
Locale locale, TimeZone tz, Base64Variant defaultBase64)
151137
{
152138
_classIntrospector = ci;
153139
_annotationIntrospector = ai;
154-
_visibilityChecker = vc;
155140
_propertyNamingStrategy = pns;
156141
_typeFactory = tf;
157142
_typeResolverBuilder = typer;
@@ -172,7 +157,7 @@ public BaseSettings withClassIntrospector(ClassIntrospector ci) {
172157
if (_classIntrospector == ci) {
173158
return this;
174159
}
175-
return new BaseSettings(ci, _annotationIntrospector, _visibilityChecker, _propertyNamingStrategy, _typeFactory,
160+
return new BaseSettings(ci, _annotationIntrospector, _propertyNamingStrategy, _typeFactory,
176161
_typeResolverBuilder, _dateFormat, _handlerInstantiator, _locale,
177162
_timeZone, _defaultBase64);
178163
}
@@ -181,7 +166,7 @@ public BaseSettings withAnnotationIntrospector(AnnotationIntrospector ai) {
181166
if (_annotationIntrospector == ai) {
182167
return this;
183168
}
184-
return new BaseSettings(_classIntrospector, ai, _visibilityChecker, _propertyNamingStrategy, _typeFactory,
169+
return new BaseSettings(_classIntrospector, ai, _propertyNamingStrategy, _typeFactory,
185170
_typeResolverBuilder, _dateFormat, _handlerInstantiator, _locale,
186171
_timeZone, _defaultBase64);
187172
}
@@ -193,29 +178,22 @@ public BaseSettings withInsertedAnnotationIntrospector(AnnotationIntrospector ai
193178
public BaseSettings withAppendedAnnotationIntrospector(AnnotationIntrospector ai) {
194179
return withAnnotationIntrospector(AnnotationIntrospectorPair.create(_annotationIntrospector, ai));
195180
}
196-
197-
public BaseSettings withVisibilityChecker(VisibilityChecker<?> vc) {
198-
if (_visibilityChecker == vc) {
199-
return this;
200-
}
201-
return new BaseSettings(_classIntrospector, _annotationIntrospector, vc, _propertyNamingStrategy, _typeFactory,
202-
_typeResolverBuilder, _dateFormat, _handlerInstantiator, _locale,
203-
_timeZone, _defaultBase64);
204-
}
205181

182+
/*
206183
public BaseSettings withVisibility(PropertyAccessor forMethod, JsonAutoDetect.Visibility visibility) {
207184
return new BaseSettings(_classIntrospector, _annotationIntrospector,
208185
_visibilityChecker.withVisibility(forMethod, visibility),
209186
_propertyNamingStrategy, _typeFactory,
210187
_typeResolverBuilder, _dateFormat, _handlerInstantiator, _locale,
211188
_timeZone, _defaultBase64);
212189
}
190+
*/
213191

214192
public BaseSettings withPropertyNamingStrategy(PropertyNamingStrategy pns) {
215193
if (_propertyNamingStrategy == pns) {
216194
return this;
217195
}
218-
return new BaseSettings(_classIntrospector, _annotationIntrospector, _visibilityChecker, pns, _typeFactory,
196+
return new BaseSettings(_classIntrospector, _annotationIntrospector, pns, _typeFactory,
219197
_typeResolverBuilder, _dateFormat, _handlerInstantiator, _locale,
220198
_timeZone, _defaultBase64);
221199
}
@@ -224,7 +202,7 @@ public BaseSettings withTypeFactory(TypeFactory tf) {
224202
if (_typeFactory == tf) {
225203
return this;
226204
}
227-
return new BaseSettings(_classIntrospector, _annotationIntrospector, _visibilityChecker, _propertyNamingStrategy, tf,
205+
return new BaseSettings(_classIntrospector, _annotationIntrospector, _propertyNamingStrategy, tf,
228206
_typeResolverBuilder, _dateFormat, _handlerInstantiator, _locale,
229207
_timeZone, _defaultBase64);
230208
}
@@ -233,7 +211,7 @@ public BaseSettings withTypeResolverBuilder(TypeResolverBuilder<?> typer) {
233211
if (_typeResolverBuilder == typer) {
234212
return this;
235213
}
236-
return new BaseSettings(_classIntrospector, _annotationIntrospector, _visibilityChecker, _propertyNamingStrategy, _typeFactory,
214+
return new BaseSettings(_classIntrospector, _annotationIntrospector, _propertyNamingStrategy, _typeFactory,
237215
typer, _dateFormat, _handlerInstantiator, _locale,
238216
_timeZone, _defaultBase64);
239217
}
@@ -247,7 +225,7 @@ public BaseSettings withDateFormat(DateFormat df) {
247225
if ((df != null) && hasExplicitTimeZone()) {
248226
df = _force(df, _timeZone);
249227
}
250-
return new BaseSettings(_classIntrospector, _annotationIntrospector, _visibilityChecker, _propertyNamingStrategy, _typeFactory,
228+
return new BaseSettings(_classIntrospector, _annotationIntrospector, _propertyNamingStrategy, _typeFactory,
251229
_typeResolverBuilder, df, _handlerInstantiator, _locale,
252230
_timeZone, _defaultBase64);
253231
}
@@ -256,7 +234,7 @@ public BaseSettings withHandlerInstantiator(HandlerInstantiator hi) {
256234
if (_handlerInstantiator == hi) {
257235
return this;
258236
}
259-
return new BaseSettings(_classIntrospector, _annotationIntrospector, _visibilityChecker, _propertyNamingStrategy, _typeFactory,
237+
return new BaseSettings(_classIntrospector, _annotationIntrospector, _propertyNamingStrategy, _typeFactory,
260238
_typeResolverBuilder, _dateFormat, hi, _locale,
261239
_timeZone, _defaultBase64);
262240
}
@@ -265,7 +243,7 @@ public BaseSettings with(Locale l) {
265243
if (_locale == l) {
266244
return this;
267245
}
268-
return new BaseSettings(_classIntrospector, _annotationIntrospector, _visibilityChecker, _propertyNamingStrategy, _typeFactory,
246+
return new BaseSettings(_classIntrospector, _annotationIntrospector, _propertyNamingStrategy, _typeFactory,
269247
_typeResolverBuilder, _dateFormat, _handlerInstantiator, l,
270248
_timeZone, _defaultBase64);
271249
}
@@ -286,7 +264,7 @@ public BaseSettings with(TimeZone tz)
286264

287265
DateFormat df = _force(_dateFormat, tz);
288266
return new BaseSettings(_classIntrospector, _annotationIntrospector,
289-
_visibilityChecker, _propertyNamingStrategy, _typeFactory,
267+
_propertyNamingStrategy, _typeFactory,
290268
_typeResolverBuilder, df, _handlerInstantiator, _locale,
291269
tz, _defaultBase64);
292270
}
@@ -299,7 +277,7 @@ public BaseSettings with(Base64Variant base64) {
299277
return this;
300278
}
301279
return new BaseSettings(_classIntrospector, _annotationIntrospector,
302-
_visibilityChecker, _propertyNamingStrategy, _typeFactory,
280+
_propertyNamingStrategy, _typeFactory,
303281
_typeResolverBuilder, _dateFormat, _handlerInstantiator, _locale,
304282
_timeZone, base64);
305283
}
@@ -318,10 +296,6 @@ public AnnotationIntrospector getAnnotationIntrospector() {
318296
return _annotationIntrospector;
319297
}
320298

321-
public VisibilityChecker<?> getVisibilityChecker() {
322-
return _visibilityChecker;
323-
}
324-
325299
public PropertyNamingStrategy getPropertyNamingStrategy() {
326300
return _propertyNamingStrategy;
327301
}

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

+6-3
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,19 @@ public ConfigOverrides() {
4848
this(null,
4949
// !!! TODO: change to (ALWAYS, ALWAYS)?
5050
JsonInclude.Value.empty(),
51-
JsonSetter.Value.empty()
51+
JsonSetter.Value.empty(),
52+
VisibilityChecker.Std.defaultInstance()
5253
);
5354
}
5455

5556
protected ConfigOverrides(Map<Class<?>, MutableConfigOverride> overrides,
5657
JsonInclude.Value defIncl,
57-
JsonSetter.Value defSetter) {
58+
JsonSetter.Value defSetter,
59+
VisibilityChecker<?> defVisibility) {
5860
_overrides = overrides;
5961
_defaultInclusion = defIncl;
6062
_defaultSetterInfo = defSetter;
63+
_visibilityChecker = defVisibility;
6164
}
6265

6366
public ConfigOverrides copy()
@@ -70,7 +73,7 @@ public ConfigOverrides copy()
7073
newOverrides.put(entry.getKey(), entry.getValue().copy());
7174
}
7275
return new ConfigOverrides(newOverrides,
73-
_defaultInclusion, _defaultSetterInfo);
76+
_defaultInclusion, _defaultSetterInfo, _visibilityChecker);
7477
}
7578

7679
/*

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

+2-22
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.util.TimeZone;
66

77
import com.fasterxml.jackson.annotation.*;
8-
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
98
import com.fasterxml.jackson.core.Base64Variant;
109
import com.fasterxml.jackson.core.SerializableString;
1110
import com.fasterxml.jackson.core.io.SerializedString;
@@ -249,26 +248,7 @@ public AnnotationIntrospector getAnnotationIntrospector() {
249248
* can further override active checker used (using
250249
* {@link JsonAutoDetect} annotation)
251250
*/
252-
public VisibilityChecker<?> getDefaultVisibilityChecker() {
253-
VisibilityChecker<?> vchecker = _base.getVisibilityChecker();
254-
// then global overrides (disabling)
255-
if (!isEnabled(MapperFeature.AUTO_DETECT_SETTERS)) {
256-
vchecker = vchecker.withSetterVisibility(Visibility.NONE);
257-
}
258-
if (!isEnabled(MapperFeature.AUTO_DETECT_CREATORS)) {
259-
vchecker = vchecker.withCreatorVisibility(Visibility.NONE);
260-
}
261-
if (!isEnabled(MapperFeature.AUTO_DETECT_GETTERS)) {
262-
vchecker = vchecker.withGetterVisibility(Visibility.NONE);
263-
}
264-
if (!isEnabled(MapperFeature.AUTO_DETECT_IS_GETTERS)) {
265-
vchecker = vchecker.withIsGetterVisibility(Visibility.NONE);
266-
}
267-
if (!isEnabled(MapperFeature.AUTO_DETECT_FIELDS)) {
268-
vchecker = vchecker.withFieldVisibility(Visibility.NONE);
269-
}
270-
return vchecker;
271-
}
251+
public abstract VisibilityChecker<?> getDefaultVisibilityChecker();
272252

273253
public final PropertyNamingStrategy getPropertyNamingStrategy() {
274254
return _base.getPropertyNamingStrategy();
@@ -277,7 +257,7 @@ public final PropertyNamingStrategy getPropertyNamingStrategy() {
277257
public final HandlerInstantiator getHandlerInstantiator() {
278258
return _base.getHandlerInstantiator();
279259
}
280-
260+
281261
/*
282262
/**********************************************************
283263
/* Configuration: type and subtype handling

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

+24-17
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.util.*;
55

66
import com.fasterxml.jackson.annotation.*;
7-
7+
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
88
import com.fasterxml.jackson.core.Base64Variant;
99

1010
import com.fasterxml.jackson.databind.*;
@@ -535,22 +535,6 @@ public T withRootName(String rootName) {
535535
*/
536536
public abstract T withView(Class<?> view);
537537

538-
/**
539-
* @deprecated Since 2.9 use configuration methods in {@link ObjectMapper}
540-
*/
541-
@Deprecated
542-
public T with(VisibilityChecker<?> vc) {
543-
return _withBase(_base.withVisibilityChecker(vc));
544-
}
545-
546-
/**
547-
* @deprecated Since 2.9 use configuration methods in {@link ObjectMapper}
548-
*/
549-
@Deprecated
550-
public T withVisibility(PropertyAccessor forMethod, JsonAutoDetect.Visibility visibility) {
551-
return _withBase(_base.withVisibility(forMethod, visibility));
552-
}
553-
554538
/*
555539
/**********************************************************
556540
/* Simple accessors
@@ -592,6 +576,29 @@ public final ContextAttributes getAttributes() {
592576
return _attributes;
593577
}
594578

579+
@Override
580+
public VisibilityChecker<?> getDefaultVisibilityChecker()
581+
{
582+
VisibilityChecker<?> vchecker = _configOverrides.getDefaultVisibility();
583+
// then global overrides (disabling)
584+
if (!isEnabled(MapperFeature.AUTO_DETECT_SETTERS)) {
585+
vchecker = vchecker.withSetterVisibility(Visibility.NONE);
586+
}
587+
if (!isEnabled(MapperFeature.AUTO_DETECT_CREATORS)) {
588+
vchecker = vchecker.withCreatorVisibility(Visibility.NONE);
589+
}
590+
if (!isEnabled(MapperFeature.AUTO_DETECT_GETTERS)) {
591+
vchecker = vchecker.withGetterVisibility(Visibility.NONE);
592+
}
593+
if (!isEnabled(MapperFeature.AUTO_DETECT_IS_GETTERS)) {
594+
vchecker = vchecker.withIsGetterVisibility(Visibility.NONE);
595+
}
596+
if (!isEnabled(MapperFeature.AUTO_DETECT_FIELDS)) {
597+
vchecker = vchecker.withFieldVisibility(Visibility.NONE);
598+
}
599+
return vchecker;
600+
}
601+
595602
/*
596603
/**********************************************************
597604
/* Configuration access; default/overrides

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

+7
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,13 @@ public Std(Visibility v)
230230
}
231231
}
232232

233+
/**
234+
* @since 2.9
235+
*/
236+
public static Std construct(JsonAutoDetect.Value vis) {
237+
return DEFAULT.withOverrides(vis);
238+
}
239+
233240
/*
234241
/********************************************************
235242
/* Builder/fluent methods for instantiating configured

0 commit comments

Comments
 (0)