@@ -216,20 +216,30 @@ public boolean isExplicitlyNamed() {
216
216
*/
217
217
218
218
@ Override
219
- public PropertyMetadata getMetadata () {
219
+ public PropertyMetadata getMetadata ()
220
+ {
220
221
if (_metadata == null ) {
221
- final Boolean b = _findRequired ();
222
- final String desc = _findDescription ();
223
- final Integer idx = _findIndex ();
224
- final String def = _findDefaultValue ();
225
- if (b == null && idx == null && def == null ) {
226
- _metadata = (desc == null ) ? PropertyMetadata .STD_REQUIRED_OR_OPTIONAL
227
- : PropertyMetadata .STD_REQUIRED_OR_OPTIONAL .withDescription (desc );
222
+ // 20-Jun-2020, tatu: Unfortunately strict checks lead to [databind#2757]
223
+ // so we will need to try to avoid them at this point
224
+ final AnnotatedMember prim = getPrimaryMemberUnchecked ();
225
+
226
+ if (prim == null ) {
227
+ _metadata = PropertyMetadata .STD_REQUIRED_OR_OPTIONAL ;
228
228
} else {
229
- _metadata = PropertyMetadata .construct (b , desc , idx , def );
230
- }
231
- if (!_forSerialization ) {
232
- _metadata = _getSetterInfo (_metadata );
229
+ final Boolean b = _annotationIntrospector .hasRequiredMarker (prim );
230
+ final String desc = _annotationIntrospector .findPropertyDescription (prim );
231
+ final Integer idx = _annotationIntrospector .findPropertyIndex (prim );
232
+ final String def = _annotationIntrospector .findPropertyDefaultValue (prim );
233
+
234
+ if (b == null && idx == null && def == null ) {
235
+ _metadata = (desc == null ) ? PropertyMetadata .STD_REQUIRED_OR_OPTIONAL
236
+ : PropertyMetadata .STD_REQUIRED_OR_OPTIONAL .withDescription (desc );
237
+ } else {
238
+ _metadata = PropertyMetadata .construct (b , desc , idx , def );
239
+ }
240
+ if (!_forSerialization ) {
241
+ _metadata = _getSetterInfo (_metadata , prim );
242
+ }
233
243
}
234
244
}
235
245
return _metadata ;
@@ -241,7 +251,8 @@ public PropertyMetadata getMetadata() {
241
251
* of property value, and handling of incoming nulls.
242
252
* Only called for deserialization purposes.
243
253
*/
244
- protected PropertyMetadata _getSetterInfo (PropertyMetadata metadata )
254
+ protected PropertyMetadata _getSetterInfo (PropertyMetadata metadata ,
255
+ AnnotatedMember primary )
245
256
{
246
257
boolean needMerge = true ;
247
258
Nulls valueNulls = null ;
@@ -250,24 +261,21 @@ protected PropertyMetadata _getSetterInfo(PropertyMetadata metadata)
250
261
// Slightly confusing: first, annotations should be accessed via primary member
251
262
// (mutator); but accessor is needed for actual merge operation. So
252
263
253
- // 20-Jun-2020, tatu: Unfortunately strict checks lead to [databind#2757]
254
- // so we will need to try to avoid them at this point
255
- AnnotatedMember prim = getPrimaryMemberUnchecked ();
256
264
AnnotatedMember acc = getAccessor ();
257
265
258
- if (prim != null ) {
266
+ if (primary != null ) {
259
267
// Ok, first: does property itself have something to say?
260
268
if (_annotationIntrospector != null ) {
261
269
if (acc != null ) {
262
- Boolean b = _annotationIntrospector .findMergeInfo (prim );
270
+ Boolean b = _annotationIntrospector .findMergeInfo (primary );
263
271
if (b != null ) {
264
272
needMerge = false ;
265
273
if (b .booleanValue ()) {
266
274
metadata = metadata .withMergeInfo (PropertyMetadata .MergeInfo .createForPropertyOverride (acc ));
267
275
}
268
276
}
269
277
}
270
- JsonSetter .Value setterInfo = _annotationIntrospector .findSetterInfo (prim );
278
+ JsonSetter .Value setterInfo = _annotationIntrospector .findSetterInfo (primary );
271
279
if (setterInfo != null ) {
272
280
valueNulls = setterInfo .nonDefaultValueNulls ();
273
281
contentNulls = setterInfo .nonDefaultContentNulls ();
@@ -279,7 +287,7 @@ protected PropertyMetadata _getSetterInfo(PropertyMetadata metadata)
279
287
// 20-Jun-2020, tatu: Related to [databind#2757], need to find type
280
288
// but keeping mind that type for setters is trickier; and that
281
289
// generic typing gets tricky as well.
282
- Class <?> rawType = _rawTypeOf (prim );
290
+ Class <?> rawType = _rawTypeOf (primary );
283
291
ConfigOverride co = _config .getConfigOverride (rawType );
284
292
JsonSetter .Value setterInfo = co .getSetterInfo ();
285
293
if (setterInfo != null ) {
@@ -694,42 +702,6 @@ public Boolean withMember(AnnotatedMember member) {
694
702
return (b != null ) && b .booleanValue ();
695
703
}
696
704
697
- protected Boolean _findRequired () {
698
- return fromMemberAnnotations (new WithMember <Boolean >() {
699
- @ Override
700
- public Boolean withMember (AnnotatedMember member ) {
701
- return _annotationIntrospector .hasRequiredMarker (member );
702
- }
703
- });
704
- }
705
-
706
- protected String _findDescription () {
707
- return fromMemberAnnotations (new WithMember <String >() {
708
- @ Override
709
- public String withMember (AnnotatedMember member ) {
710
- return _annotationIntrospector .findPropertyDescription (member );
711
- }
712
- });
713
- }
714
-
715
- protected Integer _findIndex () {
716
- return fromMemberAnnotations (new WithMember <Integer >() {
717
- @ Override
718
- public Integer withMember (AnnotatedMember member ) {
719
- return _annotationIntrospector .findPropertyIndex (member );
720
- }
721
- });
722
- }
723
-
724
- protected String _findDefaultValue () {
725
- return fromMemberAnnotations (new WithMember <String >() {
726
- @ Override
727
- public String withMember (AnnotatedMember member ) {
728
- return _annotationIntrospector .findPropertyDefaultValue (member );
729
- }
730
- });
731
- }
732
-
733
705
@ Override
734
706
public ObjectIdInfo findObjectIdInfo () {
735
707
return fromMemberAnnotations (new WithMember <ObjectIdInfo >() {
0 commit comments