Quellcode durchsuchen

Erase type of BeanBinder#bindInstanceFields parameter in equality test

Fixes vaadin/framework8-issues#466
tags/8.0.0.alpha9^0
Aleksi Hietanen vor 7 Jahren
Ursprung
Commit
d0184c4ccd

+ 2
- 2
server/src/main/java/com/vaadin/data/BeanBinder.java Datei anzeigen

@@ -464,7 +464,7 @@ public class BeanBinder<BEAN> extends Binder<BEAN> {
memberField.getName(),
objectWithMemberFields.getClass().getName()));
}
if (propertyType.equals(valueType)) {
if (propertyType.equals(GenericTypeReflector.erase(valueType))) {
HasValue<?> field;
// Get the field from the object
try {
@@ -485,7 +485,7 @@ public class BeanBinder<BEAN> extends Binder<BEAN> {
throw new IllegalStateException(String.format(
"Property type '%s' doesn't "
+ "match the field type '%s'. "
+ "Binding should be configured manulaly using converter.",
+ "Binding should be configured manually using converter.",
propertyType.getName(), valueType.getTypeName()));
}
}

+ 28
- 0
server/src/test/java/com/vaadin/data/BeanBinderTest.java Datei anzeigen

@@ -5,6 +5,7 @@ import static org.junit.Assert.assertSame;

import java.lang.reflect.Method;
import java.util.List;
import java.util.Set;

import org.junit.Assert;
import org.junit.Before;
@@ -13,10 +14,30 @@ import org.junit.Test;
import com.vaadin.data.BeanBinder.BeanBindingBuilder;
import com.vaadin.data.Binder.BindingBuilder;
import com.vaadin.tests.data.bean.BeanToValidate;
import com.vaadin.ui.CheckBoxGroup;

public class BeanBinderTest
extends BinderTestBase<BeanBinder<BeanToValidate>, BeanToValidate> {

private enum TestEnum {
}

private class TestClass {
private CheckBoxGroup<TestEnum> enums;
}

private class TestBean {
private Set<TestEnum> enums;

public Set<TestEnum> getEnums() {
return enums;
}

public void setEnums(Set<TestEnum> enums) {
this.enums = enums;
}
}

@Before
public void setUp() {
binder = new BeanBinder<>(BeanToValidate.class);
@@ -25,6 +46,13 @@ public class BeanBinderTest
item.setAge(32);
}

@Test
public void bindInstanceFields_parameters_type_erased() {
BeanBinder<TestBean> otherBinder = new BeanBinder<>(TestBean.class);
TestClass testClass = new TestClass();
otherBinder.bindInstanceFields(testClass);
}

@Test
public void fieldBound_bindBean_fieldValueUpdated() {
binder.bind(nameField, "firstname");

Laden…
Abbrechen
Speichern