Repository: tapestry-5 Updated Branches: refs/heads/5.4.x af1118b5d -> 45eaae528
TAP5-2565, TAP5-2496: always use name() when coercing enum values to String Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/45eaae52 Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/45eaae52 Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/45eaae52 Branch: refs/heads/5.4.x Commit: 45eaae528a4e418cecb03e41d47104853e973aa7 Parents: af1118b Author: Jochen Kemnade <jkemn...@apache.org> Authored: Thu Sep 22 12:05:49 2016 +0200 Committer: Jochen Kemnade <jkemn...@apache.org> Committed: Thu Sep 22 15:10:18 2016 +0200 ---------------------------------------------------------------------- .../ioc/internal/services/TypeCoercerImpl.java | 14 ++++++++++++++ .../test/groovy/ioc/specs/TypeCoercerSpec.groovy | 7 ++++++- .../src/test/java/com/example/Animal.java | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/45eaae52/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java ---------------------------------------------------------------------- diff --git a/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java b/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java index 2b157b7..23639ba 100644 --- a/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java +++ b/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java @@ -121,6 +121,15 @@ public class TypeCoercerImpl extends LockSupport implements TypeCoercer } }; + private static final Coercion COERCION_ENUM_TO_STRING = new Coercion<Enum, String>() + { + @Override + public String coerce(Enum input) + { + return input.name(); + } + }; + public TypeCoercerImpl(Collection<CoercionTuple> tuples) { for (CoercionTuple tuple : tuples) @@ -495,6 +504,11 @@ public class TypeCoercerImpl extends LockSupport implements TypeCoercer { tuples = extend(tuples, new CoercionTuple(sourceType, targetType, new StringToEnumCoercion(targetType))); } + else if (Enum.class.isAssignableFrom(sourceType) && targetType == String.class) + { + // TAP5-2565 + tuples = extend(tuples, new CoercionTuple(sourceType, targetType, COERCION_ENUM_TO_STRING)); + } return tuples; } http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/45eaae52/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy ---------------------------------------------------------------------- diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy b/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy index 9a388fb..985d0e4 100644 --- a/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy +++ b/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy @@ -5,6 +5,9 @@ import org.apache.tapestry5.ioc.annotations.AnnotationUseContext import org.apache.tapestry5.ioc.services.TypeCoercer import org.apache.tapestry5.ioc.util.TimeInterval import org.apache.tapestry5.plastic.PlasticUtils + +import com.example.Animal; + import spock.lang.Unroll class TypeCoercerSpec extends AbstractSharedRegistrySpecification { @@ -97,7 +100,9 @@ class TypeCoercerSpec extends AbstractSharedRegistrySpecification { "mixin" | AnnotationUseContext | AnnotationUseContext.MIXIN 123 | Object[] | [123] as Object[] [1, 2, 3] | Object[] | [1, 2, 3] as Object[] - + // TAP5-2565 + Animal.DOG | String | 'DOG' + 'CAT' | Animal | Animal.CAT inputTypeName = PlasticUtils.toTypeName(input.getClass()) typeName = PlasticUtils.toTypeName(type) http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/45eaae52/tapestry-ioc/src/test/java/com/example/Animal.java ---------------------------------------------------------------------- diff --git a/tapestry-ioc/src/test/java/com/example/Animal.java b/tapestry-ioc/src/test/java/com/example/Animal.java new file mode 100644 index 0000000..75826ec --- /dev/null +++ b/tapestry-ioc/src/test/java/com/example/Animal.java @@ -0,0 +1,18 @@ +package com.example; + +public enum Animal { + + CAT("Cat"), DOG("Dog"); + + private final String displayName; + + private Animal(String displayName) { + this.displayName = displayName; + } + + @Override + public String toString() { + return displayName; + } + +}