Fix property change when undefined value is explicitly set to NaN #273
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.
Summary
This PR addresses sbmlteam/jsbml#255.
When a previously undefined double value (internally represented as
NaN) is explicitlyset to
NaN, noTreeNodeChangeListenerevent is fired. This happens becausefirePropertyChangecompares the old and new values usingequals(), and forDouble.NaN,oldValue.equals(newValue)returnstrue, so no change is detected.To fix this, the check in
AbstractTreeNode.firePropertyChangeis extended to alsoconsider reference inequality:
This ensures that a property change event is fired even when equals() considers
the two values equal (e.g. NaN vs NaN), but the underlying objects differ.
Verification
Built JSBML and ran the core tests using:
mvn test -pl core -amAll jsbml-core tests pass, so the change does not introduce regressions
in the existing test suite.