On Mon, 27 Mar 2023 23:05:00 GMT, John Hendrikx <jhendr...@openjdk.org> wrote:
> Fix bug in CSS caching code that could reset values on unrelated nodes. > > The bug occurs due to a cache entry being constructed incorrectly when the > initial node that triggered the cache entry creation has user set values. The > calculated values for properties with a user set value were omitted in the > cache entry, and other nodes that later share the same entry would > incorrectly assume the omitted property was unstyled and were therefore reset > to their default values. Note for reviewers: The problem of one Node affecting another unrelated Node is because all properties of the same type, at the same level and same pseudo state set share a cache entry. When the cache entry is constructed based on a Node with an overridden property, the calculated value for the overridden property would be omitted incorrectly -- it is incorrect because other Nodes that would share the same entry may not have this property overridden! The cache entry always should have a complete set of calculated values, regardless of which Node was used to construct the initial cache entry. I removed the user overridden property check in `lookup`. I think this is harmless because both callers of `lookup` do the same check themselves again to avoid applying a style that would override a user set value. However, in `transitionToState` this is just **after** the calculated value is added to the cache, which is exactly what you want. A test verifies that the fix works. ------------- PR Comment: https://git.openjdk.org/jfx/pull/1072#issuecomment-1485983070