Skip to content

Commit 54aa38d

Browse files
committed
More clean up after #2478
1 parent 479da17 commit 54aa38d

File tree

8 files changed

+16
-7
lines changed

8 files changed

+16
-7
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ public boolean isConcrete() {
292292
public final boolean isEnumType() {
293293
// 29-Sep-2019, tatu: `Class.isEnum()` not enough to detect custom subtypes,
294294
// but for some reason this fix will break couple of unit tests:
295+
// See [databind#2480]:
295296
// return ClassUtil.isEnumType(_class);
296297
return _class.isEnum();
297298
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -1327,7 +1327,7 @@ public JsonDeserializer<?> createMapDeserializer(DeserializationContext ctxt,
13271327
inst = findValueInstantiator(ctxt, beanDesc);
13281328
}
13291329
Class<?> kt = keyType.getRawClass();
1330-
if (kt == null || !kt.isEnum()) {
1330+
if (kt == null || !ClassUtil.isEnumType(kt)) {
13311331
throw new IllegalArgumentException("Cannot construct EnumMap; generic (key) type not available");
13321332
}
13331333
deser = new EnumMapDeserializer(type, inst, null,

src/main/java/com/fasterxml/jackson/databind/deser/impl/CreatorCollector.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ else if (newType.isAssignableFrom(oldType)) {
336336
* @since 2.8.1
337337
*/
338338
protected boolean _isEnumValueOf(AnnotatedWithParams creator) {
339-
return creator.getDeclaringClass().isEnum()
339+
return ClassUtil.isEnumType(creator.getDeclaringClass())
340340
&& "valueOf".equals(creator.getName());
341341
}
342342
}

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.fasterxml.jackson.databind.*;
99
import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
1010
import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
11+
import com.fasterxml.jackson.databind.util.ClassUtil;
1112

1213
/**
1314
* Standard deserializer for {@link EnumSet}s.
@@ -50,7 +51,7 @@ public EnumSetDeserializer(JavaType enumType, JsonDeserializer<?> deser)
5051
_enumType = enumType;
5152
_enumClass = (Class<Enum>) enumType.getRawClass();
5253
// sanity check
53-
if (!_enumClass.isEnum()) {
54+
if (!ClassUtil.isEnumType(_enumClass)) {
5455
throw new IllegalArgumentException("Type "+enumType+" not Java Enum type");
5556
}
5657
_enumDeserializer = (JsonDeserializer<Enum<?>>) deser;

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ public Object deserializeKey(String key, DeserializationContext ctxt)
139139
re.getClass().getName(),
140140
ClassUtil.exceptionMessage(re));
141141
}
142-
if (_keyClass.isEnum() && ctxt.getConfig().isEnabled(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL)) {
142+
if (ClassUtil.isEnumType(_keyClass)
143+
&& ctxt.getConfig().isEnabled(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL)) {
143144
return null;
144145
}
145146
return ctxt.handleWeirdKey(_keyClass, key, "not a valid representation");

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ protected AnnotatedConstructor constructNonDefaultConstructor(ClassUtil.Ctor cto
274274
resolvedAnnotations = null;
275275
Class<?> dc = ctor.getDeclaringClass();
276276
// (a) is enum, which have two extra hidden params (name, index)
277-
if (dc.isEnum() && (paramCount == paramAnns.length + 2)) {
277+
if (ClassUtil.isEnumType(dc) && (paramCount == paramAnns.length + 2)) {
278278
Annotation[][] old = paramAnns;
279279
paramAnns = new Annotation[old.length+2][];
280280
System.arraycopy(old, 0, paramAnns, 2, old.length);

src/main/java/com/fasterxml/jackson/databind/jsontype/impl/ClassNameIdResolver.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,12 @@ protected String _idFrom(Object value, Class<?> cls, TypeFactory typeFactory)
9090
{
9191
// Need to ensure that "enum subtypes" work too
9292
if (ClassUtil.isEnumType(cls)) {
93-
if (!cls.isEnum()) { // means that it's sub-class of base enum, so:
93+
// 29-Sep-2019, tatu: `Class.isEnum()` only returns true for main declaration,
94+
// but NOT from sub-class thereof (extending individual values). This
95+
// is why additional resolution is needed: we want class that contains
96+
// enumeration instances.
97+
if (!cls.isEnum()) {
98+
// and this parent would then have `Enum.class` as its parent:
9499
cls = cls.getSuperclass();
95100
}
96101
}

src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.fasterxml.jackson.databind.ser.impl.PropertyBasedObjectIdGenerator;
2424
import com.fasterxml.jackson.databind.ser.impl.WritableObjectId;
2525
import com.fasterxml.jackson.databind.util.ArrayBuilders;
26+
import com.fasterxml.jackson.databind.util.ClassUtil;
2627
import com.fasterxml.jackson.databind.util.Converter;
2728
import com.fasterxml.jackson.databind.util.NameTransformer;
2829

@@ -425,7 +426,7 @@ public JsonSerializer<?> createContextual(SerializerProvider provider,
425426
shape = format.getShape();
426427
// or, alternatively, asked to revert "back to" other representations...
427428
if ((shape != JsonFormat.Shape.ANY) && (shape != _serializationShape)) {
428-
if (_handledType.isEnum()) {
429+
if (ClassUtil.isEnumType(_handledType)) {
429430
switch (shape) {
430431
case STRING:
431432
case NUMBER:

0 commit comments

Comments
 (0)