From 909b11854b78c839e03ce79419437ae4871e356f Mon Sep 17 00:00:00 2001 From: Philippe Collin Date: Wed, 30 Mar 2016 13:09:45 -0400 Subject: [PATCH] An empty string config value is now converted to an empty list when asking for a list. --- .../com/typesafe/config/impl/DefaultTransformer.java | 7 ++++++- .../java/com/typesafe/config/impl/SimpleConfig.java | 3 ++- config/src/test/resources/test01.conf | 3 ++- .../scala/com/typesafe/config/impl/ConfigTest.scala | 12 ++++++++++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/config/src/main/java/com/typesafe/config/impl/DefaultTransformer.java b/config/src/main/java/com/typesafe/config/impl/DefaultTransformer.java index b51ceb25..9b5d1c69 100644 --- a/config/src/main/java/com/typesafe/config/impl/DefaultTransformer.java +++ b/config/src/main/java/com/typesafe/config/impl/DefaultTransformer.java @@ -48,7 +48,12 @@ final class DefaultTransformer { } break; case LIST: - // can't go STRING to LIST automatically + // can't go STRING to LIST automatically unless the string is empty + if (s.equals("")) { + // Convert empty string to empty list + ArrayList emptyList = new ArrayList(); + return new SimpleConfigList(value.origin(), emptyList); + } break; case OBJECT: // can't go STRING to OBJECT automatically diff --git a/config/src/main/java/com/typesafe/config/impl/SimpleConfig.java b/config/src/main/java/com/typesafe/config/impl/SimpleConfig.java index 2d76efb6..c8a4df24 100644 --- a/config/src/main/java/com/typesafe/config/impl/SimpleConfig.java +++ b/config/src/main/java/com/typesafe/config/impl/SimpleConfig.java @@ -838,7 +838,8 @@ final class SimpleConfig implements Config, MergeableValue, Serializable { } } else if (referenceType == ConfigValueType.LIST) { // objects may be convertible to lists if they have numeric keys - if (value instanceof SimpleConfigList || value instanceof SimpleConfigObject) { + // empty strings may also be converted to lists + if (value instanceof SimpleConfigList || value instanceof SimpleConfigObject || value instanceof ConfigString) { return true; } else { return false; diff --git a/config/src/test/resources/test01.conf b/config/src/test/resources/test01.conf index c71c2ca9..2603426e 100644 --- a/config/src/test/resources/test01.conf +++ b/config/src/test/resources/test01.conf @@ -26,7 +26,8 @@ "true" : "true", "yes" : "yes", "false" : "false", - "no" : "no" + "no" : "no", + "empty": "" }, "arrays" : { diff --git a/config/src/test/scala/com/typesafe/config/impl/ConfigTest.scala b/config/src/test/scala/com/typesafe/config/impl/ConfigTest.scala index fadd435b..2c491cc4 100644 --- a/config/src/test/scala/com/typesafe/config/impl/ConfigTest.scala +++ b/config/src/test/scala/com/typesafe/config/impl/ConfigTest.scala @@ -588,6 +588,18 @@ class ConfigTest extends TestUtils { assertEquals(Seq(), conf.getBooleanList("arrays.empty").asScala) assertEquals(Seq(), conf.getNumberList("arrays.empty").asScala) assertEquals(Seq(), conf.getList("arrays.empty").asScala) + + // get empty array from empty string as any type of array + assertEquals(Seq(), conf.getAnyRefList("strings.empty").asScala) + assertEquals(Seq(), conf.getIntList("strings.empty").asScala) + assertEquals(Seq(), conf.getLongList("strings.empty").asScala) + assertEquals(Seq(), conf.getStringList("strings.empty").asScala) + assertEquals(Seq(), conf.getLongList("strings.empty").asScala) + assertEquals(Seq(), conf.getDoubleList("strings.empty").asScala) + assertEquals(Seq(), conf.getObjectList("strings.empty").asScala) + assertEquals(Seq(), conf.getBooleanList("strings.empty").asScala) + assertEquals(Seq(), conf.getNumberList("strings.empty").asScala) + assertEquals(Seq(), conf.getList("strings.empty").asScala) // get typed arrays assertEquals(Seq(1, 2, 3), conf.getIntList("arrays.ofInt").asScala)