Skip to content

Commit 21dfbba

Browse files
committed
Minor post-merge cleanup for #1126
1 parent cfd893e commit 21dfbba

File tree

7 files changed

+42
-31
lines changed

7 files changed

+42
-31
lines changed

pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@
4747
<dependency>
4848
<groupId>com.fasterxml.jackson.core</groupId>
4949
<artifactId>jackson-annotations</artifactId>
50+
<!-- 22-Feb-2016, tatu: Temporarily override version; will be updated in parent pom soon
51+
-->
52+
<version>2.8.0-SNAPSHOT</version>
5053
</dependency>
5154
<dependency>
5255
<groupId>com.fasterxml.jackson.core</groupId>

src/main/java/com/fasterxml/jackson/databind/AnnotationIntrospector.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -982,6 +982,7 @@ public String[] findEnumValues(Class<?> enumType, Enum<?>[] enumValues, String[
982982
*
983983
* @param enumCls The Enum class to scan for the default value.
984984
* @return null if none found or it's not possible to determine one.
985+
*
985986
* @since 2.8
986987
*/
987988
public Enum<?> findDefaultEnumValue(Class<Enum<?>> enumCls) {

src/main/java/com/fasterxml/jackson/databind/SerializerProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public abstract class SerializerProvider
153153
/* State, for non-blueprint instances: generic
154154
/**********************************************************
155155
*/
156-
156+
157157
/**
158158
* For fast lookups, we will have a local non-shared read-only
159159
* map that contains serializers previously fetched.

src/main/java/com/fasterxml/jackson/databind/deser/std/EnumDeserializer.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOEx
9999
if (index >= 0 && index <= _enumsByIndex.length) {
100100
return _enumsByIndex[index];
101101
}
102-
if (ctxt.isEnabled(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE) && _enumDefaultValue != null) {
102+
if ((_enumDefaultValue != null)
103+
&& ctxt.isEnabled(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE)) {
103104
return _enumDefaultValue;
104105
}
105106
if (!ctxt.isEnabled(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL)) {
@@ -136,8 +137,8 @@ private final Object _deserializeAltString(JsonParser p, DeserializationContext
136137
}
137138
}
138139
}
139-
if (ctxt.isEnabled(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE)
140-
&& _enumDefaultValue != null) {
140+
if ((_enumDefaultValue != null)
141+
&& ctxt.isEnabled(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE)) {
141142
return _enumDefaultValue;
142143
}
143144
if (!ctxt.isEnabled(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL)) {

src/main/java/com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -566,7 +566,13 @@ public String[] findEnumValues(Class<?> enumType, Enum<?>[] enumValues, String[
566566
names = _primary.findEnumValues(enumType, enumValues, names);
567567
return names;
568568
}
569-
569+
570+
@Override
571+
public Enum<?> findDefaultEnumValue(Class<Enum<?>> enumCls) {
572+
Enum<?> en = _primary.findDefaultEnumValue(enumCls);
573+
return (en == null) ? _secondary.findDefaultEnumValue(enumCls) : en;
574+
}
575+
570576
// // // Deserialization: general annotations
571577

572578
@Override

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

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -809,7 +809,7 @@ public static Class<? extends Enum<?>> findEnumType(EnumSet<?> s)
809809
{
810810
// First things first: if not empty, easy to determine
811811
if (!s.isEmpty()) {
812-
return findEnumType(s.iterator().next());
812+
return findEnumType(s.iterator().next());
813813
}
814814
// Otherwise need to locate using an internal field
815815
return EnumTypeLocator.instance.enumTypeFor(s);
@@ -874,17 +874,19 @@ public static Class<? extends Enum<?>> findEnumType(Class<?> cls)
874874
* @throws IllegalArgumentException if there's a reflection issue accessing the Enum
875875
* @since 2.8
876876
*/
877-
public static <T extends Annotation> Enum<?> findFirstAnnotatedEnumValue(Class<Enum<?>> enumClass, Class<T> annotationClass) {
877+
public static <T extends Annotation> Enum<?> findFirstAnnotatedEnumValue(Class<Enum<?>> enumClass, Class<T> annotationClass)
878+
{
878879
Field[] fields = getDeclaredFields(enumClass);
879880
for (Field field : fields) {
880-
Annotation defaultValueAnnotation = field.getAnnotation(annotationClass);
881-
if (defaultValueAnnotation != null && field.isEnumConstant()) {
882-
try {
883-
Method valueOf = enumClass.getDeclaredMethod("valueOf", String.class); // using `getMethod` causes IllegalAccessException
884-
valueOf.setAccessible(true);
885-
return enumClass.cast(valueOf.invoke(null, field.getName()));
886-
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
887-
throw new IllegalArgumentException("Could not extract Enum annotated with " + annotationClass.getSimpleName(), e);
881+
if (field.isEnumConstant()) {
882+
Annotation defaultValueAnnotation = field.getAnnotation(annotationClass);
883+
if (defaultValueAnnotation != null) {
884+
final String name = field.getName();
885+
for (Enum<?> enumValue : enumClass.getEnumConstants()) {
886+
if (name.equals(enumValue.name())) {
887+
return enumValue;
888+
}
889+
}
888890
}
889891
}
890892
}

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

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package com.fasterxml.jackson.databind.util;
22

3-
import com.fasterxml.jackson.databind.AnnotationIntrospector;
4-
53
import java.lang.reflect.Method;
64
import java.util.*;
75

6+
import com.fasterxml.jackson.databind.AnnotationIntrospector;
7+
88
/**
99
* Helper class used to resolve String values (either JSON Object field
1010
* names or regular String values) into Java Enum instances.
1111
*/
1212
public class EnumResolver implements java.io.Serializable
1313
{
14-
private static final AnnotationIntrospector defaultAnnotationInstrospector = null;
15-
1614
private static final long serialVersionUID = 1L;
1715

1816
protected final Class<Enum<?>> _enumClass;
@@ -60,9 +58,8 @@ public static EnumResolver constructFor(Class<Enum<?>> enumCls, AnnotationIntros
6058
* @deprecated Since 2.8, use {@link #constructUsingToString(Class, AnnotationIntrospector)} instead
6159
*/
6260
@Deprecated
63-
public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls)
64-
{
65-
return constructUsingToString(enumCls, defaultAnnotationInstrospector);
61+
public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls) {
62+
return constructUsingToString(enumCls, null);
6663
}
6764

6865
/**
@@ -71,7 +68,8 @@ public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls)
7168
*
7269
* @since 2.8
7370
*/
74-
public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls, AnnotationIntrospector ai)
71+
public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls,
72+
AnnotationIntrospector ai)
7573
{
7674
Enum<?>[] enumValues = enumCls.getEnumConstants();
7775
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
@@ -80,8 +78,7 @@ public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls, Annota
8078
Enum<?> e = enumValues[i];
8179
map.put(e.toString(), e);
8280
}
83-
84-
Enum<?> defaultEnum = ai.findDefaultEnumValue(enumCls);
81+
Enum<?> defaultEnum = (ai == null) ? null : ai.findDefaultEnumValue(enumCls);
8582
return new EnumResolver(enumCls, enumValues, map, defaultEnum);
8683
}
8784

@@ -90,13 +87,14 @@ public static EnumResolver constructUsingToString(Class<Enum<?>> enumCls, Annota
9087
*/
9188
@Deprecated
9289
public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls, Method accessor) {
93-
return constructUsingMethod(enumCls, accessor, defaultAnnotationInstrospector);
90+
return constructUsingMethod(enumCls, accessor, null);
9491
}
9592

9693
/**
9794
* @since 2.8
9895
*/
99-
public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls, Method accessor, AnnotationIntrospector ai)
96+
public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls, Method accessor,
97+
AnnotationIntrospector ai)
10098
{
10199
Enum<?>[] enumValues = enumCls.getEnumConstants();
102100
HashMap<String, Enum<?>> map = new HashMap<String, Enum<?>>();
@@ -112,7 +110,6 @@ public static EnumResolver constructUsingMethod(Class<Enum<?>> enumCls, Method a
112110
throw new IllegalArgumentException("Failed to access @JsonValue of Enum value "+en+": "+e.getMessage());
113111
}
114112
}
115-
116113
Enum<?> defaultEnum = (ai != null) ? ai.findDefaultEnumValue(enumCls) : null;
117114
return new EnumResolver(enumCls, enumValues, map, defaultEnum);
118115
}
@@ -137,7 +134,7 @@ public static EnumResolver constructUnsafe(Class<?> rawEnumCls, AnnotationIntros
137134
@Deprecated
138135
public static EnumResolver constructUnsafeUsingToString(Class<?> rawEnumCls)
139136
{
140-
return constructUnsafeUsingToString(rawEnumCls, defaultAnnotationInstrospector);
137+
return constructUnsafeUsingToString(rawEnumCls, null);
141138
}
142139

143140
/**
@@ -159,7 +156,7 @@ public static EnumResolver constructUnsafeUsingToString(Class<?> rawEnumCls, Ann
159156
*/
160157
@Deprecated
161158
public static EnumResolver constructUnsafeUsingMethod(Class<?> rawEnumCls, Method accessor) {
162-
return constructUnsafeUsingMethod(rawEnumCls, accessor, defaultAnnotationInstrospector);
159+
return constructUnsafeUsingMethod(rawEnumCls, accessor, null);
163160
}
164161

165162
/**
@@ -169,7 +166,8 @@ public static EnumResolver constructUnsafeUsingMethod(Class<?> rawEnumCls, Metho
169166
* @since 2.8
170167
*/
171168
@SuppressWarnings({ "unchecked" })
172-
public static EnumResolver constructUnsafeUsingMethod(Class<?> rawEnumCls, Method accessor, AnnotationIntrospector ai)
169+
public static EnumResolver constructUnsafeUsingMethod(Class<?> rawEnumCls, Method accessor,
170+
AnnotationIntrospector ai)
173171
{
174172
// wrong as ever but:
175173
Class<Enum<?>> enumCls = (Class<Enum<?>>) rawEnumCls;

0 commit comments

Comments
 (0)