From 3db7de6eac975f75e76fafc1352f09cf2ac6fa53 Mon Sep 17 00:00:00 2001 From: Denis Anisimov Date: Fri, 16 Sep 2016 21:57:40 +0300 Subject: [PATCH] Make CheckBoxGroup.SimpleMultiSelectModel return a selection copy #293. getSelectedItems() must return a copy to fulfill the contract specified in SelectionModel: it must be a snapshot of the current state and safe to iterate over while changing selection. Change-Id: Ie2f15eb626dd80df2036bcb2d4e9387fc31389c9 --- .../src/main/java/com/vaadin/ui/CheckBoxGroup.java | 2 +- .../com/vaadin/data/BinderMultiSelectTest.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/server/src/main/java/com/vaadin/ui/CheckBoxGroup.java b/server/src/main/java/com/vaadin/ui/CheckBoxGroup.java index 8525dc6cbb..d5b2c5a851 100644 --- a/server/src/main/java/com/vaadin/ui/CheckBoxGroup.java +++ b/server/src/main/java/com/vaadin/ui/CheckBoxGroup.java @@ -71,7 +71,7 @@ public class CheckBoxGroup extends AbstractMultiSelect { @Override public Set getSelectedItems() { - return Collections.unmodifiableSet(selection); + return Collections.unmodifiableSet(new LinkedHashSet<>(selection)); } @Override diff --git a/server/src/test/java/com/vaadin/data/BinderMultiSelectTest.java b/server/src/test/java/com/vaadin/data/BinderMultiSelectTest.java index 93f4ccdac4..fd75c930f3 100644 --- a/server/src/test/java/com/vaadin/data/BinderMultiSelectTest.java +++ b/server/src/test/java/com/vaadin/data/BinderMultiSelectTest.java @@ -117,6 +117,20 @@ public class BinderMultiSelectTest assertEquals(Collections.singleton(TestEnum.TWO), item.getEnums()); } + @Test + public void bound_setSelection_beanValueIsACopy() { + bindEnum(); + + select.select(TestEnum.TWO); + + Set enums = item.getEnums(); + + binder.bind(new BeanWithEnums()); + select.select(TestEnum.ONE); + + assertEquals(Collections.singleton(TestEnum.TWO), enums); + } + @Test public void bound_deselect_beanValueUpdatedToNull() { item.setEnums(Collections.singleton(TestEnum.ONE)); -- 2.39.5