Skip to content

Implements #2352. #2490

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
package com.fasterxml.jackson.databind;

import java.lang.annotation.Annotation;
import java.util.*;

import com.fasterxml.jackson.annotation.*;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.core.Versioned;

import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.cfg.MapperConfig;
Expand All @@ -19,6 +13,12 @@
import com.fasterxml.jackson.databind.util.Converter;
import com.fasterxml.jackson.databind.util.NameTransformer;

import java.lang.annotation.Annotation;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
* Abstract class that defines API used for introspecting annotation-based
* configuration for serialization and deserialization. Separated
Expand Down Expand Up @@ -719,6 +719,15 @@ public String[] findEnumValues(Class<?> enumType, Enum<?>[] enumValues, String[]
return names;
}

/**
* Method to find any aliases on enum-constants in the given class.
* @param enumType - Class definition to search.
* @return Returns a Map<String, String[]> with enum value as key and found aliases as value.
*/
public Map<String, String[]> findEnumAliases(Class<? extends Enum> enumType) {
return null;
}

/**
* Finds the Enum value that should be considered the default value, if possible.
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
package com.fasterxml.jackson.databind.deser;

import java.io.Serializable;
import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicReference;

import com.fasterxml.jackson.annotation.JacksonInject;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonCreator.Mode;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.cfg.DeserializerFactoryConfig;
import com.fasterxml.jackson.databind.cfg.HandlerInstantiator;
Expand All @@ -28,6 +22,13 @@
import com.fasterxml.jackson.databind.type.*;
import com.fasterxml.jackson.databind.util.*;

import java.io.Serializable;
import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.AtomicReference;

/**
* Abstract factory base class that can provide deserializers for standard
* JDK classes, including collection classes and simple heuristics for
Expand Down Expand Up @@ -1394,7 +1395,7 @@ public JsonDeserializer<?> createEnumDeserializer(DeserializationContext ctxt,
}
}
}

// Need to consider @JsonValue if one found
if (deser == null) {
deser = new EnumDeserializer(constructEnumResolver(enumClass,
Expand All @@ -1409,6 +1410,9 @@ public JsonDeserializer<?> createEnumDeserializer(DeserializationContext ctxt,
deser = mod.modifyEnumDeserializer(config, type, beanDesc, deser);
}
}

boolean derp = beanDesc.hasKnownClassAnnotations();

return deser;
}

Expand Down Expand Up @@ -1562,6 +1566,7 @@ private KeyDeserializer _createEnumKeyDeserializer(DeserializationContext ctxt,
return StdKeyDeserializers.constructDelegatingKeyDeserializer(config, type, valueDesForKey);
}
}

EnumResolver enumRes = constructEnumResolver(enumClass, config, beanDesc.findJsonValueAccessor());
// May have @JsonCreator for static factory method:
for (AnnotatedMethod factory : beanDesc.getFactoryMethods()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package com.fasterxml.jackson.databind.deser.std;

import java.io.IOException;

import com.fasterxml.jackson.annotation.JsonFormat;

import com.fasterxml.jackson.core.*;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
import com.fasterxml.jackson.databind.deser.SettableBeanProperty;
Expand All @@ -15,6 +12,8 @@
import com.fasterxml.jackson.databind.util.CompactStringObjectMap;
import com.fasterxml.jackson.databind.util.EnumResolver;

import java.io.IOException;

/**
* Deserializer class that can deserialize instances of
* specified Enum class from Strings and Integers.
Expand Down Expand Up @@ -58,7 +57,7 @@ protected EnumDeserializer(EnumDeserializer base, Boolean caseInsensitive)
/**
* Factory method used when Enum instances are to be deserialized
* using a creator (static factory method)
*
*
* @return Deserializer based on given factory method
*/
public static JsonDeserializer<?> deserializerForCreator(DeserializationConfig config,
Expand All @@ -77,7 +76,7 @@ public static JsonDeserializer<?> deserializerForCreator(DeserializationConfig c
/**
* Factory method used when Enum instances are to be deserialized
* using a zero-/no-args factory method
*
*
* @return Deserializer based on given no-args factory method
*/
public static JsonDeserializer<?> deserializerForNoArgsCreator(DeserializationConfig config,
Expand All @@ -96,7 +95,7 @@ public EnumDeserializer withResolved(Boolean caseInsensitive) {
}
return new EnumDeserializer(this, caseInsensitive);
}

@Override
public JsonDeserializer<?> createContextual(DeserializationContext ctxt,
BeanProperty property) throws JsonMappingException
Expand Down Expand Up @@ -126,7 +125,8 @@ public JsonDeserializer<?> createContextual(DeserializationContext ctxt,
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
{
JsonToken curr = p.currentToken();



// Usually should just get string value:
if (curr == JsonToken.VALUE_STRING || curr == JsonToken.FIELD_NAME) {
CompactStringObjectMap lookup = ctxt.isEnabled(DeserializationFeature.READ_ENUMS_USING_TO_STRING)
Expand Down Expand Up @@ -169,10 +169,11 @@ public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOEx
/* Internal helper methods
/**********************************************************
*/

private final Object _deserializeAltString(JsonParser p, DeserializationContext ctxt,
CompactStringObjectMap lookup, String name) throws IOException
{

name = name.trim();
if (name.length() == 0) {
if (ctxt.isEnabled(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT)) {
Expand Down
Loading