-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix negation of null values. #16101
Merged
Merged
Fix negation of null values. #16101
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Expected results come from 11.0.x branch.
Also remove `ExpressionNode.Reset` as it was doing unneeded stuff and should just be the same as `SetSource(AvaloniaProperty.UnsetValue, null);`.
The previous design assumed that a source of `null` was an invalid input to all types of expression nodes. It turned out that there was a single exception to this rule: the `!` operator can in fact operate on a null value. With this new design we instead have to explicitly check for a null value in every override of `OnSourceChanged ` except in `LogicalNotNode`. Due to this change, we also have to distinguish between `null` and `(unset)` in `ExpressionNode.SetSource` as well. Fixes #16071
You can test this PR using the following package version. |
jp2masa
reviewed
Jun 24, 2024
You can test this PR using the following package version. |
maxkatz6
approved these changes
Jun 26, 2024
grokys
added a commit
that referenced
this pull request
Jun 28, 2024
* Add tests for binding negation operator. Expected results come from 11.0.x branch. * Unset and null need to be distinct. Also remove `ExpressionNode.Reset` as it was doing unneeded stuff and should just be the same as `SetSource(AvaloniaProperty.UnsetValue, null);`. * Make ExpressionNode.OnSourceChanged accept null. The previous design assumed that a source of `null` was an invalid input to all types of expression nodes. It turned out that there was a single exception to this rule: the `!` operator can in fact operate on a null value. With this new design we instead have to explicitly check for a null value in every override of `OnSourceChanged ` except in `LogicalNotNode`. Due to this change, we also have to distinguish between `null` and `(unset)` in `ExpressionNode.SetSource` as well. Fixes #16071 * Fix comment.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What does the pull request do?
As described in #16071, the recent binding refactor (#13970) broke a use-case of the binding
!
operator where it was not correctly convertingnull
; there were a lack of unit tests in this area meaning that this particular case got missed.The previous design of
BindingExpression
and itsExpressionNode
s assumed that a source ofnull
was an invalid input to all types of expression nodes. It turned out that there was a single exception to this rule: the!
operator can in fact operate on anull
value.This PR tweaks
ExpressionNode.OnSourceChanged
to now accept anull
source. We now have to explicitly check for a null value in every override ofOnSourceChanged
except inLogicalNotNode
. This has unfortunately resulted in a large diff for a relatively trivial change.Due to this change, we also have to distinguish between
null
and(unset)
inExpressionNode.SetSource
as well.Unit tests were added to ensure the behavior has not changed since the 11.0 timeframe.
Also took this opportunity to remove
ExpressionNode.Reset
as it was doing unneeded stuff and should just be the same asSetSource(AvaloniaProperty.UnsetValue, null);
.Fixed issues
Fixes #16071