Skip to content

Commit c67804f

Browse files
committed
Fix all conflicts from rebase.
1 parent 1d336f3 commit c67804f

File tree

7 files changed

+159
-158
lines changed

7 files changed

+159
-158
lines changed

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ private static String normalizeWord(String word) {
104104
return word;
105105
}
106106
return new StringBuilder(length)
107-
.append(charToUpperCaseIfLower(word.charAt(0)))
108-
.append(toLowerCase(word.substring(1)))
109-
.toString();
107+
.append(charToUpperCaseIfLower(word.charAt(0)))
108+
.append(toLowerCase(word.substring(1)))
109+
.toString();
110110
}
111111

112112
private static String toLowerCase(String string) {

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

+56-55
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
import com.fasterxml.jackson.core.*;
1010

1111
import com.fasterxml.jackson.databind.*;
12+
import com.fasterxml.jackson.databind.annotation.EnumNaming;
1213
import com.fasterxml.jackson.databind.annotation.JacksonStdImpl;
1314
import com.fasterxml.jackson.databind.cfg.CoercionAction;
1415
import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
1516
import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
1617
import com.fasterxml.jackson.databind.deser.SettableBeanProperty;
1718
import com.fasterxml.jackson.databind.deser.ValueInstantiator;
1819
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
20+
import com.fasterxml.jackson.databind.introspect.EnumPropertiesCollector;
1921
import com.fasterxml.jackson.databind.type.LogicalType;
2022
import com.fasterxml.jackson.databind.util.ClassUtil;
2123
import com.fasterxml.jackson.databind.util.CompactStringObjectMap;
@@ -66,31 +68,21 @@ public class EnumDeserializer
6668
*/
6769
protected final boolean _isFromIntValue;
6870

69-
protected Boolean _useEnumNaming;
70-
71-
protected volatile EnumNamingStrategy _namingStrategy;
72-
7371
/**
74-
* Marker flag for cases where we expect actual integral value for Enum,
75-
* based on {@code @JsonValue} (and equivalent) annotated accessor.
72+
* Marker flag for deciding whether to search for {@link com.fasterxml.jackson.databind.annotation.EnumNaming}
73+
* annotation. Value starts as null to indicate verification has not been performed yet.
7674
*
7775
* @since 2.15
7876
*/
79-
protected boolean _isEnumNamingSet;
77+
private volatile Boolean _hasEnumNaming = null;
8078

8179
/**
80+
* Map with key as converted property class defined implementation of {@link EnumNamingStrategy}
81+
* and with value as Enum names collected using <code>Enum.name()</code>.
82+
*
8283
* @since 2.15
8384
*/
84-
protected EnumNamingStrategy _namingStrategy = new EnumNamingStrategies.NoOpEnumNamingStrategy();
85-
86-
87-
private void _initEnumNamingStrategy() {
88-
EnumNaming enumNamingAnnotation = _valueClass.getAnnotation(EnumNaming.class);
89-
if (enumNamingAnnotation != null) {
90-
_isEnumNamingSet = true;
91-
ClassUtil.createInstance(enumNamingAnnotation.value(), true);
92-
}
93-
}
85+
protected volatile CompactStringObjectMap _lookupByEnumNaming;
9486

9587
/**
9688
* @since 2.9
@@ -103,7 +95,6 @@ public EnumDeserializer(EnumResolver byNameResolver, Boolean caseInsensitive)
10395
_enumDefaultValue = byNameResolver.getDefaultValue();
10496
_caseInsensitive = caseInsensitive;
10597
_isFromIntValue = byNameResolver.isFromIntValue();
106-
_initEnumNamingStrategy();
10798
}
10899

109100
/**
@@ -120,7 +111,6 @@ protected EnumDeserializer(EnumDeserializer base, Boolean caseInsensitive,
120111
_isFromIntValue = base._isFromIntValue;
121112
_useDefaultValueForUnknownEnum = useDefaultValueForUnknownEnum;
122113
_useNullForUnknownEnum = useNullForUnknownEnum;
123-
_initEnumNamingStrategy();
124114
}
125115

126116
/**
@@ -282,13 +272,9 @@ protected Object _fromString(JsonParser p, DeserializationContext ctxt,
282272
{
283273
CompactStringObjectMap lookup = ctxt.isEnabled(DeserializationFeature.READ_ENUMS_USING_TO_STRING)
284274
? _getToStringLookup(ctxt) : _lookupByName;
285-
Object result = lookup.find(text);
286-
287-
if (result == null && _getUseEnumNaming()) {
288-
String translatedText = _getNamingStrategy().translate(text);
289-
result = lookup.find(translatedText);
290-
}
275+
lookup = _hasEnumNaming(ctxt) ? _getEnumNamingLookup(ctxt) : lookup;
291276

277+
Object result = lookup.find(text);
292278
if (result == null) {
293279
String trimmed = text.trim();
294280
if ((trimmed == text) || (result = lookup.find(trimmed)) == null) {
@@ -352,12 +338,6 @@ private final Object _deserializeAltString(JsonParser p, DeserializationContext
352338
CompactStringObjectMap lookup, String nameOrig) throws IOException
353339
{
354340
String name = nameOrig.trim();
355-
356-
if (_isEnumNamingSet) {
357-
String translatedValue = _namingStrategy.translate(name);
358-
return lookup.find(translatedValue);
359-
}
360-
361341
if (name.isEmpty()) { // empty or blank
362342
// 07-Jun-2021, tatu: [databind#3171] Need to consider Default value first
363343
// (alas there's bit of duplication here)
@@ -454,30 +434,6 @@ protected CompactStringObjectMap _getToStringLookup(DeserializationContext ctxt)
454434
return lookup;
455435
}
456436

457-
protected Boolean _getUseEnumNaming() {
458-
if (_useEnumNaming == null) {
459-
_useEnumNaming = _valueClass.getAnnotation(EnumNaming.class) != null;
460-
}
461-
return _useEnumNaming;
462-
}
463-
464-
protected EnumNamingStrategy _getNamingStrategy() {
465-
EnumNamingStrategy namingStrategy = _namingStrategy;
466-
if (namingStrategy == null) {
467-
synchronized (this) {
468-
namingStrategy = _namingStrategy;
469-
if (namingStrategy == null) {
470-
EnumNaming enumNamingAnnotation = _valueClass.getAnnotation(EnumNaming.class);
471-
namingStrategy = enumNamingAnnotation == null
472-
? new EnumNamingStrategies.NoOpEnumNamingStrategy()
473-
: ClassUtil.createInstance(enumNamingAnnotation.value(), true);
474-
_namingStrategy = namingStrategy;
475-
}
476-
}
477-
}
478-
return namingStrategy;
479-
}
480-
481437
// @since 2.15
482438
protected boolean useNullForUnknownEnum(DeserializationContext ctxt) {
483439
return Boolean.TRUE.equals(_useNullForUnknownEnum)
@@ -490,4 +446,49 @@ protected boolean useDefaultValueForUnknownEnum(DeserializationContext ctxt) {
490446
&& (Boolean.TRUE.equals(_useDefaultValueForUnknownEnum)
491447
|| ctxt.isEnabled(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE));
492448
}
449+
450+
/**
451+
* Checks wheather current Enum class is annotated with
452+
* {@link com.fasterxml.jackson.databind.annotation.EnumNaming}
453+
*
454+
* @since 2.15
455+
*/
456+
private boolean _hasEnumNaming(DeserializationContext ctxt) {
457+
Boolean exists = _hasEnumNaming;
458+
if (exists == null) {
459+
synchronized (this) {
460+
exists = _hasEnumNaming;
461+
if (exists == null) {
462+
exists = _getEnumNamingLookup(ctxt) != null;
463+
_hasEnumNaming = exists;
464+
}
465+
}
466+
}
467+
return exists;
468+
}
469+
470+
/**
471+
* Returns the CompactStringObjectMap used for enum name lookup of naming strategy.
472+
*
473+
* @since 2.15
474+
*/
475+
protected CompactStringObjectMap _getEnumNamingLookup(DeserializationContext ctxt) {
476+
CompactStringObjectMap lookup = _lookupByEnumNaming;
477+
if (lookup == null) {
478+
synchronized (this) {
479+
lookup = _lookupByEnumNaming;
480+
if (lookup == null) {
481+
EnumNamingStrategy namingStrategy = EnumPropertiesCollector
482+
.findEnumNamingStrategy(ctxt.getConfig(), _valueClass);
483+
if (namingStrategy != null) {
484+
lookup = EnumResolver
485+
.constructUsingEnumNamingStrategy(ctxt.getConfig(), _enumClass(), namingStrategy)
486+
.constructLookup();
487+
_lookupByEnumNaming = lookup;
488+
}
489+
}
490+
}
491+
}
492+
return lookup;
493+
}
493494
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ private static EnumNamingStrategy _findEnumNamingStrategy(Object namingDef, bool
5959
// X or Y" -- need to throw an exception after the fact
6060
if (!(namingDef instanceof Class)) {
6161
reportProblem("AnnotationIntrospector returned EnumNamingStrategy definition of type %s"
62-
+ "; expected type `Class<EnumNamingStrategy>` instead", ClassUtil.classNameOf(namingDef));
62+
+ "; expected type `Class<EnumNamingStrategy>` instead", ClassUtil.classNameOf(namingDef));
6363
}
6464

6565
Class<?> namingClass = (Class<?>) namingDef;
@@ -70,7 +70,7 @@ private static EnumNamingStrategy _findEnumNamingStrategy(Object namingDef, bool
7070

7171
if (!EnumNamingStrategy.class.isAssignableFrom(namingClass)) {
7272
reportProblem("AnnotationIntrospector returned Class %s; expected `Class<EnumNamingStrategy>`",
73-
ClassUtil.classNameOf(namingClass));
73+
ClassUtil.classNameOf(namingClass));
7474
}
7575

7676
return (EnumNamingStrategy) ClassUtil.createInstance(namingClass, canOverrideAccessModifiers);

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

+5-6
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public class EnumSerializer
5656
*
5757
* @since 2.15
5858
*/
59-
private volatile Boolean _hasEnumNaming = null;
59+
private volatile Boolean _hasEnumNaming;
6060

6161
/**
6262
* Map with key as converted property class defined implementation of {@link EnumNamingStrategy}
@@ -126,21 +126,20 @@ public JsonSerializer<?> createContextual(SerializerProvider serializers,
126126
*
127127
* @since 2.15
128128
*/
129-
private boolean _hasEnumNaming(SerializationConfig ctxt) {
129+
private boolean _hasEnumNaming(SerializationConfig config) {
130130
Boolean exists = _hasEnumNaming;
131131
if (exists == null) {
132132
synchronized (this) {
133133
exists = _hasEnumNaming;
134134
if (exists == null) {
135-
exists = EnumPropertiesCollector.findEnumNamingStrategy(ctxt, _handledType) != null;
135+
exists = _getEnumNamingValues(config) != null;
136136
_hasEnumNaming = exists;
137137
}
138138
}
139139
}
140140
return exists;
141141
}
142142

143-
144143
/**
145144
* Returns {@link EnumValues} to use for enum name lookup of naming strategy.
146145
*
@@ -152,8 +151,8 @@ protected EnumValues _getEnumNamingValues(SerializationConfig config) {
152151
synchronized (this) {
153152
lookup = _valuesByEnumNaming;
154153
if (lookup == null) {
155-
EnumNamingStrategy namingStrategy = EnumPropertiesCollector
156-
.findEnumNamingStrategy(config, _handledType);
154+
EnumNamingStrategy namingStrategy =
155+
EnumPropertiesCollector.findEnumNamingStrategy(config, _handledType);
157156
if (namingStrategy != null) {
158157
lookup = EnumValues.constructUsingEnumNaming(config, _handledType, namingStrategy);
159158
_valuesByEnumNaming = lookup;

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ protected static EnumResolver _constructFor(Class<?> enumCls0,
114114

115115
/**
116116
* Factory method for constructing resolver that maps from Enum.toString() into
117-
* Enum value *
117+
* Enum value
118+
*
118119
* @since 2.12
119120
*/
120121
public static EnumResolver constructUsingToString(DeserializationConfig config,

0 commit comments

Comments
 (0)