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