Leave a failed conversion in the control and keep the previous Attribute.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -252,7 +252,6 @@ final class DirectBindingApplier {
|
||||
link.applying = true;
|
||||
try {
|
||||
control.setValue(shown);
|
||||
link.committedControl = shown;
|
||||
} finally {
|
||||
link.applying = false;
|
||||
}
|
||||
@@ -269,18 +268,11 @@ final class DirectBindingApplier {
|
||||
link.applying = true;
|
||||
try {
|
||||
attribute.setValue(converted);
|
||||
link.committedControl = control.getValue();
|
||||
} finally {
|
||||
link.applying = false;
|
||||
}
|
||||
owner.clearBindingFailure(source);
|
||||
} catch (RuntimeException failure) {
|
||||
link.applying = true;
|
||||
try {
|
||||
control.setValue(link.committedControl);
|
||||
} finally {
|
||||
link.applying = false;
|
||||
}
|
||||
owner.reportBindingFailure(source, failureText(failure));
|
||||
}
|
||||
}
|
||||
@@ -294,12 +286,10 @@ final class DirectBindingApplier {
|
||||
}
|
||||
|
||||
/**
|
||||
* Guards one converted binding against hearing its own writes, and remembers the last
|
||||
* control value that was successfully shown.
|
||||
* Guards one converted binding against hearing its own writes.
|
||||
*/
|
||||
private static final class Link {
|
||||
private boolean applying;
|
||||
private Object committedControl;
|
||||
}
|
||||
|
||||
private static Property<?> controlProperty(Object control, String propertyName) {
|
||||
|
||||
@@ -103,7 +103,7 @@ class CarryChildMessageTest {
|
||||
streetField.setText("nope");
|
||||
|
||||
assertEquals("Main", person.getAddress().getStreet());
|
||||
assertEquals("Main", streetField.getText());
|
||||
assertEquals("nope", streetField.getText());
|
||||
ViewModel personModel = loaded.getViewModel();
|
||||
ViewModel addressModel = (ViewModel) personModel.property("address").getValue();
|
||||
assertEquals(1, addressModel.getMessages().size());
|
||||
|
||||
@@ -135,7 +135,7 @@ class ConvertAndRecordFailureTest {
|
||||
TextField ageField = (TextField) loaded.getRoot().lookup("#ageField");
|
||||
ageField.setText("nope");
|
||||
assertEquals(Integer.valueOf(42), person.getAge());
|
||||
assertEquals("years:42", ageField.getText());
|
||||
assertEquals("nope", ageField.getText());
|
||||
ViewModel viewModel = loaded.getViewModel();
|
||||
assertEquals(1, viewModel.getMessages().size());
|
||||
Message message = viewModel.getMessages().get(0);
|
||||
@@ -164,7 +164,7 @@ class ConvertAndRecordFailureTest {
|
||||
assertSame(first, viewModel.getMessages().get(0));
|
||||
assertEquals("not a whole number: still-bad", first.getText());
|
||||
assertEquals(Integer.valueOf(42), person.getAge());
|
||||
assertEquals("years:42", ageField.getText());
|
||||
assertEquals("still-bad", ageField.getText());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user