diff --git a/config/src/main/java/com/typesafe/config/impl/ConfigBeanImpl.java b/config/src/main/java/com/typesafe/config/impl/ConfigBeanImpl.java index d4ec98df..6f425a95 100644 --- a/config/src/main/java/com/typesafe/config/impl/ConfigBeanImpl.java +++ b/config/src/main/java/com/typesafe/config/impl/ConfigBeanImpl.java @@ -170,7 +170,7 @@ public class ConfigBeanImpl { private static Object getListValue(Class<?> beanClass, Type parameterType, Class<?> parameterClass, Config config, String configPropName) { Type elementType = ((ParameterizedType)parameterType).getActualTypeArguments()[0]; - + if (elementType == Boolean.class) { return config.getBooleanList(configPropName); } else if (elementType == Integer.class) { @@ -194,12 +194,12 @@ public class ConfigBeanImpl { } else if (elementType == ConfigValue.class) { return config.getList(configPropName); } else if (hasAtLeastOneBeanProperty((Class<?>) elementType)) { - List<Object> beanList = new ArrayList<>(); - List<? extends Config> configList = config.getConfigList(configPropName); - for (Config listMember : configList) { - beanList.add(createInternal(listMember, (Class<?>) elementType)); - } - return beanList; + List<Object> beanList = new ArrayList<Object>(); + List<? extends Config> configList = config.getConfigList(configPropName); + for (Config listMember : configList) { + beanList.add(createInternal(listMember, (Class<?>) elementType)); + } + return beanList; } else { throw new ConfigException.BadBean("Bean property '" + configPropName + "' of class " + beanClass.getName() + " has unsupported list element type " + elementType); } diff --git a/config/src/test/java/beanconfig/ArraysConfig.java b/config/src/test/java/beanconfig/ArraysConfig.java index 0b5122d7..d1917370 100644 --- a/config/src/test/java/beanconfig/ArraysConfig.java +++ b/config/src/test/java/beanconfig/ArraysConfig.java @@ -128,12 +128,12 @@ public class ArraysConfig { public void setOfMemorySize(List<ConfigMemorySize> ofMemorySize) { this.ofMemorySize = ofMemorySize; } - + public List<StringsConfig> getOfStringBean() { - return ofStringBean; - } - + return ofStringBean; + } + public void setOfStringBean(List<StringsConfig> ofStringBean) { - this.ofStringBean = ofStringBean; - } + this.ofStringBean = ofStringBean; + } } diff --git a/config/src/test/java/beanconfig/StringsConfig.java b/config/src/test/java/beanconfig/StringsConfig.java index b6c7f574..334fb116 100644 --- a/config/src/test/java/beanconfig/StringsConfig.java +++ b/config/src/test/java/beanconfig/StringsConfig.java @@ -20,4 +20,26 @@ public class StringsConfig { public void setYes(String s) { yes = s; } + + @Override + public boolean equals(Object o) { + if (o instanceof StringsConfig) { + StringsConfig sc = (StringsConfig) o; + return sc.abcd.equals(abcd) && + sc.yes.equals(yes); + } else { + return false; + } + } + + @Override + public int hashCode() { + int h = 41 * (41 + abcd.hashCode()); + return h + yes.hashCode(); + } + + @Override + public String toString() { + return "StringsConfig(" + abcd + "," + yes + ")"; + } } diff --git a/config/src/test/resources/beanconfig/beanconfig01.conf b/config/src/test/resources/beanconfig/beanconfig01.conf index 80b328a9..11adc078 100644 --- a/config/src/test/resources/beanconfig/beanconfig01.conf +++ b/config/src/test/resources/beanconfig/beanconfig01.conf @@ -54,14 +54,14 @@ "ofDuration" : [1, 2h, 3 days], "ofMemorySize" : [1024, 1M, 1G], "ofStringBean" : [ - { - abcd : "testAbcdOne" - yes : "testYesOne" - }, - { - abcd : "testAbcdTwo" - yes : "testYesTwo" - } + { + abcd : "testAbcdOne" + yes : "testYesOne" + }, + { + abcd : "testAbcdTwo" + yes : "testYesTwo" + } ] }, "bytes" : { diff --git a/config/src/test/scala/com/typesafe/config/impl/ConfigBeanFactoryTest.scala b/config/src/test/scala/com/typesafe/config/impl/ConfigBeanFactoryTest.scala index 7d9a61c1..64b3f0c4 100644 --- a/config/src/test/scala/com/typesafe/config/impl/ConfigBeanFactoryTest.scala +++ b/config/src/test/scala/com/typesafe/config/impl/ConfigBeanFactoryTest.scala @@ -46,10 +46,10 @@ class ConfigBeanFactoryTest extends TestUtils { ConfigBeanFactory.create(config, classOf[ValidationBeanConfig]) } - val expecteds = Seq(Missing("propNotListedInConfig", 67, "string"), - WrongType("shouldBeInt", 68, "number", "boolean"), - WrongType("should-be-boolean", 69, "boolean", "number"), - WrongType("should-be-list", 70, "list", "string")) + val expecteds = Seq(Missing("propNotListedInConfig", 77, "string"), + WrongType("shouldBeInt", 78, "number", "boolean"), + WrongType("should-be-boolean", 79, "boolean", "number"), + WrongType("should-be-list", 80, "list", "string")) checkValidationException(e, expecteds) } @@ -111,15 +111,15 @@ class ConfigBeanFactoryTest extends TestUtils { ConfigMemorySize.ofBytes(1048576), ConfigMemorySize.ofBytes(1073741824)), beanConfig.getOfMemorySize.asScala) - + val stringsConfigOne = new StringsConfig(); stringsConfigOne.setAbcd("testAbcdOne") stringsConfigOne.setYes("testYesOne") val stringsConfigTwo = new StringsConfig(); stringsConfigTwo.setAbcd("testAbcdTwo") stringsConfigTwo.setYes("testYesTwo") - - assertEquals(List(stringsConfigOne, stringsConfigTwo), beanConfig.getOfStringBean) + + assertEquals(List(stringsConfigOne, stringsConfigTwo).asJava, beanConfig.getOfStringBean) } @Test