Skip to content

Commit

Permalink
Remove unncessary anySetter construction
Browse files Browse the repository at this point in the history
  • Loading branch information
JooHyukKim committed Feb 4, 2024
1 parent 2b2e0aa commit 6a892f8
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -544,11 +544,8 @@ protected void addBeanProps(DeserializationContext ctxt,

// Also, do we have a fallback "any" setter?
AnnotatedMember anySetter = beanDesc.findAnySetterAccessor();
AnnotatedMember creatorPropWithAnySetter = _findCreatorPropWithAnySetter(ctxt, creatorProps);
if (anySetter != null) {
builder.setAnySetter(constructAnySetter(ctxt, beanDesc, anySetter));
} else if (creatorPropWithAnySetter != null) {
builder.setAnySetter(constructAnySetter(ctxt, beanDesc, creatorPropWithAnySetter));
} else {
// 23-Jan-2018, tatu: although [databind#1805] would suggest we should block
// properties regardless, for now only consider unless there's any setter...
Expand Down Expand Up @@ -838,23 +835,6 @@ protected SettableAnyProperty constructAnySetter(DeserializationContext ctxt,
prop = new BeanProperty.Std(PropertyName.construct(mutator.getName()),
valueType, null, mutator,
PropertyMetadata.STD_OPTIONAL);

} else if (mutator instanceof AnnotatedParameter){
AnnotatedParameter af = (AnnotatedParameter) mutator;
// get the type from the content type of the map object
JavaType fieldType = af.getType();
// 31-Jul-2022, tatu: Not just Maps any more but also JsonNode, so:
if (fieldType.isMapLikeType()) {
fieldType = resolveMemberAndTypeAnnotations(ctxt, mutator, fieldType);
keyType = fieldType.getKeyType();
valueType = fieldType.getContentType();
prop = new BeanProperty.Std(PropertyName.construct("stuff"),
fieldType, null, mutator, PropertyMetadata.STD_OPTIONAL);
} else {
return ctxt.reportBadDefinition(beanDesc.getType(), String.format(
"Unsupported type for any-setter: %s -- only support `Map`s, `JsonNode` and `ObjectNode` ",
ClassUtil.getTypeDescription(fieldType)));
}
} else if (isField) {
AnnotatedField af = (AnnotatedField) mutator;
// get the type from the content type of the map object
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public class CreatorProperty
*
* @since 2.18
*/
protected final Boolean _hasAnySetter;
protected final Boolean _isAnySetterProp;

/**
* @since 2.18
Expand All @@ -89,14 +89,14 @@ protected CreatorProperty(PropertyName name, JavaType type, PropertyName wrapper
TypeDeserializer typeDeser,
Annotations contextAnnotations, AnnotatedParameter param,
int index, JacksonInject.Value injectable,
PropertyMetadata metadata, Boolean hasAnySetter)
PropertyMetadata metadata, Boolean isAnySetterProp)
{
super(name, type, wrapperName, typeDeser, contextAnnotations, metadata);
_annotated = param;
_creatorIndex = index;
_injectableValue = injectable;
_fallbackSetter = null;
_hasAnySetter = hasAnySetter;
_isAnySetterProp = isAnySetterProp;
}

/**
Expand Down Expand Up @@ -151,10 +151,10 @@ public static CreatorProperty construct(PropertyName name, JavaType type, Proper
Annotations contextAnnotations, AnnotatedParameter param,
int index, JacksonInject.Value injectable,
PropertyMetadata metadata,
Boolean hasAnySetter)
Boolean isAnySetterProp)
{
return new CreatorProperty(name, type, wrapperName, typeDeser, contextAnnotations,
param, index, injectable, metadata, hasAnySetter);
param, index, injectable, metadata, isAnySetterProp);
}

/**
Expand All @@ -181,7 +181,7 @@ protected CreatorProperty(CreatorProperty src, PropertyName newName) {
_fallbackSetter = src._fallbackSetter;
_creatorIndex = src._creatorIndex;
_ignorable = src._ignorable;
_hasAnySetter = src._hasAnySetter; // [databind#562] Since 2.18
_isAnySetterProp = src._isAnySetterProp; // [databind#562] Since 2.18
}

protected CreatorProperty(CreatorProperty src, JsonDeserializer<?> deser,
Expand All @@ -192,7 +192,7 @@ protected CreatorProperty(CreatorProperty src, JsonDeserializer<?> deser,
_fallbackSetter = src._fallbackSetter;
_creatorIndex = src._creatorIndex;
_ignorable = src._ignorable;
_hasAnySetter = src._hasAnySetter; // [databind#562] Since 2.18
_isAnySetterProp = src._isAnySetterProp; // [databind#562] Since 2.18
}

@Override
Expand Down Expand Up @@ -361,8 +361,8 @@ public boolean isInjectionOnly() {
/**
* @since 2.18
*/
public boolean hasAnySetter() {
return Boolean.TRUE.equals(_hasAnySetter);
public boolean isAnySetterProp() {
return Boolean.TRUE.equals(_isAnySetterProp);
}

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.fasterxml.jackson.databind.deser.CreatorProperty;
import com.fasterxml.jackson.databind.deser.SettableAnyProperty;
import com.fasterxml.jackson.databind.deser.SettableBeanProperty;
import com.fasterxml.jackson.databind.deser.UnresolvedForwardReference;
import com.fasterxml.jackson.databind.introspect.AnnotatedMember;

/**
Expand Down Expand Up @@ -183,14 +182,12 @@ public Object[] getParameters(SettableBeanProperty[] props)

// [databind#562] Since 2.18 : Respect @JsonAnySetter in @JsonCreator
for (int i = 0; i < _creatorParameters.length; i++) {
if (!(props[i] instanceof CreatorProperty cp)) {
if (!(props[i] instanceof CreatorProperty cp)
|| (!cp.isAnySetterProp())
|| (!cp.getType().isMapLikeType())
) {
continue;
}
if (!cp.hasAnySetter()) {
continue;
}
// So we have prop with anySetter. Should be Map-like, so let's assign such?
// Assign all remaining values to the map
Map<String, Object> param = new HashMap<>();
for (PropertyValue next = buffered(); next != null; next = next.next) {
try {
Expand Down

0 comments on commit 6a892f8

Please sign in to comment.