aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/src/main/java/com/vaadin/data/Binder.java3
-rw-r--r--server/src/test/java/com/vaadin/data/BinderTest.java12
2 files changed, 15 insertions, 0 deletions
diff --git a/server/src/main/java/com/vaadin/data/Binder.java b/server/src/main/java/com/vaadin/data/Binder.java
index e734baa98a..98a9c65b2b 100644
--- a/server/src/main/java/com/vaadin/data/Binder.java
+++ b/server/src/main/java/com/vaadin/data/Binder.java
@@ -711,6 +711,9 @@ public class Binder<BEAN> implements Serializable {
checkUnbound();
Objects.requireNonNull(converter, "converter cannot be null");
+ // Mark this step to be bound to prevent modifying multiple times.
+ bound = true;
+
if (resetNullRepresentation) {
getBinder().initialConverters.get(field).setIdentity();
}
diff --git a/server/src/test/java/com/vaadin/data/BinderTest.java b/server/src/test/java/com/vaadin/data/BinderTest.java
index a521449c04..2a90eb6c4b 100644
--- a/server/src/test/java/com/vaadin/data/BinderTest.java
+++ b/server/src/test/java/com/vaadin/data/BinderTest.java
@@ -17,6 +17,7 @@ import org.junit.Before;
import org.junit.Test;
import com.vaadin.data.Binder.BindingBuilder;
+import com.vaadin.data.converter.StringToDoubleConverter;
import com.vaadin.data.converter.StringToIntegerConverter;
import com.vaadin.data.validator.NotEmptyValidator;
import com.vaadin.server.ErrorMessage;
@@ -670,4 +671,15 @@ public class BinderTest extends BinderTestBase<Binder<Person>, Person> {
private void assertStreamEquals(Stream<?> s1, Stream<?> s2) {
Assert.assertArrayEquals(s1.toArray(), s2.toArray());
}
+
+ /**
+ * Access to old step in binding chain that already has a converter applied
+ * to it is expected to prevent modifications.
+ */
+ @Test(expected = IllegalStateException.class)
+ public void multiple_calls_to_same_binder_throws() {
+ BindingBuilder<Person, String> forField = binder.forField(nameField);
+ forField.withConverter(new StringToDoubleConverter("Failed"));
+ forField.bind(Person::getFirstName, Person::setFirstName);
+ }
}