@@ -34,66 +34,52 @@ private EnumValues(Class<Enum<?>> enumClass, SerializableString[] textual)
3434 /**
3535 * NOTE: do NOT call this if configuration may change, and choice between toString()
3636 * and name() might change dynamically.
37+ *
38+ * @deprecated Since 3.1 call {@link #constructFromName} or {@link #constructFromToString}
39+ * instead.
3740 */
41+ @ Deprecated // since 3.1
3842 public static EnumValues construct (SerializationConfig config , AnnotatedClass enumClass ) {
3943 if (config .isEnabled (EnumFeature .WRITE_ENUMS_USING_TO_STRING )) {
4044 return constructFromToString (config , enumClass );
4145 }
4246 return constructFromName (config , enumClass );
4347 }
4448
45- /**
46- * @since 2.16
47- */
48- public static EnumValues constructFromName (MapperConfig <?> config , AnnotatedClass annotatedClass )
49+ public static EnumValues constructFromName (MapperConfig <?> config ,
50+ AnnotatedClass annotatedClass )
4951 {
50- // prepare data
51- final AnnotationIntrospector ai = config .getAnnotationIntrospector ();
52- final boolean useLowerCase = config .isEnabled (EnumFeature .WRITE_ENUMS_TO_LOWERCASE );
53- final Class <?> enumCls0 = annotatedClass .getRawType ();
54- final Class <Enum <?>> enumCls = _enumClass (enumCls0 );
55- final Enum <?>[] enumConstants = _enumConstants (enumCls0 );
52+ final EnumDefinition def = EnumDefinition .construct (config , annotatedClass );
53+ final Class <Enum <?>> enumCls = def .enumClass ();
54+ final Enum <?>[] enumConstants = def .enumConstants ();
5655
57- // introspect
58- String [] names = ai .findEnumValues (config , annotatedClass ,
59- enumConstants , new String [enumConstants .length ]);
60-
61- // build
56+ List <String > explicitNames = def .explicitNames ();
6257 SerializableString [] textual = new SerializableString [enumConstants .length ];
58+ final boolean useLowerCase = config .isEnabled (EnumFeature .WRITE_ENUMS_TO_LOWERCASE );
6359 for (int i = 0 , len = enumConstants .length ; i < len ; ++i ) {
6460 Enum <?> enumValue = enumConstants [i ];
65- String name = _findNameToUse (names [ i ] , enumValue .name (), useLowerCase );
61+ String name = _findNameToUse (explicitNames . get ( i ) , enumValue .name (), useLowerCase );
6662 textual [enumValue .ordinal ()] = config .compileString (name );
6763 }
6864 return construct (enumCls , textual );
6965 }
7066
71- /**
72- * @since 2.16
73- */
74- public static EnumValues constructFromToString (MapperConfig <?> config , AnnotatedClass annotatedClass )
67+ public static EnumValues constructFromToString (MapperConfig <?> config ,
68+ AnnotatedClass annotatedClass )
7569 {
76- // prepare data
77- final AnnotationIntrospector ai = config .getAnnotationIntrospector ();
78- final boolean useLowerCase = config .isEnabled (EnumFeature .WRITE_ENUMS_TO_LOWERCASE );
79- final Class <?> enumCls0 = annotatedClass .getRawType ();
80- final Class <Enum <?>> enumCls = _enumClass (enumCls0 );
81- final Enum <?>[] enumConstants = _enumConstants (enumCls0 );
82-
83- // introspect
84- String [] names = new String [enumConstants .length ];
85- if (ai != null ) {
86- ai .findEnumValues (config , annotatedClass , enumConstants , names );
87- }
70+ final EnumDefinition def = EnumDefinition .construct (config , annotatedClass );
71+ final Class <Enum <?>> enumCls = def .enumClass ();
72+ final Enum <?>[] enumConstants = def .enumConstants ();
8873
89- // build
74+ List < String > explicitNames = def . explicitNames ();
9075 SerializableString [] textual = new SerializableString [enumConstants .length ];
76+ final boolean useLowerCase = config .isEnabled (EnumFeature .WRITE_ENUMS_TO_LOWERCASE );
9177 for (int i = 0 ; i < enumConstants .length ; i ++) {
9278 String enumToString = enumConstants [i ].toString ();
9379 // 01-Feb-2024, tatu: [databind#4355] Nulls not great but... let's
9480 // coerce into "" for backwards compatibility
9581 enumToString = (enumToString == null ) ? "" : enumToString ;
96- String name = _findNameToUse (names [ i ] , enumToString , useLowerCase );
82+ String name = _findNameToUse (explicitNames . get ( i ) , enumToString , useLowerCase );
9783 textual [i ] = config .compileString (name );
9884 }
9985 return construct (enumCls , textual );
@@ -104,31 +90,21 @@ public static EnumValues constructFromToString(MapperConfig<?> config, Annotated
10490 * <p>
10591 * The output {@link EnumValues} should contain values that are symmetric to
10692 * {@link EnumResolver#constructUsingEnumNamingStrategy(DeserializationConfig, AnnotatedClass, EnumNamingStrategy)}.
107- *
108- * @since 2.16
10993 */
11094 public static EnumValues constructUsingEnumNamingStrategy (MapperConfig <?> config ,
11195 AnnotatedClass annotatedClass ,
11296 EnumNamingStrategy namingStrategy )
11397 {
114- // prepare data
115- final AnnotationIntrospector ai = config .getAnnotationIntrospector ();
116- final boolean useLowerCase = config .isEnabled (EnumFeature .WRITE_ENUMS_TO_LOWERCASE );
117- final Class <?> enumCls0 = annotatedClass .getRawType ();
118- final Class <Enum <?>> enumCls = _enumClass (enumCls0 );
119- final Enum <?>[] enumConstants = _enumConstants (enumCls0 );
120-
121- // introspect
122- String [] names = new String [enumConstants .length ];
123- if (ai != null ) {
124- ai .findEnumValues (config , annotatedClass , enumConstants , names );
125- }
98+ final EnumDefinition def = EnumDefinition .construct (config , annotatedClass );
99+ final Class <Enum <?>> enumCls = def .enumClass ();
100+ final Enum <?>[] enumConstants = def .enumConstants ();
126101
127- // build
102+ List < String > explicitNames = def . explicitNames ();
128103 SerializableString [] textual = new SerializableString [enumConstants .length ];
104+ final boolean useLowerCase = config .isEnabled (EnumFeature .WRITE_ENUMS_TO_LOWERCASE );
129105 for (int i = 0 , len = enumConstants .length ; i < len ; i ++) {
130106 Enum <?> enumValue = enumConstants [i ];
131- String name = _findNameToUse (names [ i ] , namingStrategy .convertEnumToExternalName (config ,
107+ String name = _findNameToUse (explicitNames . get ( i ) , namingStrategy .convertEnumToExternalName (config ,
132108 annotatedClass , enumValue .name ()), useLowerCase );
133109 textual [i ] = config .compileString (name );
134110 }
@@ -215,7 +191,7 @@ public EnumMap<?,SerializableString> internalMap() {
215191 EnumMap <?,SerializableString > result = _asMap ;
216192 if (result == null ) {
217193 // Alas, need to create it in a round-about way, due to typing constraints...
218- Map <Enum <?>,SerializableString > map = new LinkedHashMap <Enum <?>, SerializableString >();
194+ Map <Enum <?>,SerializableString > map = new LinkedHashMap <>();
219195 for (Enum <?> en : _values ) {
220196 map .put (en , _textual [en .ordinal ()]);
221197 }
0 commit comments