On Thu, 22 May 2025 14:40:43 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

>> Instead of returning `float[]` here, this would be a good candidate to 
>> return a discriminated union instead, something like:
>> 
>> sealed interface CaretGeometry {
>>     record Single(float x, float y, float height) implements CaretGeometry {}
>>     record Split(float x1, float x2, float y, float height) implements 
>> CaretGeometry {}
>> }
>> 
>> 
>> This has two advantages:
>> 1. It's more expressive, as you don't need to look up what the array values 
>> represent.
>> 2. Instead of disciminating between the two cases by inspecting the array 
>> length as you do in `PrismLayoutInfo::caretInfoAt`:
>> 
>>    ```java
>>    Rectangle2D[] parts;
>>    if (c.length == 3) {
>>        ..
>>        parts = ...
>>    } else {
>>        ...
>>        parts = ...
>>    }
>>    ```
>>    ...you can use an exhaustive switch expression instead:
>>    ```
>>    Rectangle2D[] parts = switch (c) {
>>        case Single s -> new Rectangle2D[] {
>>            new Rectangle2D(s.x() + dx, s.y() + dy, 0, s.height())
>>        };
>>    
>>        case Split s -> new Rectangle2D[] {
>>            new Rectangle2D(...),
>>            new Rectangle2D(...)
>>        };
>>    };
>>    ```
>> 
>>    This is easier to read, and you'll get the compiler checks for free.
>
> I would have agreed with the proposed change, if it were a public API.
> 
> This is an internal method, so it was made as low level as possible.  The 
> return value is documented, and the consumer is another part of internal 
> code.  No need to make it more complicated, in my opinion.

The point is that it's less complicated to have self-describing, strongly 
typed, and compiler-checked code. Your code is more complicated because it's 
brittle, untyped, and less robust against refactoring.

Just to make sure that we're on the same page here: "so it was made as low 
level as possible" sounds like you deliberately chose to forgo strong typing... 
to achieve _what_?

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1596#discussion_r2102795258

Reply via email to