diff options
author | Tatu Saloranta <tatu.saloranta@iki.fi> | 2019-11-24 15:20:15 -0800 |
---|---|---|
committer | Tatu Saloranta <tatu.saloranta@iki.fi> | 2019-11-24 15:20:15 -0800 |
commit | dd5f6dee81423b29a8b38baa2320143b5bb34769 (patch) | |
tree | 71089255aa6063d73d04efbcc72dc68fa97b2c4f /src/main/java/com/fasterxml/jackson/databind/introspect | |
parent | 9c14c46a66cff15d8d90266f40e641271e312c78 (diff) | |
download | jackson-databind-dd5f6dee81423b29a8b38baa2320143b5bb34769.tar.gz |
Fix #2352
Diffstat (limited to 'src/main/java/com/fasterxml/jackson/databind/introspect')
2 files changed, 31 insertions, 0 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.java b/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.java index aa288b9e1..60efe6e52 100644 --- a/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.java +++ b/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.java @@ -617,6 +617,13 @@ public class AnnotationIntrospectorPair } @Override + public void findEnumAliases(Class<?> enumType, Enum<?>[] enumValues, String[][] aliases) { + // reverse order to give _primary higher precedence + _secondary.findEnumAliases(enumType, enumValues, aliases); + _primary.findEnumAliases(enumType, enumValues, aliases); + } + + @Override public Enum<?> findDefaultEnumValue(Class<Enum<?>> enumCls) { Enum<?> en = _primary.findDefaultEnumValue(enumCls); return (en == null) ? _secondary.findDefaultEnumValue(enumCls) : en; diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.java b/src/main/java/com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.java index 55c11d187..cbe026598 100644 --- a/src/main/java/com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.java +++ b/src/main/java/com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.java @@ -234,6 +234,30 @@ public class JacksonAnnotationIntrospector return names; } + @Override // since 2.11 + public void findEnumAliases(Class<?> enumType, Enum<?>[] enumValues, String[][] aliasList) + { + // Main complication: discrepancy between Field that represent enum value, + // Enum abstraction; joint by name but not reference + for (Field f : ClassUtil.getDeclaredFields(enumType)) { + if (f.isEnumConstant()) { + JsonAlias aliasAnnotation = f.getAnnotation(JsonAlias.class); + if (aliasAnnotation != null) { + String[] aliases = aliasAnnotation.value(); + if (aliases.length != 0) { + final String name = f.getName(); + // Find matching enum (could create Ma + for (int i = 0, end = enumValues.length; i < end; ++i) { + if (name.equals(enumValues[i].name())) { + aliasList[i] = aliases; + } + } + } + } + } + } + } + /** * Finds the Enum value that should be considered the default value, if possible. * <p> |