From a0b80c1d9b22aed986e885d8a32cf1446533d6da Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Tue, 24 Jan 2017 12:03:17 +0200 Subject: [PATCH] Make BeanBinderPropertySet exclude Object properties (#8306) * Make BeanBinderPropertySet exclude Object properties --- .../com/vaadin/data/BeanBinderPropertySet.java | 9 ++++++--- .../vaadin/data/BeanBinderPropertySetTest.java | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/com/vaadin/data/BeanBinderPropertySet.java b/server/src/main/java/com/vaadin/data/BeanBinderPropertySet.java index c167229f8c..f28873438e 100644 --- a/server/src/main/java/com/vaadin/data/BeanBinderPropertySet.java +++ b/server/src/main/java/com/vaadin/data/BeanBinderPropertySet.java @@ -195,7 +195,7 @@ public class BeanBinderPropertySet implements BinderPropertySet { try { definitions = BeanUtil.getBeanPropertyDescriptors(beanType).stream() - .filter(BeanBinderPropertySet::hasReadMethod) + .filter(BeanBinderPropertySet::hasNonObjectReadMethod) .map(descriptor -> new BeanBinderPropertyDefinition<>(this, descriptor)) .collect(Collectors.toMap(BinderPropertyDefinition::getName, @@ -234,8 +234,11 @@ public class BeanBinderPropertySet implements BinderPropertySet { return Optional.ofNullable(definitions.get(name)); } - private static boolean hasReadMethod(PropertyDescriptor descriptor) { - return descriptor.getReadMethod() != null; + private static boolean hasNonObjectReadMethod( + PropertyDescriptor descriptor) { + Method readMethod = descriptor.getReadMethod(); + return readMethod != null + && readMethod.getDeclaringClass() != Object.class; } private static Object invokeWrapExceptions(Method method, Object target, diff --git a/server/src/test/java/com/vaadin/data/BeanBinderPropertySetTest.java b/server/src/test/java/com/vaadin/data/BeanBinderPropertySetTest.java index 1fa431ac20..cf56dd9368 100644 --- a/server/src/test/java/com/vaadin/data/BeanBinderPropertySetTest.java +++ b/server/src/test/java/com/vaadin/data/BeanBinderPropertySetTest.java @@ -20,7 +20,11 @@ import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.HashSet; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import org.junit.Assert; import org.junit.Test; @@ -98,4 +102,16 @@ public class BeanBinderPropertySetTest { deserializedDefinition); } + @Test + public void properties() { + BinderPropertySet propertySet = BeanBinderPropertySet + .get(Person.class); + + Set propertyNames = propertySet.getProperties() + .map(BinderPropertyDefinition::getName) + .collect(Collectors.toSet()); + + Assert.assertEquals(new HashSet<>(Arrays.asList("name", "born")), + propertyNames); + } } -- 2.39.5