From 1468ba5735c7b102e760f97d36cd977f72a915a3 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 23 Nov 2011 11:51:25 +0100 Subject: [PATCH] DATACMNS-99 - SimpleTypeHolder considers complex Enums as simple now. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed SimpleTypeHolder.isSimpleType(Class type) for calls where the Class object handed in is derived from an Enum that implements an abstract method. These Class objects return false for a call to isEnum(). So an ….isAssignableFrom(…) check is safer. --- .../data/mapping/model/SimpleTypeHolder.java | 3 +- .../mapping/SimpleTypeHolderUnitTests.java | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/SimpleTypeHolder.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/SimpleTypeHolder.java index a508a7ce9..8fa1bff8f 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/SimpleTypeHolder.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/SimpleTypeHolder.java @@ -62,6 +62,7 @@ public class SimpleTypeHolder { DEFAULTS.add(Locale.class); DEFAULTS.add(Class.class); DEFAULTS.add(Number.class); + DEFAULTS.add(Enum.class); } private final Set> simpleTypes; @@ -124,6 +125,6 @@ public class SimpleTypeHolder { return true; } } - return type.isEnum(); + return false; } } diff --git a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/SimpleTypeHolderUnitTests.java b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/SimpleTypeHolderUnitTests.java index 624ebba28..23e70a985 100644 --- a/spring-data-commons-core/src/test/java/org/springframework/data/mapping/SimpleTypeHolderUnitTests.java +++ b/spring-data-commons-core/src/test/java/org/springframework/data/mapping/SimpleTypeHolderUnitTests.java @@ -92,4 +92,35 @@ public class SimpleTypeHolderUnitTests { SimpleTypeHolder holder = new SimpleTypeHolder(); assertThat(holder.isSimpleType(Object.class), is(true)); } + + @Test + public void considersSimpleEnumAsSimple() { + + SimpleTypeHolder holder = new SimpleTypeHolder(); + assertThat(holder.isSimpleType(SimpleEnum.FOO.getClass()), is(true)); + } + + @Test + public void considersComplexEnumAsSimple() { + + SimpleTypeHolder holder = new SimpleTypeHolder(); + assertThat(holder.isSimpleType(ComplexEnum.FOO.getClass()), is(true)); + } + + enum SimpleEnum { + + FOO; + } + + enum ComplexEnum { + + FOO { + @Override + boolean method() { + return false; + } + }; + + abstract boolean method(); + } }