@@ -29,14 +29,15 @@ public interface VisibilityChecker<T extends VisibilityChecker<T>>
29
29
public T with (JsonAutoDetect ann );
30
30
31
31
/**
32
- * Method that can be used for merging default values from given
33
- * source with values from this instance, and either return `this`
34
- * instance (if no changes), or a new instance with applicable defaults.
32
+ * Method that can be used for merging default values from `this`
33
+ * instance with specified overrides; and either return `this`
34
+ * if overrides had no effect (that is, result would be equal),
35
+ * or a new instance with merged visibility settings.
35
36
*
36
37
* @since 2.9
37
38
*/
38
- public T withDefaults ( VisibilityChecker <?> defaults );
39
-
39
+ public T withOverrides ( JsonAutoDetect . Value vis );
40
+
40
41
/**
41
42
* Builder method that will create and return an instance that has specified
42
43
* {@link Visibility} value to use for all property elements.
@@ -149,23 +150,7 @@ public interface VisibilityChecker<T extends VisibilityChecker<T>>
149
150
* methods. As a result, type is declared is funky recursive generic
150
151
* type, to allow for sub-classing of build methods with property type
151
152
* co-variance.
152
- *<p>
153
- * Note on <code>JsonAutoDetect</code> annotation: it is used to
154
- * access default minimum visibility access definitions.
155
153
*/
156
- @ JsonAutoDetect (
157
- getterVisibility = Visibility .PUBLIC_ONLY ,
158
- isGetterVisibility = Visibility .PUBLIC_ONLY ,
159
- setterVisibility = Visibility .ANY ,
160
- /**
161
- * By default, all matching single-arg constructed are found,
162
- * regardless of visibility. Does not apply to factory methods,
163
- * they can not be auto-detected; ditto for multiple-argument
164
- * constructors.
165
- */
166
- creatorVisibility = Visibility .ANY ,
167
- fieldVisibility = Visibility .PUBLIC_ONLY
168
- )
169
154
public static class Std
170
155
implements VisibilityChecker <Std >,
171
156
java .io .Serializable
@@ -176,7 +161,13 @@ public static class Std
176
161
* This is the canonical base instance, configured with default
177
162
* visibility values
178
163
*/
179
- protected final static Std DEFAULT = new Std (Std .class .getAnnotation (JsonAutoDetect .class ));
164
+ protected final static Std DEFAULT = new Std (
165
+ Visibility .PUBLIC_ONLY , // getter
166
+ Visibility .PUBLIC_ONLY , // is-getter
167
+ Visibility .ANY , // setter
168
+ Visibility .ANY , // creator -- legacy, to support single-arg ctors
169
+ Visibility .PUBLIC_ONLY // field
170
+ );
180
171
181
172
protected final Visibility _getterMinLevel ;
182
173
protected final Visibility _isGetterMinLevel ;
@@ -246,44 +237,49 @@ public Std(Visibility v)
246
237
/********************************************************
247
238
*/
248
239
240
+ protected Std _with (Visibility g , Visibility isG , Visibility s ,
241
+ Visibility cr , Visibility f ) {
242
+ if ((g == _getterMinLevel )
243
+ && (isG == _isGetterMinLevel )
244
+ && (s == _setterMinLevel )
245
+ && (cr == _creatorMinLevel )
246
+ && (f == _fieldMinLevel )
247
+ ) {
248
+ return this ;
249
+ }
250
+ return new Std (g , isG , s , cr , f );
251
+ }
252
+
249
253
@ Override
250
254
public Std with (JsonAutoDetect ann )
251
255
{
252
256
Std curr = this ;
253
257
if (ann != null ) {
254
- curr = curr .withGetterVisibility (ann .getterVisibility ());
255
- curr = curr .withIsGetterVisibility (ann .isGetterVisibility ());
256
- curr = curr .withSetterVisibility (ann .setterVisibility ());
257
- curr = curr .withCreatorVisibility (ann .creatorVisibility ());
258
- curr = curr .withFieldVisibility (ann .fieldVisibility ());
258
+ return _with (
259
+ _defaultOrOverride (_getterMinLevel , ann .getterVisibility ()),
260
+ _defaultOrOverride (_isGetterMinLevel , ann .isGetterVisibility ()),
261
+ _defaultOrOverride (_setterMinLevel , ann .setterVisibility ()),
262
+ _defaultOrOverride (_creatorMinLevel , ann .creatorVisibility ()),
263
+ _defaultOrOverride (_fieldMinLevel , ann .fieldVisibility ())
264
+ );
259
265
}
260
266
return curr ;
261
267
}
262
268
263
- @ Override
264
- public Std withDefaults ( VisibilityChecker <?> defaults0 )
269
+ @ Override // since 2.9
270
+ public Std withOverrides ( JsonAutoDetect . Value vis )
265
271
{
266
- if (defaults0 == null ) {
267
- return this ;
268
- }
269
- // !!! 25-Nov-2016, tatu: not optimal, but without generic access
270
- // best we can do. Plan is to rewrite the whole thing for 3.x
271
- Std defaults = (Std ) defaults0 ;
272
- Visibility getterMin = _defaultOrOverride (defaults ._getterMinLevel , _getterMinLevel );
273
- Visibility isGetterMin = _defaultOrOverride (defaults ._isGetterMinLevel , _isGetterMinLevel );
274
- Visibility setterMin = _defaultOrOverride (defaults ._setterMinLevel , _setterMinLevel );
275
- Visibility creatorMin = _defaultOrOverride (defaults ._creatorMinLevel , _creatorMinLevel );
276
- Visibility fieldMin = _defaultOrOverride (defaults ._fieldMinLevel , _fieldMinLevel );
277
-
278
- if ((getterMin == _getterMinLevel )
279
- && (isGetterMin == _isGetterMinLevel )
280
- && (setterMin == _setterMinLevel )
281
- && (creatorMin == _creatorMinLevel )
282
- && (fieldMin == _fieldMinLevel )
283
- ) {
284
- return this ;
272
+ Std curr = this ;
273
+ if (vis != null ) {
274
+ return _with (
275
+ _defaultOrOverride (_getterMinLevel , vis .getGetterVisibility ()),
276
+ _defaultOrOverride (_isGetterMinLevel , vis .getIsGetterVisibility ()),
277
+ _defaultOrOverride (_setterMinLevel , vis .getSetterVisibility ()),
278
+ _defaultOrOverride (_creatorMinLevel , vis .getCreatorVisibility ()),
279
+ _defaultOrOverride (_fieldMinLevel , vis .getFieldVisibility ())
280
+ );
285
281
}
286
- return new Std ( getterMin , isGetterMin , setterMin , creatorMin , fieldMin ) ;
282
+ return curr ;
287
283
}
288
284
289
285
private Visibility _defaultOrOverride (Visibility defaults , Visibility override ) {
@@ -292,7 +288,7 @@ private Visibility _defaultOrOverride(Visibility defaults, Visibility override)
292
288
}
293
289
return override ;
294
290
}
295
-
291
+
296
292
@ Override
297
293
public Std with (Visibility v )
298
294
{
@@ -327,39 +323,39 @@ public Std withVisibility(PropertyAccessor method, Visibility v)
327
323
328
324
@ Override
329
325
public Std withGetterVisibility (Visibility v ) {
330
- if (v == Visibility .DEFAULT ) v = DEFAULT ._getterMinLevel ;
326
+ if (v == Visibility .DEFAULT ) v = DEFAULT ._getterMinLevel ;
331
327
if (_getterMinLevel == v ) return this ;
332
328
return new Std (v , _isGetterMinLevel , _setterMinLevel , _creatorMinLevel , _fieldMinLevel );
333
329
}
334
330
335
331
@ Override
336
332
public Std withIsGetterVisibility (Visibility v ) {
337
- if (v == Visibility .DEFAULT ) v = DEFAULT ._isGetterMinLevel ;
333
+ if (v == Visibility .DEFAULT ) v = DEFAULT ._isGetterMinLevel ;
338
334
if (_isGetterMinLevel == v ) return this ;
339
335
return new Std (_getterMinLevel , v , _setterMinLevel , _creatorMinLevel , _fieldMinLevel );
340
336
}
341
337
342
338
@ Override
343
339
public Std withSetterVisibility (Visibility v ) {
344
- if (v == Visibility .DEFAULT ) v = DEFAULT ._setterMinLevel ;
340
+ if (v == Visibility .DEFAULT ) v = DEFAULT ._setterMinLevel ;
345
341
if (_setterMinLevel == v ) return this ;
346
342
return new Std (_getterMinLevel , _isGetterMinLevel , v , _creatorMinLevel , _fieldMinLevel );
347
343
}
348
-
344
+
349
345
@ Override
350
346
public Std withCreatorVisibility (Visibility v ) {
351
- if (v == Visibility .DEFAULT ) v = DEFAULT ._creatorMinLevel ;
347
+ if (v == Visibility .DEFAULT ) v = DEFAULT ._creatorMinLevel ;
352
348
if (_creatorMinLevel == v ) return this ;
353
349
return new Std (_getterMinLevel , _isGetterMinLevel , _setterMinLevel , v , _fieldMinLevel );
354
350
}
355
-
351
+
356
352
@ Override
357
353
public Std withFieldVisibility (Visibility v ) {
358
354
if (v == Visibility .DEFAULT ) v = DEFAULT ._fieldMinLevel ;
359
355
if (_fieldMinLevel == v ) return this ;
360
356
return new Std (_getterMinLevel , _isGetterMinLevel , _setterMinLevel , _creatorMinLevel , v );
361
357
}
362
-
358
+
363
359
/*
364
360
/********************************************************
365
361
/* Public API impl
@@ -370,7 +366,7 @@ public Std withFieldVisibility(Visibility v) {
370
366
public boolean isCreatorVisible (Member m ) {
371
367
return _creatorMinLevel .isVisible (m );
372
368
}
373
-
369
+
374
370
@ Override
375
371
public boolean isCreatorVisible (AnnotatedMember m ) {
376
372
return isCreatorVisible (m .getMember ());
@@ -380,17 +376,17 @@ public boolean isCreatorVisible(AnnotatedMember m) {
380
376
public boolean isFieldVisible (Field f ) {
381
377
return _fieldMinLevel .isVisible (f );
382
378
}
383
-
379
+
384
380
@ Override
385
381
public boolean isFieldVisible (AnnotatedField f ) {
386
382
return isFieldVisible (f .getAnnotated ());
387
383
}
388
-
384
+
389
385
@ Override
390
386
public boolean isGetterVisible (Method m ) {
391
387
return _getterMinLevel .isVisible (m );
392
388
}
393
-
389
+
394
390
@ Override
395
391
public boolean isGetterVisible (AnnotatedMethod m ) {
396
392
return isGetterVisible (m .getAnnotated ());
0 commit comments