Skip to content

Commit b1237dc

Browse files
committed
Minor streamlining of property metadata gathering
1 parent 83c5054 commit b1237dc

File tree

1 file changed

+28
-56
lines changed

1 file changed

+28
-56
lines changed

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

+28-56
Original file line numberDiff line numberDiff line change
@@ -216,20 +216,30 @@ public boolean isExplicitlyNamed() {
216216
*/
217217

218218
@Override
219-
public PropertyMetadata getMetadata() {
219+
public PropertyMetadata getMetadata()
220+
{
220221
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;
228228
} 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+
}
233243
}
234244
}
235245
return _metadata;
@@ -241,7 +251,8 @@ public PropertyMetadata getMetadata() {
241251
* of property value, and handling of incoming nulls.
242252
* Only called for deserialization purposes.
243253
*/
244-
protected PropertyMetadata _getSetterInfo(PropertyMetadata metadata)
254+
protected PropertyMetadata _getSetterInfo(PropertyMetadata metadata,
255+
AnnotatedMember primary)
245256
{
246257
boolean needMerge = true;
247258
Nulls valueNulls = null;
@@ -250,24 +261,21 @@ protected PropertyMetadata _getSetterInfo(PropertyMetadata metadata)
250261
// Slightly confusing: first, annotations should be accessed via primary member
251262
// (mutator); but accessor is needed for actual merge operation. So
252263

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();
256264
AnnotatedMember acc = getAccessor();
257265

258-
if (prim != null) {
266+
if (primary != null) {
259267
// Ok, first: does property itself have something to say?
260268
if (_annotationIntrospector != null) {
261269
if (acc != null) {
262-
Boolean b = _annotationIntrospector.findMergeInfo(prim);
270+
Boolean b = _annotationIntrospector.findMergeInfo(primary);
263271
if (b != null) {
264272
needMerge = false;
265273
if (b.booleanValue()) {
266274
metadata = metadata.withMergeInfo(PropertyMetadata.MergeInfo.createForPropertyOverride(acc));
267275
}
268276
}
269277
}
270-
JsonSetter.Value setterInfo = _annotationIntrospector.findSetterInfo(prim);
278+
JsonSetter.Value setterInfo = _annotationIntrospector.findSetterInfo(primary);
271279
if (setterInfo != null) {
272280
valueNulls = setterInfo.nonDefaultValueNulls();
273281
contentNulls = setterInfo.nonDefaultContentNulls();
@@ -279,7 +287,7 @@ protected PropertyMetadata _getSetterInfo(PropertyMetadata metadata)
279287
// 20-Jun-2020, tatu: Related to [databind#2757], need to find type
280288
// but keeping mind that type for setters is trickier; and that
281289
// generic typing gets tricky as well.
282-
Class<?> rawType = _rawTypeOf(prim);
290+
Class<?> rawType = _rawTypeOf(primary);
283291
ConfigOverride co = _config.getConfigOverride(rawType);
284292
JsonSetter.Value setterInfo = co.getSetterInfo();
285293
if (setterInfo != null) {
@@ -694,42 +702,6 @@ public Boolean withMember(AnnotatedMember member) {
694702
return (b != null) && b.booleanValue();
695703
}
696704

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-
733705
@Override
734706
public ObjectIdInfo findObjectIdInfo() {
735707
return fromMemberAnnotations(new WithMember<ObjectIdInfo>() {

0 commit comments

Comments
 (0)