Browse Source

fix duplicate key exception with Binder when interface method is overwritten (#12091)

tags/7.7.22
vt512 3 years ago
parent
commit
bafab4554a
No account linked to committer's email address

+ 1
- 1
server/src/main/java/com/vaadin/data/BeanPropertySet.java View File

@@ -313,7 +313,7 @@ public class BeanPropertySet<T> implements PropertySet<T> {
.map(descriptor -> new BeanPropertyDefinition<>(this,
instanceKey.type, descriptor))
.collect(Collectors.toMap(PropertyDefinition::getName,
Function.identity()));
Function.identity(), (pd1, pd2) -> pd2));
} catch (IntrospectionException e) {
throw new IllegalArgumentException(
"Cannot find property descriptors for "

+ 28
- 0
server/src/test/java/com/vaadin/data/BeanBinderTest.java View File

@@ -21,6 +21,7 @@ import org.junit.Test;

import com.vaadin.data.BeanBinderTest.RequiredConstraints.SubConstraint;
import com.vaadin.data.BeanBinderTest.RequiredConstraints.SubSubConstraint;
import com.vaadin.data.BinderInstanceFieldTest.IntegerTextField;
import com.vaadin.data.converter.StringToIntegerConverter;
import com.vaadin.tests.data.bean.BeanToValidate;
import com.vaadin.ui.CheckBoxGroup;
@@ -167,6 +168,15 @@ public class BeanBinderTest
private TextField mydate = new TextField();
}

public interface TestInterface {
int getProperty();
}

public interface TestInterfaceWithOverwrittenMethod extends TestInterface {
@Override
int getProperty();
}

@Before
public void setUp() {
binder = new BeanValidationBinder<>(BeanToValidate.class);
@@ -537,6 +547,24 @@ public class BeanBinderTest
assertTrue(binder.validate().isOk());
}

@Test
public void interface_extension_with_overwritten_property() {
Binder<TestInterfaceWithOverwrittenMethod> binder = new Binder<>(
TestInterfaceWithOverwrittenMethod.class);
IntegerTextField field = new IntegerTextField();

binder.bind(field, "property");
TestInterfaceWithOverwrittenMethod bean = new TestInterfaceWithOverwrittenMethod() {
@Override
public int getProperty() {
return 5;
}
};
binder.setBean(bean);

assertEquals(Integer.valueOf(5), field.getValue());
}

private void assertInvalid(HasValue<?> field, String message) {
BinderValidationStatus<?> status = binder.validate();
List<BindingValidationStatus<?>> errors = status

Loading…
Cancel
Save