Skip to content

Commit

Permalink
Yet more clean up
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed Jul 13, 2023
1 parent f9ad604 commit 41a4c2b
Showing 1 changed file with 81 additions and 72 deletions.
153 changes: 81 additions & 72 deletions src/main/java/com/fasterxml/jackson/databind/util/EnumResolver.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,23 +73,32 @@ protected EnumResolver(Class<Enum<?>> enumClass, Enum<?>[] enums,
*/

/**
* Factory method for constructing resolver that maps from Enum.name() into
* Enum value.
* Factory method for constructing an {@link EnumResolver} based on the given {@link DeserializationConfig} and
* {@link AnnotatedClass} of the enum to be resolved.
*
* @since 2.12
* @deprecated Since 2.16 use {@link #constructFor(DeserializationConfig, AnnotatedClass)} instead
* @param config the deserialization configuration to use
* @param annotatedClass the annotated class of the enum to be resolved
* @return the constructed {@link EnumResolver}
*
* @since 2.16
*/
@Deprecated
public static EnumResolver constructFor(DeserializationConfig config,
Class<?> enumCls0)
AnnotatedClass annotatedClass)
{
// prepare data
final AnnotationIntrospector ai = config.getAnnotationIntrospector();
final boolean isIgnoreCase = config.isEnabled(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
final Class<?> enumCls0 = annotatedClass.getRawType();
final Class<Enum<?>> enumCls = _enumClass(enumCls0);
final Enum<?>[] enumConstants = _enumConstants(enumCls0);
String[] names = ai.findEnumValues(enumCls, enumConstants, new String[enumConstants.length]);

// introspect
String[] names = ai.findEnumValues(config, annotatedClass,
enumConstants, new String[enumConstants.length]);
final String[][] allAliases = new String[names.length][];
ai.findEnumAliases(enumCls, enumConstants, allAliases);
ai.findEnumAliases(config, annotatedClass, enumConstants, allAliases);

// finally, build
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
for (int i = 0, len = enumConstants.length; i < len; ++i) {
final Enum<?> enumValue = enumConstants[i];
Expand All @@ -107,37 +116,28 @@ public static EnumResolver constructFor(DeserializationConfig config,
}
}
return new EnumResolver(enumCls, enumConstants, map,
_enumDefault(ai, enumCls), isIgnoreCase,
false);
_enumDefault(ai, annotatedClass, enumConstants),
isIgnoreCase, false);
}

/**
* Factory method for constructing an {@link EnumResolver} based on the given {@link DeserializationConfig} and
* {@link AnnotatedClass} of the enum to be resolved.
*
* @param config the deserialization configuration to use
* @param annotatedClass the annotated class of the enum to be resolved
* @return the constructed {@link EnumResolver}
* Factory method for constructing resolver that maps from Enum.name() into
* Enum value.
*
* @since 2.16
* @since 2.12
* @deprecated Since 2.16 use {@link #constructFor(DeserializationConfig, AnnotatedClass)} instead
*/
public static EnumResolver constructFor(DeserializationConfig config, AnnotatedClass annotatedClass)
@Deprecated
public static EnumResolver constructFor(DeserializationConfig config,
Class<?> enumCls0)
{
// prepare data
final AnnotationIntrospector ai = config.getAnnotationIntrospector();
final boolean isIgnoreCase = config.isEnabled(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
final Class<?> enumCls0 = annotatedClass.getRawType();
final Class<Enum<?>> enumCls = _enumClass(enumCls0);
final Enum<?>[] enumConstants = _enumConstants(enumCls0);
final Enum<?> defaultEnum = _enumDefault(ai, annotatedClass, enumConstants);

// introspect
String[] names = ai.findEnumValues(config, annotatedClass,
enumConstants, new String[enumConstants.length]);
String[] names = ai.findEnumValues(enumCls, enumConstants, new String[enumConstants.length]);
final String[][] allAliases = new String[names.length][];
ai.findEnumAliases(config, annotatedClass, enumConstants, allAliases);

// finally, build
ai.findEnumAliases(enumCls, enumConstants, allAliases);
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
for (int i = 0, len = enumConstants.length; i < len; ++i) {
final Enum<?> enumValue = enumConstants[i];
Expand All @@ -155,31 +155,35 @@ public static EnumResolver constructFor(DeserializationConfig config, AnnotatedC
}
}
return new EnumResolver(enumCls, enumConstants, map,
defaultEnum, isIgnoreCase, false);
_enumDefault(ai, enumCls),
isIgnoreCase, false);
}

/**
* Factory method for constructing resolver that maps from Enum.toString() into
* Enum value
*
* @since 2.12
* @deprecated Since 2.16 use {@link #constructUsingToString(DeserializationConfig, AnnotatedClass)} instead
* @since 2.16
*/
@Deprecated
public static EnumResolver constructUsingToString(DeserializationConfig config,
Class<?> enumCls0)
AnnotatedClass annotatedClass)
{
// prepare data
final AnnotationIntrospector ai = config.getAnnotationIntrospector();
final boolean isIgnoreCase = config.isEnabled(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
final Class<?> enumCls0 = annotatedClass.getRawType();
final Class<Enum<?>> enumCls = _enumClass(enumCls0);
final Enum<?>[] enumConstants = _enumConstants(enumCls0);
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();

// introspect
final String[][] allAliases = new String[enumConstants.length][];
if (ai != null) {
ai.findEnumAliases(enumCls, enumConstants, allAliases);
ai.findEnumAliases(config, annotatedClass, enumConstants, allAliases);
}


// finally, build
// from last to first, so that in case of duplicate values, first wins
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
for (int i = enumConstants.length; --i >= 0; ) {
Enum<?> enumValue = enumConstants[i];
map.put(enumValue.toString(), enumValue);
Expand All @@ -192,33 +196,32 @@ public static EnumResolver constructUsingToString(DeserializationConfig config,
}
}
return new EnumResolver(enumCls, enumConstants, map,
_enumDefault(ai, enumCls), isIgnoreCase, false);
_enumDefault(ai, annotatedClass, enumConstants),
isIgnoreCase, false);
}

/**
* Factory method for constructing resolver that maps from Enum.toString() into
* Enum value
*
* @since 2.16
* @since 2.12
* @deprecated Since 2.16 use {@link #constructUsingToString(DeserializationConfig, AnnotatedClass)} instead
*/
public static EnumResolver constructUsingToString(DeserializationConfig config, AnnotatedClass annotatedClass) {
// prepare data
@Deprecated
public static EnumResolver constructUsingToString(DeserializationConfig config,
Class<?> enumCls0)
{
final AnnotationIntrospector ai = config.getAnnotationIntrospector();
final boolean isIgnoreCase = config.isEnabled(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
final Class<?> enumCls0 = annotatedClass.getRawType();
final Class<Enum<?>> enumCls = _enumClass(enumCls0);
final Enum<?>[] enumConstants = _enumConstants(enumCls0);
final Enum<?> defaultEnum = _enumDefault(ai, annotatedClass, enumConstants);

// introspect
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
final String[][] allAliases = new String[enumConstants.length][];
if (ai != null) {
ai.findEnumAliases(config, annotatedClass, enumConstants, allAliases);
ai.findEnumAliases(enumCls, enumConstants, allAliases);
}

// finally, build

// from last to first, so that in case of duplicate values, first wins
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
for (int i = enumConstants.length; --i >= 0; ) {
Enum<?> enumValue = enumConstants[i];
map.put(enumValue.toString(), enumValue);
Expand All @@ -231,59 +234,63 @@ public static EnumResolver constructUsingToString(DeserializationConfig config,
}
}
return new EnumResolver(enumCls, enumConstants, map,
defaultEnum, isIgnoreCase, false);
_enumDefault(ai, enumCls),
isIgnoreCase, false);
}

/**
* Factory method for constructing resolver that maps from index of Enum.values() into
* Enum value
* Enum value.
*
* @since 2.15
* @deprecated Since 2.16. Use {@link #constructUsingIndex(DeserializationConfig, AnnotatedClass)} instead.
* @since 2.16
*/
@Deprecated
public static EnumResolver constructUsingIndex(DeserializationConfig config,
Class<Enum<?>> enumCls0)
AnnotatedClass annotatedClass)
{
// prepare data
final AnnotationIntrospector ai = config.getAnnotationIntrospector();
final boolean isIgnoreCase = config.isEnabled(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
final Class<?> enumCls0 = annotatedClass.getRawType();
final Class<Enum<?>> enumCls = _enumClass(enumCls0);
final Enum<?>[] enumConstants = _enumConstants(enumCls0);
HashMap<String, Enum<?>> map = new HashMap<>();

// finally, build
// from last to first, so that in case of duplicate values, first wins
HashMap<String, Enum<?>> map = new HashMap<>();
for (int i = enumConstants.length; --i >= 0; ) {
Enum<?> enumValue = enumConstants[i];
map.put(String.valueOf(i), enumValue);
}
return new EnumResolver(enumCls, enumConstants, map,
_enumDefault(ai, enumCls), isIgnoreCase, false);
_enumDefault(ai, annotatedClass, enumConstants),
isIgnoreCase, false);
}

/**
* Factory method for constructing resolver that maps from index of Enum.values() into
* Enum value.
* Enum value
*
* @since 2.16
* @since 2.15
* @deprecated Since 2.16. Use {@link #constructUsingIndex(DeserializationConfig, AnnotatedClass)} instead.
*/
public static EnumResolver constructUsingIndex(DeserializationConfig config, AnnotatedClass annotatedClass)
@Deprecated
public static EnumResolver constructUsingIndex(DeserializationConfig config,
Class<Enum<?>> enumCls0)
{
// prepare data
final AnnotationIntrospector ai = config.getAnnotationIntrospector();
final boolean isIgnoreCase = config.isEnabled(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS);
final Class<?> enumCls0 = annotatedClass.getRawType();
final Class<Enum<?>> enumCls = _enumClass(enumCls0);
final Enum<?>[] enumConstants = _enumConstants(enumCls0);
final Enum<?> defaultEnum = _enumDefault(ai, annotatedClass, enumConstants);
HashMap<String, Enum<?>> map = new HashMap<>();

// finally, build
// from last to first, so that in case of duplicate values, first wins
HashMap<String, Enum<?>> map = new HashMap<>();
for (int i = enumConstants.length; --i >= 0; ) {
Enum<?> enumValue = enumConstants[i];
map.put(String.valueOf(i), enumValue);
}
return new EnumResolver(enumCls, enumConstants, map,
defaultEnum, isIgnoreCase, false);
_enumDefault(ai, enumCls),
isIgnoreCase, false);
}

/**
Expand Down Expand Up @@ -314,7 +321,8 @@ public static EnumResolver constructUsingEnumNamingStrategy(DeserializationConfi
}

return new EnumResolver(enumCls, enumConstants, map,
_enumDefault(ai, enumCls), isIgnoreCase, false);
_enumDefault(ai, enumCls),
isIgnoreCase, false);
}

/**
Expand All @@ -331,7 +339,6 @@ public static EnumResolver constructUsingEnumNamingStrategy(DeserializationConfi
final Class<?> enumCls0 = annotatedClass.getRawType();
final Class<Enum<?>> enumCls = _enumClass(enumCls0);
final Enum<?>[] enumConstants = _enumConstants(enumCls0);
final Enum<?> defaultEnum = _enumDefault(ai, annotatedClass, enumConstants);

// finally build
// from last to first, so that in case of duplicate values, first wins
Expand All @@ -343,7 +350,8 @@ public static EnumResolver constructUsingEnumNamingStrategy(DeserializationConfi
}

return new EnumResolver(enumCls, enumConstants, map,
defaultEnum, isIgnoreCase, false);
_enumDefault(ai, annotatedClass, enumConstants),
isIgnoreCase, false);
}

/**
Expand Down Expand Up @@ -376,7 +384,8 @@ public static EnumResolver constructUsingMethod(DeserializationConfig config,
}
}
return new EnumResolver(enumCls, enumConstants, map,
_enumDefault(ai, enumCls), isIgnoreCase,
_enumDefault(ai, enumCls),
isIgnoreCase,
// 26-Sep-2021, tatu: [databind#1850] Need to consider "from int" case
_isIntType(accessor.getRawType())
);
Expand All @@ -397,7 +406,6 @@ public static EnumResolver constructUsingMethod(DeserializationConfig config,
final Class<?> enumCls0 = annotatedClass.getRawType();
final Class<Enum<?>> enumCls = _enumClass(enumCls0);
final Enum<?>[] enumConstants = _enumConstants(enumCls0);
final Enum<?> defaultEnum = _enumDefault(ai, annotatedClass, enumConstants);

// build
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
Expand All @@ -414,7 +422,8 @@ public static EnumResolver constructUsingMethod(DeserializationConfig config,
}
}
return new EnumResolver(enumCls, enumConstants, map,
defaultEnum, isIgnoreCase,
_enumDefault(ai, annotatedClass, enumConstants),
isIgnoreCase,
// 26-Sep-2021, tatu: [databind#1850] Need to consider "from int" case
_isIntType(accessor.getRawType())
);
Expand All @@ -438,7 +447,7 @@ protected static Enum<?>[] _enumConstants(Class<?> enumCls) {
}

/**
* Internal helper method used to resolve {@link com.fasterxml.jackson.annotation.JsonEnumDefaultValue}
* Internal helper method used to resolve Enum default value to use (if any).
*
* @since 2.16
* @see AnnotationIntrospector#findDefaultEnumValue(AnnotatedClass, Enum[])
Expand Down

0 comments on commit 41a4c2b

Please sign in to comment.