From ac95b2fae838385686b1d3da983e2d3fdb235310 Mon Sep 17 00:00:00 2001 From: Naoki Takezoe Date: Fri, 8 Sep 2023 09:08:05 +0900 Subject: [PATCH 1/2] Use static PropertyNamingStrategy instances in POJOPropertiesCollector._findNamingStrategy() --- .../introspect/POJOPropertiesCollector.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java index 61961db4db..bba481c729 100644 --- a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java +++ b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java @@ -1450,6 +1450,50 @@ private PropertyNamingStrategy _findNamingStrategy() return pns; } } + + // PropertyNamingStrategy + if (namingClass == PropertyNamingStrategy.SnakeCaseStrategy.class) { + return PropertyNamingStrategies.SNAKE_CASE; + } + if (namingClass == PropertyNamingStrategy.UpperCamelCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_CAMEL_CASE; + } + if (namingClass == PropertyNamingStrategy.KebabCaseStrategy.class) { + return PropertyNamingStrategies.KEBAB_CASE; + } + if (namingClass == PropertyNamingStrategy.LowerDotCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_DOT_CASE; + } + if (namingClass == PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class) { + return PropertyNamingStrategies.SNAKE_CASE; + } + if (namingClass == PropertyNamingStrategy.PascalCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_CAMEL_CASE; + } + + // PropertyNamingStrategies + if (namingClass == PropertyNamingStrategies.SnakeCaseStrategy.class) { + return PropertyNamingStrategies.SNAKE_CASE; + } + if (namingClass == PropertyNamingStrategies.UpperSnakeCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_SNAKE_CASE; + } + if (namingClass == PropertyNamingStrategies.LowerCamelCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_CAMEL_CASE; + } + if (namingClass == PropertyNamingStrategies.UpperCamelCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_CAMEL_CASE; + } + if (namingClass == PropertyNamingStrategies.LowerCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_CASE; + } + if (namingClass == PropertyNamingStrategies.KebabCaseStrategy.class) { + return PropertyNamingStrategies.KEBAB_CASE; + } + if (namingClass == PropertyNamingStrategies.LowerDotCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_DOT_CASE; + } + return (PropertyNamingStrategy) ClassUtil.createInstance(namingClass, _config.canOverrideAccessModifiers()); } From 0c4e91194597927b429b5ef2a5dbe501ecc1ff9b Mon Sep 17 00:00:00 2001 From: takezoe Date: Sat, 7 Oct 2023 10:20:01 +0900 Subject: [PATCH 2/2] Move switching logic to PropertyNamingStrategies --- .../databind/PropertyNamingStrategies.java | 53 +++++++++++++++++++ .../introspect/POJOPropertiesCollector.java | 45 ++-------------- .../introspect/TestNamingStrategyStd.java | 49 +++++++++++++++++ 3 files changed, 106 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategies.java b/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategies.java index c0b7664dba..130f364a5f 100644 --- a/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategies.java +++ b/src/main/java/com/fasterxml/jackson/databind/PropertyNamingStrategies.java @@ -88,6 +88,59 @@ public abstract class PropertyNamingStrategies */ public static final PropertyNamingStrategy LOWER_DOT_CASE = LowerDotCaseStrategy.INSTANCE; + /** + * Returns a default instance of standard {@link PropertyNamingStrategy} which is statically defined in + * {@link PropertyNamingStrategies}. Otherwise, returns null. + * + * @param type type of {@link PropertyNamingStrategy} + * @return a default instance of standard {@link PropertyNamingStrategy}, or null + */ + public static PropertyNamingStrategy getDefaultInstanceOf(Class type) { + // PropertyNamingStrategy + if (type == PropertyNamingStrategy.SnakeCaseStrategy.class) { + return PropertyNamingStrategies.SNAKE_CASE; + } + if (type == PropertyNamingStrategy.UpperCamelCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_CAMEL_CASE; + } + if (type == PropertyNamingStrategy.KebabCaseStrategy.class) { + return PropertyNamingStrategies.KEBAB_CASE; + } + if (type == PropertyNamingStrategy.LowerDotCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_DOT_CASE; + } + if (type == PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class) { + return PropertyNamingStrategies.SNAKE_CASE; + } + if (type == PropertyNamingStrategy.PascalCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_CAMEL_CASE; + } + + // PropertyNamingStrategies + if (type == PropertyNamingStrategies.SnakeCaseStrategy.class) { + return PropertyNamingStrategies.SNAKE_CASE; + } + if (type == PropertyNamingStrategies.UpperSnakeCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_SNAKE_CASE; + } + if (type == PropertyNamingStrategies.LowerCamelCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_CAMEL_CASE; + } + if (type == PropertyNamingStrategies.UpperCamelCaseStrategy.class) { + return PropertyNamingStrategies.UPPER_CAMEL_CASE; + } + if (type == PropertyNamingStrategies.LowerCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_CASE; + } + if (type == PropertyNamingStrategies.KebabCaseStrategy.class) { + return PropertyNamingStrategies.KEBAB_CASE; + } + if (type == PropertyNamingStrategies.LowerDotCaseStrategy.class) { + return PropertyNamingStrategies.LOWER_DOT_CASE; + } + return null; + } + /* /********************************************************************** /* Public base class for simple implementations diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java index bba481c729..6839f6ccb9 100644 --- a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java +++ b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java @@ -1451,47 +1451,10 @@ private PropertyNamingStrategy _findNamingStrategy() } } - // PropertyNamingStrategy - if (namingClass == PropertyNamingStrategy.SnakeCaseStrategy.class) { - return PropertyNamingStrategies.SNAKE_CASE; - } - if (namingClass == PropertyNamingStrategy.UpperCamelCaseStrategy.class) { - return PropertyNamingStrategies.UPPER_CAMEL_CASE; - } - if (namingClass == PropertyNamingStrategy.KebabCaseStrategy.class) { - return PropertyNamingStrategies.KEBAB_CASE; - } - if (namingClass == PropertyNamingStrategy.LowerDotCaseStrategy.class) { - return PropertyNamingStrategies.LOWER_DOT_CASE; - } - if (namingClass == PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class) { - return PropertyNamingStrategies.SNAKE_CASE; - } - if (namingClass == PropertyNamingStrategy.PascalCaseStrategy.class) { - return PropertyNamingStrategies.UPPER_CAMEL_CASE; - } - - // PropertyNamingStrategies - if (namingClass == PropertyNamingStrategies.SnakeCaseStrategy.class) { - return PropertyNamingStrategies.SNAKE_CASE; - } - if (namingClass == PropertyNamingStrategies.UpperSnakeCaseStrategy.class) { - return PropertyNamingStrategies.UPPER_SNAKE_CASE; - } - if (namingClass == PropertyNamingStrategies.LowerCamelCaseStrategy.class) { - return PropertyNamingStrategies.LOWER_CAMEL_CASE; - } - if (namingClass == PropertyNamingStrategies.UpperCamelCaseStrategy.class) { - return PropertyNamingStrategies.UPPER_CAMEL_CASE; - } - if (namingClass == PropertyNamingStrategies.LowerCaseStrategy.class) { - return PropertyNamingStrategies.LOWER_CASE; - } - if (namingClass == PropertyNamingStrategies.KebabCaseStrategy.class) { - return PropertyNamingStrategies.KEBAB_CASE; - } - if (namingClass == PropertyNamingStrategies.LowerDotCaseStrategy.class) { - return PropertyNamingStrategies.LOWER_DOT_CASE; + PropertyNamingStrategy defaultInstance = PropertyNamingStrategies + .getDefaultInstanceOf((Class) namingClass); + if (defaultInstance != null) { + return defaultInstance; } return (PropertyNamingStrategy) ClassUtil.createInstance(namingClass, diff --git a/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java b/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java index a0e1a9791b..06bd7b8978 100644 --- a/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java +++ b/src/test/java/com/fasterxml/jackson/databind/introspect/TestNamingStrategyStd.java @@ -627,4 +627,53 @@ public void testNamingStrategiesHandlingNullAndEmpty() { assertEquals(" ", namingStrategy.translate(" ")); } } + + public void testGetDefaultInstance() { + // PropertyNamingStrategy + assertSame( + PropertyNamingStrategies.SNAKE_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.SnakeCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.UPPER_CAMEL_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.UpperCamelCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.KEBAB_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.KebabCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.LOWER_DOT_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.LowerDotCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.SNAKE_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)); + assertSame( + PropertyNamingStrategies.UPPER_CAMEL_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.PascalCaseStrategy.class)); + + // PropertyNamingStrategies + assertSame( + PropertyNamingStrategies.SNAKE_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.SnakeCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.UPPER_SNAKE_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.UpperSnakeCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.LOWER_CAMEL_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.LowerCamelCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.UPPER_CAMEL_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.UpperCamelCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.LOWER_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.LowerCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.KEBAB_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.KebabCaseStrategy.class)); + assertSame( + PropertyNamingStrategies.LOWER_DOT_CASE, + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategies.LowerDotCaseStrategy.class)); + + // others + assertNull( + PropertyNamingStrategies.getDefaultInstanceOf(PropertyNamingStrategy.class)); + } }