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<?>>>() { });
