Repository: brooklyn-server
Updated Branches:
  refs/heads/master 1f8f9eb9d -> 75e8cc8c3


Fix type-coercion to Iterable<?>

Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/6e6957e2
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/6e6957e2
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/6e6957e2

Branch: refs/heads/master
Commit: 6e6957e2ed2b37387491a654b32d25199e748dd2
Parents: 1f8f9eb
Author: Aled Sage <[email protected]>
Authored: Thu May 25 11:55:01 2017 +0100
Committer: Aled Sage <[email protected]>
Committed: Thu May 25 11:55:01 2017 +0100

----------------------------------------------------------------------
 .../brooklyn/util/javalang/coerce/TypeCoercerExtensible.java | 8 ++++----
 .../brooklyn/util/javalang/coerce/TypeCoercionsTest.java     | 7 +++++++
 2 files changed, 11 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6e6957e2/utils/common/src/main/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercerExtensible.java
----------------------------------------------------------------------
diff --git 
a/utils/common/src/main/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercerExtensible.java
 
b/utils/common/src/main/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercerExtensible.java
index a673131..7aeb3fb 100644
--- 
a/utils/common/src/main/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercerExtensible.java
+++ 
b/utils/common/src/main/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercerExtensible.java
@@ -120,8 +120,8 @@ public class TypeCoercerExtensible implements TypeCoercer {
 
         //recursive coercion of parameterized collections and map entries
         if (targetTypeToken.getType() instanceof ParameterizedType) {
-            if (value instanceof Collection && 
Collection.class.isAssignableFrom(targetType)) {
-                result = tryCoerceCollection(value, targetTypeToken, 
targetType);
+            if (value instanceof Iterable && 
Iterable.class.isAssignableFrom(targetType)) {
+                result = tryCoerceIterable(value, targetTypeToken, targetType);
                 
                 if (result != null && result.isAbsent() && 
targetType.isInstance(value)) {
                     log.warn("Failed to coerce collection from " + 
value.getClass().getName() + " to " + targetTypeToken  
@@ -238,11 +238,11 @@ public class TypeCoercerExtensible implements TypeCoercer 
{
      * returns null if it just doesn't apply, a {@link Maybe.Present} if it 
succeeded,
      * or {@link Maybe.Absent} with a good exception if it should have applied 
but couldn't */
     @SuppressWarnings("unchecked")
-    protected <T> Maybe<T> tryCoerceCollection(Object value, TypeToken<T> 
targetTypeToken, Class<? super T> targetType) {
+    protected <T> Maybe<T> tryCoerceIterable(Object value, TypeToken<T> 
targetTypeToken, Class<? super T> targetType) {
         if (!(value instanceof Iterable) || 
!(Iterable.class.isAssignableFrom(targetTypeToken.getRawType()))) return null;
         Type[] arguments = ((ParameterizedType) 
targetTypeToken.getType()).getActualTypeArguments();
         if (arguments.length != 1) {
-            return Maybe.absent(new IllegalStateException("Unexpected number 
of parameters in collection type: " + arguments));
+            return Maybe.absent(new IllegalStateException("Unexpected number 
of parameters in iterable type: " + arguments));
         }
         Collection<Object> coerced = Lists.newLinkedList();
         TypeToken<?> listEntryType = TypeToken.of(arguments[0]);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6e6957e2/utils/common/src/test/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercionsTest.java
----------------------------------------------------------------------
diff --git 
a/utils/common/src/test/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercionsTest.java
 
b/utils/common/src/test/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercionsTest.java
index 1a3d560..bd66c2e 100644
--- 
a/utils/common/src/test/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercionsTest.java
+++ 
b/utils/common/src/test/java/org/apache/brooklyn/util/javalang/coerce/TypeCoercionsTest.java
@@ -245,6 +245,13 @@ public class TypeCoercionsTest {
     }
 
     @Test
+    public void testListEntryToIterableCoercion() {
+        @SuppressWarnings("serial")
+        Iterable<?> val = coerce(ImmutableList.of("1", "2"), new 
TypeToken<Iterable<Integer>>() {});
+        Assert.assertEquals(ImmutableList.copyOf(val), ImmutableList.of(1, 2));
+    }
+
+    @Test
     public void testMapValueCoercion() {
         @SuppressWarnings("serial")
         Map<?,?> s = coerce(ImmutableMap.of("int", "java.lang.Integer", 
"double", "java.lang.Double"), new TypeToken<Map<String, Class<?>>>() { });

Reply via email to