Skip to content

Commit 7e6ba9e

Browse files
author
Alejandro Rivera
committed
Introduced AnnotationIntrospector arguments while maintaining backwards compatibility.
Also removed leftover imports that weren't needed anymore.
1 parent 7ee9f78 commit 7e6ba9e

File tree

2 files changed

+57
-15
lines changed

2 files changed

+57
-15
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/BasicDeserializerFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1917,11 +1917,11 @@ protected EnumResolver constructEnumResolver(Class<?> enumClass,
19171917
if (config.canOverrideAccessModifiers()) {
19181918
ClassUtil.checkAndFixAccess(accessor, config.isEnabled(MapperFeature.OVERRIDE_PUBLIC_ACCESS_MODIFIERS));
19191919
}
1920-
return EnumResolver.constructUnsafeUsingMethod(enumClass, accessor);
1920+
return EnumResolver.constructUnsafeUsingMethod(enumClass, accessor, config.getAnnotationIntrospector());
19211921
}
19221922
// May need to use Enum.toString()
19231923
if (config.isEnabled(DeserializationFeature.READ_ENUMS_USING_TO_STRING)) {
1924-
return EnumResolver.constructUnsafeUsingToString(enumClass);
1924+
return EnumResolver.constructUnsafeUsingToString(enumClass, config.getAnnotationIntrospector());
19251925
}
19261926
return EnumResolver.constructUnsafe(enumClass, config.getAnnotationIntrospector());
19271927
}

src/main/java/com/fasterxml/jackson/databind/util/EnumResolver.java

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.fasterxml.jackson.databind.util;
22

3-
import com.fasterxml.jackson.annotation.JsonEnumDefaultValue;
43
import com.fasterxml.jackson.databind.AnnotationIntrospector;
5-
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
64

75
import java.lang.reflect.Method;
86
import java.util.*;
@@ -13,6 +11,8 @@
1311
*/
1412
public class EnumResolver implements java.io.Serializable
1513
{
14+
private static final AnnotationIntrospector defaultAnnotationInstrospector = null;
15+
1616
private static final long serialVersionUID = 1L;
1717

1818
protected final Class<Enum<?>> _enumClass;
@@ -56,11 +56,22 @@ public static EnumResolver constructFor(Class<Enum<?>> enumCls, AnnotationIntros
5656
return new EnumResolver(enumCls, enumValues, map, defaultEnum);
5757
}
5858

59+
/**
60+
* @deprecated Since 2.8, use {@link #constructUsingToString(Class, AnnotationIntrospector)} instead
61+
*/
62+
@Deprecated
63+
public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls)
64+
{
65+
return constructUsingToString(enumCls, defaultAnnotationInstrospector);
66+
}
67+
5968
/**
6069
* Factory method for constructing resolver that maps from Enum.toString() into
6170
* Enum value
71+
*
72+
* @since 2.8
6273
*/
63-
public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls)
74+
public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls, AnnotationIntrospector ai)
6475
{
6576
Enum<?>[] enumValues = enumCls.getEnumConstants();
6677
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
@@ -70,12 +81,22 @@ public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls)
7081
map.put(e.toString(), e);
7182
}
7283

73-
Enum<?> defaultEnum = new JacksonAnnotationIntrospector().findDefaultEnumValue(enumCls);
84+
Enum<?> defaultEnum = ai.findDefaultEnumValue(enumCls);
7485
return new EnumResolver(enumCls, enumValues, map, defaultEnum);
75-
}
86+
}
87+
88+
/**
89+
* @deprecated Since 2.8, use {@link #constructUsingMethod(Class, Method, AnnotationIntrospector)} instead
90+
*/
91+
@Deprecated
92+
public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls, Method accessor) {
93+
return constructUsingMethod(enumCls, accessor, defaultAnnotationInstrospector);
94+
}
7695

77-
public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls,
78-
Method accessor)
96+
/**
97+
* @since 2.8
98+
*/
99+
public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls, Method accessor, AnnotationIntrospector ai)
79100
{
80101
Enum<?>[] enumValues = enumCls.getEnumConstants();
81102
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
@@ -92,7 +113,7 @@ public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls,
92113
}
93114
}
94115

95-
Enum<?> defaultEnum = ClassUtil.findFirstAnnotatedEnumValue(enumCls, JsonEnumDefaultValue.class);
116+
Enum<?> defaultEnum = (ai != null) ? ai.findDefaultEnumValue(enumCls) : null;
96117
return new EnumResolver(enumCls, enumValues, map, defaultEnum);
97118
}
98119

@@ -110,28 +131,49 @@ public static EnumResolver constructUnsafe(Class<?> rawEnumCls, AnnotationIntros
110131
return constructFor(enumCls, ai);
111132
}
112133

134+
/**
135+
* @deprecated Since 2.8, use {@link #constructUnsafeUsingToString(Class, AnnotationIntrospector)} instead
136+
*/
137+
@Deprecated
138+
public static EnumResolver constructUnsafeUsingToString(Class<?> rawEnumCls)
139+
{
140+
return constructUnsafeUsingToString(rawEnumCls, defaultAnnotationInstrospector);
141+
}
142+
113143
/**
114144
* Method that needs to be used instead of {@link #constructUsingToString}
115145
* if static type of enum is not known.
146+
*
147+
* @since 2.8
116148
*/
117149
@SuppressWarnings({ "unchecked" })
118-
public static EnumResolver constructUnsafeUsingToString(Class<?> rawEnumCls)
119-
{
150+
public static EnumResolver constructUnsafeUsingToString(Class<?> rawEnumCls, AnnotationIntrospector ai)
151+
{
120152
// oh so wrong... not much that can be done tho
121153
Class<Enum<?>> enumCls = (Class<Enum<?>>) rawEnumCls;
122-
return constructUsingToString(enumCls);
154+
return constructUsingToString(enumCls, ai);
155+
}
156+
157+
/**
158+
* @deprecated Since 2.8, use {@link #constructUnsafeUsingMethod(Class, Method, AnnotationIntrospector)} instead.
159+
*/
160+
@Deprecated
161+
public static EnumResolver constructUnsafeUsingMethod(Class<?> rawEnumCls, Method accessor) {
162+
return constructUnsafeUsingMethod(rawEnumCls, accessor, defaultAnnotationInstrospector);
123163
}
124164

125165
/**
126166
* Method used when actual String serialization is indicated using @JsonValue
127167
* on a method.
168+
*
169+
* @since 2.8
128170
*/
129171
@SuppressWarnings({ "unchecked" })
130-
public static EnumResolver constructUnsafeUsingMethod(Class<?> rawEnumCls, Method accessor)
172+
public static EnumResolver constructUnsafeUsingMethod(Class<?> rawEnumCls, Method accessor, AnnotationIntrospector ai)
131173
{
132174
// wrong as ever but:
133175
Class<Enum<?>> enumCls = (Class<Enum<?>>) rawEnumCls;
134-
return constructUsingMethod(enumCls, accessor);
176+
return constructUsingMethod(enumCls, accessor, ai);
135177
}
136178

137179
public CompactStringObjectMap constructLookup() {

0 commit comments

Comments
 (0)