Repository: incubator-tamaya
Updated Branches:
  refs/heads/master e7e02c4b3 -> 69090c547


EnumConverter works with null values

Previously, EnumConverter would throw an NPE if passed a null value, but
only because of an attempted .toUpperCase() which didn't get caught.
This commit now passes null values through instead of throwing NPE.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/e977ab2e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/e977ab2e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/e977ab2e

Branch: refs/heads/master
Commit: e977ab2e3add7d2eaae9923ee7339b65d47a8a3e
Parents: 21391fe
Author: William Lieurance <[email protected]>
Authored: Thu Nov 29 03:46:53 2018 -0600
Committer: William Lieurance <[email protected]>
Committed: Thu Nov 29 03:49:54 2018 -0600

----------------------------------------------------------------------
 .../apache/tamaya/spisupport/EnumConverter.java | 20 +++++++++++++-------
 .../tamaya/spisupport/EnumConverterTest.java    |  6 ++++++
 2 files changed, 19 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/e977ab2e/code/spi-support/src/main/java/org/apache/tamaya/spisupport/EnumConverter.java
----------------------------------------------------------------------
diff --git 
a/code/spi-support/src/main/java/org/apache/tamaya/spisupport/EnumConverter.java
 
b/code/spi-support/src/main/java/org/apache/tamaya/spisupport/EnumConverter.java
index 9b06366..7d0a499 100644
--- 
a/code/spi-support/src/main/java/org/apache/tamaya/spisupport/EnumConverter.java
+++ 
b/code/spi-support/src/main/java/org/apache/tamaya/spisupport/EnumConverter.java
@@ -24,7 +24,6 @@ import org.apache.tamaya.spi.PropertyConverter;
 
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.math.RoundingMode;
 import java.util.Locale;
 import java.util.Objects;
 import java.util.logging.Level;
@@ -34,6 +33,7 @@ import java.util.logging.Logger;
  * Converter, converting from String to the given enum type.
  */
 public class EnumConverter<T> implements PropertyConverter<T> {
+
     private final Logger LOG = Logger.getLogger(EnumConverter.class.getName());
     private Class<T> enumType;
     private Method factory;
@@ -46,21 +46,23 @@ public class EnumConverter<T> implements 
PropertyConverter<T> {
         try {
             this.factory = enumType.getMethod("valueOf", String.class);
         } catch (NoSuchMethodException e) {
-            throw new ConfigException("Uncovertible enum type without 
createValue method found, please provide a custom " +
-                    "PropertyConverter for: " + enumType.getName());
+            throw new ConfigException("Uncovertible enum type without 
createValue method found, please provide a custom "
+                    + "PropertyConverter for: " + enumType.getName());
         }
     }
 
     @Override
     public T convert(String value, ConversionContext ctx) {
-        ctx.addSupportedFormats(getClass(),"<enumValue>");
+        ctx.addSupportedFormats(getClass(), "<enumValue>");
         try {
             return (T) factory.invoke(null, value);
         } catch (InvocationTargetException | IllegalAccessException e) {
             LOG.log(Level.FINEST, "Invalid enum createValue '" + value + "' 
for " + enumType.getName(), e);
         }
         try {
-            return (T) factory.invoke(null, value.toUpperCase(Locale.ENGLISH));
+            if (value != null) {
+                return (T) factory.invoke(null, 
value.toUpperCase(Locale.ENGLISH));
+            }
         } catch (InvocationTargetException | IllegalAccessException e) {
             LOG.log(Level.FINEST, "Invalid enum createValue '" + value + "' 
for " + enumType.getName(), e);
         }
@@ -69,8 +71,12 @@ public class EnumConverter<T> implements 
PropertyConverter<T> {
 
     @Override
     public boolean equals(Object o) {
-        if (this == o) return true;
-        if (!(o instanceof EnumConverter)) return false;
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof EnumConverter)) {
+            return false;
+        }
         EnumConverter<?> that = (EnumConverter<?>) o;
         return Objects.equals(enumType, that.enumType);
     }

http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/e977ab2e/code/spi-support/src/test/java/org/apache/tamaya/spisupport/EnumConverterTest.java
----------------------------------------------------------------------
diff --git 
a/code/spi-support/src/test/java/org/apache/tamaya/spisupport/EnumConverterTest.java
 
b/code/spi-support/src/test/java/org/apache/tamaya/spisupport/EnumConverterTest.java
index 22fcf43..fe21070 100644
--- 
a/code/spi-support/src/test/java/org/apache/tamaya/spisupport/EnumConverterTest.java
+++ 
b/code/spi-support/src/test/java/org/apache/tamaya/spisupport/EnumConverterTest.java
@@ -56,6 +56,12 @@ public class EnumConverterTest {
     }
 
     @Test
+    public void testConvert_Nulls() {
+        ConversionContext ctx = new 
ConversionContext.Builder(TypeLiteral.of(RoundingMode.class)).build();
+        assertThat(testConverter.convert(null, ctx)).isNull();
+    }
+
+    @Test
     public void callToConvertAddsMoreSupportedFormatsToTheContext() throws 
Exception {
         ConversionContext context = new ConversionContext.Builder("someKey", 
TypeLiteral.of(Enum.class)).build();
         EnumConverter<RoundingMode> converter = new 
EnumConverter<>(RoundingMode.class);

Reply via email to