Skip to content

Commit 784d48f

Browse files
authored
Change EnumNamingStrategy.convertEnumToExternalName() to take MapperConfig argument (#4679)
1 parent 83e03da commit 784d48f

File tree

7 files changed

+28
-8
lines changed

7 files changed

+28
-8
lines changed

src/main/java/tools/jackson/databind/EnumNamingStrategies.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package tools.jackson.databind;
22

3+
import tools.jackson.databind.cfg.MapperConfig;
4+
import tools.jackson.databind.introspect.AnnotatedClass;
5+
36
/**
47
* A container class for implementations of the {@link EnumNamingStrategy} interface.
58
*/
@@ -49,7 +52,9 @@ public static class CamelCaseStrategy implements EnumNamingStrategy
4952
public static final CamelCaseStrategy INSTANCE = new CamelCaseStrategy();
5053

5154
@Override
52-
public String convertEnumToExternalName(String enumName) {
55+
public String convertEnumToExternalName(MapperConfig<?> config, AnnotatedClass cls,
56+
String enumName)
57+
{
5358
if (enumName == null) {
5459
return null;
5560
}

src/main/java/tools/jackson/databind/EnumNamingStrategy.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package tools.jackson.databind;
22

3+
import tools.jackson.databind.cfg.MapperConfig;
4+
import tools.jackson.databind.introspect.AnnotatedClass;
5+
36
/**
47
* Defines how the string representation of an enum is converted into an external property name for mapping
58
* during deserialization.
@@ -11,9 +14,13 @@ public interface EnumNamingStrategy {
1114
* the implementation of this {@link EnumNamingStrategy}.
1215
*
1316
* @param enumName the name of the enum value to translate
17+
* @param config the mapper configuration
18+
* @param cls the Enum class
19+
*
1420
* @return the external property name that corresponds to the given <code>enumName</code>
1521
* according to the implementation of this {@link EnumNamingStrategy}.
1622
*/
17-
public String convertEnumToExternalName(String enumName);
23+
public String convertEnumToExternalName(MapperConfig<?> config, AnnotatedClass cls,
24+
String enumName);
1825

1926
}

src/main/java/tools/jackson/databind/deser/jdk/EnumDeserializer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
import tools.jackson.databind.annotation.JacksonStdImpl;
1212
import tools.jackson.databind.cfg.CoercionAction;
1313
import tools.jackson.databind.cfg.CoercionInputShape;
14+
import tools.jackson.databind.cfg.MapperConfig;
1415
import tools.jackson.databind.deser.SettableBeanProperty;
1516
import tools.jackson.databind.deser.ValueInstantiator;
1617
import tools.jackson.databind.deser.std.StdScalarDeserializer;
18+
import tools.jackson.databind.introspect.AnnotatedClass;
1719
import tools.jackson.databind.introspect.AnnotatedMethod;
1820
import tools.jackson.databind.type.LogicalType;
1921
import tools.jackson.databind.util.ClassUtil;
@@ -53,7 +55,7 @@ public class EnumDeserializer
5355

5456
/**
5557
* Look up map with <b>key</b> as <code>Enum.name()</code> converted by
56-
* {@link EnumNamingStrategy#convertEnumToExternalName(String)}
58+
* {@link EnumNamingStrategy#convertEnumToExternalName(MapperConfig, AnnotatedClass, String)}
5759
* and <b>value</b> as Enums.
5860
*/
5961
protected final CompactStringObjectMap _lookupByEnumNaming;

src/main/java/tools/jackson/databind/deser/jdk/JDKKeyDeserializer.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import tools.jackson.databind.*;
1717
import tools.jackson.databind.annotation.JacksonStdImpl;
1818
import tools.jackson.databind.cfg.EnumFeature;
19+
import tools.jackson.databind.cfg.MapperConfig;
20+
import tools.jackson.databind.introspect.AnnotatedClass;
1921
import tools.jackson.databind.introspect.AnnotatedMethod;
2022
import tools.jackson.databind.util.ClassUtil;
2123
import tools.jackson.databind.util.EnumResolver;
@@ -375,7 +377,7 @@ final static class EnumKD extends JDKKeyDeserializer
375377

376378
/**
377379
* Look up map with <b>key</b> as <code>Enum.name()</code> converted by
378-
* {@link EnumNamingStrategy#convertEnumToExternalName(String)}
380+
* {@link EnumNamingStrategy#convertEnumToExternalName(MapperConfig, AnnotatedClass, String)}
379381
* and <b>value</b> as Enums.
380382
*
381383
* @since 2.15

src/main/java/tools/jackson/databind/util/EnumResolver.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,9 @@ public static EnumResolver constructUsingEnumNamingStrategy(DeserializationConfi
207207
Enum<?> anEnum = enumConstants[i];
208208
String name = names[i];
209209
if (name == null) {
210-
name = enumNamingStrategy.convertEnumToExternalName(anEnum.name());
210+
name = enumNamingStrategy.convertEnumToExternalName(config,
211+
annotatedClass,
212+
anEnum.name());
211213
}
212214
map.put(name, anEnum);
213215
String[] aliases = allAliases[i];

src/main/java/tools/jackson/databind/util/EnumValues.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ public static EnumValues constructUsingEnumNamingStrategy(MapperConfig<?> config
144144
Enum<?> enumValue = enumConstants[i];
145145
String name = names[i];
146146
if (name == null) {
147-
name = namingStrategy.convertEnumToExternalName(enumValue.name());
147+
name = namingStrategy.convertEnumToExternalName(config, annotatedClass,
148+
enumValue.name());
148149
}
149150
if (useLowerCase) {
150151
name = name.toLowerCase();

src/test/java/tools/jackson/databind/introspect/EnumNamingStrategiesTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import org.junit.jupiter.api.Test;
77

88
import tools.jackson.databind.EnumNamingStrategies;
9+
import tools.jackson.databind.cfg.MapperConfig;
910
import tools.jackson.databind.testutil.DatabindTestUtil;
1011

1112
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -112,7 +113,7 @@ public class EnumNamingStrategiesTest extends DatabindTestUtil
112113

113114
/**
114115
* Unit test to verify the implementation of
115-
* {@link tools.jackson.databind.EnumNamingStrategies.CamelCaseStrategy#convertEnumToExternalName(String)}
116+
* {@link tools.jackson.databind.EnumNamingStrategies.CamelCaseStrategy#convertEnumToExternalName(MapperConfig, AnnotatedClass, String)}
116117
* without the context of an ObjectMapper.
117118
*/
118119
@Test
@@ -122,7 +123,7 @@ public void testCamelCaseStrategyStandAlone() {
122123
final String expected = pair[1];
123124

124125
String actual = EnumNamingStrategies.CamelCaseStrategy.INSTANCE
125-
.convertEnumToExternalName(input);
126+
.convertEnumToExternalName(null, null, input);
126127

127128
assertEquals(expected, actual);
128129
}

0 commit comments

Comments
 (0)