[BUGFIX LTS] do not throw on stable elementId
#18807
Merged
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.
When refactoring from observers to setters during the 3.11 release (in 405d423), an apparently-transparent change caused a regression around invocations of components including
elementId=...
. Any rerender of the component which includedelementId
assignment now triggered the assertion, rather than only changes which actually updated the value ofelementId
, because all invocations strigger aset
on the property.The simplest reproduction of this bug (given a component
foo-bar
):Changing the value
fromBackingClass
on the backing class always triggers the assertion, even though it is actually impossible for it to change theelementId
value, because the assertion in the setter throws regardless of what the value is. (The observer-based did not throw in the same conditions because it would not retrigger when the observed key on the view did not change.)The fix is to check equality between the passed
elementId
value and the previously set value, and only throw if they differ.Fixes #18147