On Tue, 1 Aug 2023 10:49:42 GMT, John Hendrikx <jhendr...@openjdk.org> wrote:

>> The constructor ensures that any spelling of "ALL" is converted to the 
>> interned constant "all", which is important as we would otherwise need a 
>> more computationally expensive case-insensitive string comparison in 
>> `Node.Transitions.find()`.
>> Removing the constructor would mean that some unrelated piece of code would 
>> need to do this conversion.
>> 
>> The `@throws` tag is not allowed at the class level.
>
> I meant that you can use the short form of the constructor (without repeating 
> the parameters):
> 
>       public record TransitionDefinition(String propertyName, Duration 
> duration,
>                                    Duration delay, Interpolator interpolator) 
> {
>           public TransitionDefinition {  // no parameters necessary (short 
> form constructor)
>                     // do checks and assignments here
>           }
>       }

Done.

>> This algorithm is implemented as 
>> [specified](https://www.w3.org/TR/css-easing-1/#step-easing-algo), which 
>> accounts for the possibility that the interpolator is used for a 
>> back-filling animation (`t < 0`). While this is not possible in JavaFX (but 
>> may be possible in the future), I think it makes sense to keep the algorithm 
>> as is, because it ensures that its results are always correct, even though 
>> negative values for `t` are currently out of spec.
>
> Yeah, I figured as much.  I just don't like code that you can't get covered 
> in a unit test, or that contradicts itself.  As you can see, I was confused, 
> is it a bug or a feature?  Perhaps a comment then to indicate that it's 
> intentional.

This is covered in `StepInterpolatorTest.testStart`: the test will assert that 
for t<0, the step interpolator produces the expected value. I also added a 
comment that this is intended.

>> Added a `@throws` tag.
>> Interestingly, `Event` doesn't specify or assert that its `eventType` 
>> parameter is non-null. Maybe we should investigate this further.
>
> `eventType` is not used for a lot of things, aside from deciding which list 
> of handlers to pick.  In theory, you could have a `null` `EventType`, and 
> register an event handler on the `null` type; except that most 
> `addEventHandler` methods don't allow this -- they check that the event type 
> is not `null`.
> 
> It probably would be good to reject `null` when creating an `Event`, but 
> that's not for this PR.

I added a null check for `eventType` on the `TransitionEvent` class.

>> Why would this be a sensible thing to do? I'm quite explicitly comparing the 
>> identity of `property`, since I'm interested in finding the one property 
>> that I'm looking for, not potentially any property that is in some way 
>> "equal" to the property.
>> 
>> For (hopefully) all property implementations, `equals` trivially works 
>> because it is not an overridden method and therefore falls back to an 
>> identity comparison. What would it even mean for a property to be equal, but 
>> not identical to another property?
>
> It's up to you, but this is really standard Java practice: you use `equals` 
> which may defer to identity checks, unless there is a very specific reason 
> that you **must** have an identity check.  This leaves the decision of how 
> equality works firmly in the hands of the class author.  
> 
> For styleable properties there may not be an issue, although it is an 
> interface that can have 3rd party implementations. In general though, you 
> never know when something might be a proxy, wrapper or adapter that may not 
> be the exact same instance, but are considered equal for most purposes.
> 
> So if you think it must be an identity check, and you want to avoid others 
> thinking this is a mistake, could you add a comment with the reasoning?

Added a comment.

-------------

PR Review Comment: https://git.openjdk.org/jfx/pull/870#discussion_r1280922738
PR Review Comment: https://git.openjdk.org/jfx/pull/870#discussion_r1280919648
PR Review Comment: https://git.openjdk.org/jfx/pull/870#discussion_r1280921115
PR Review Comment: https://git.openjdk.org/jfx/pull/870#discussion_r1280921286

Reply via email to