1
1
package com .fasterxml .jackson .databind .util ;
2
2
3
- import com .fasterxml .jackson .annotation .JsonEnumDefaultValue ;
4
3
import com .fasterxml .jackson .databind .AnnotationIntrospector ;
5
- import com .fasterxml .jackson .databind .introspect .JacksonAnnotationIntrospector ;
6
4
7
5
import java .lang .reflect .Method ;
8
6
import java .util .*;
13
11
*/
14
12
public class EnumResolver implements java .io .Serializable
15
13
{
14
+ private static final AnnotationIntrospector defaultAnnotationInstrospector = null ;
15
+
16
16
private static final long serialVersionUID = 1L ;
17
17
18
18
protected final Class <Enum <?>> _enumClass ;
@@ -56,11 +56,22 @@ public static EnumResolver constructFor(Class<Enum<?>> enumCls, AnnotationIntros
56
56
return new EnumResolver (enumCls , enumValues , map , defaultEnum );
57
57
}
58
58
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
+
59
68
/**
60
69
* Factory method for constructing resolver that maps from Enum.toString() into
61
70
* Enum value
71
+ *
72
+ * @since 2.8
62
73
*/
63
- public static EnumResolver constructUsingToString (Class <Enum <?>> enumCls )
74
+ public static EnumResolver constructUsingToString (Class <Enum <?>> enumCls , AnnotationIntrospector ai )
64
75
{
65
76
Enum <?>[] enumValues = enumCls .getEnumConstants ();
66
77
HashMap <String , Enum <?>> map = new HashMap <String , Enum <?>>();
@@ -70,12 +81,22 @@ public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls)
70
81
map .put (e .toString (), e );
71
82
}
72
83
73
- Enum <?> defaultEnum = new JacksonAnnotationIntrospector () .findDefaultEnumValue (enumCls );
84
+ Enum <?> defaultEnum = ai .findDefaultEnumValue (enumCls );
74
85
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
+ }
76
95
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 )
79
100
{
80
101
Enum <?>[] enumValues = enumCls .getEnumConstants ();
81
102
HashMap <String , Enum <?>> map = new HashMap <String , Enum <?>>();
@@ -92,7 +113,7 @@ public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls,
92
113
}
93
114
}
94
115
95
- Enum <?> defaultEnum = ClassUtil . findFirstAnnotatedEnumValue ( enumCls , JsonEnumDefaultValue . class ) ;
116
+ Enum <?> defaultEnum = ( ai != null ) ? ai . findDefaultEnumValue ( enumCls ) : null ;
96
117
return new EnumResolver (enumCls , enumValues , map , defaultEnum );
97
118
}
98
119
@@ -110,28 +131,49 @@ public static EnumResolver constructUnsafe(Class<?> rawEnumCls, AnnotationIntros
110
131
return constructFor (enumCls , ai );
111
132
}
112
133
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
+
113
143
/**
114
144
* Method that needs to be used instead of {@link #constructUsingToString}
115
145
* if static type of enum is not known.
146
+ *
147
+ * @since 2.8
116
148
*/
117
149
@ SuppressWarnings ({ "unchecked" })
118
- public static EnumResolver constructUnsafeUsingToString (Class <?> rawEnumCls )
119
- {
150
+ public static EnumResolver constructUnsafeUsingToString (Class <?> rawEnumCls , AnnotationIntrospector ai )
151
+ {
120
152
// oh so wrong... not much that can be done tho
121
153
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 );
123
163
}
124
164
125
165
/**
126
166
* Method used when actual String serialization is indicated using @JsonValue
127
167
* on a method.
168
+ *
169
+ * @since 2.8
128
170
*/
129
171
@ SuppressWarnings ({ "unchecked" })
130
- public static EnumResolver constructUnsafeUsingMethod (Class <?> rawEnumCls , Method accessor )
172
+ public static EnumResolver constructUnsafeUsingMethod (Class <?> rawEnumCls , Method accessor , AnnotationIntrospector ai )
131
173
{
132
174
// wrong as ever but:
133
175
Class <Enum <?>> enumCls = (Class <Enum <?>>) rawEnumCls ;
134
- return constructUsingMethod (enumCls , accessor );
176
+ return constructUsingMethod (enumCls , accessor , ai );
135
177
}
136
178
137
179
public CompactStringObjectMap constructLookup () {
0 commit comments