RFR: 8341670: [Text, TextFlow] Public API for Text Layout Info [v7]
Kevin Rushforth
kcr at openjdk.org
Fri Oct 25 14:08:14 UTC 2024
On Wed, 23 Oct 2024 22:52:34 GMT, Andy Goryachev <angorya at openjdk.org> wrote:
>> modules/javafx.graphics/src/main/java/javafx/scene/text/CaretInfo.java line 34:
>>
>>> 32: * @since 24
>>> 33: */
>>> 34: public sealed abstract class CaretInfo permits PrismCaretInfo {
>>
>> Given the API you define, is there a reason not to make this an interface?
>
> Originally it was an interface. Then @prrace said "Why an interface ? It is easier to evolve a class when you want to add more info."
>
> Since this thing is sealed, it probably does not matter, and access to class methods is _two_ nanoseconds faster (not that's important).
>
> The only good thing about interface is the ease of mocking in testing, but we don't do that.
I had forgotten about that (and it doesn't matter, as you say). Carry on.
>> modules/javafx.graphics/src/main/java/javafx/scene/text/LayoutInfo.java line 72:
>>
>>> 70: * @return the list of {@code TextLineInfo} objects
>>> 71: */
>>> 72: public abstract List<TextLineInfo> getTextLines();
>>
>> Is the list immutable? If so (which I think it should be), can you specify that?
>
> A new instance gets created for each caller, we don't care what they do to it. Maybe we should say that?
>
> From the API purity perspective, it could be, but an immutable list would incur a copy overhead, do we really need that?
>
> It also looks like there is no easy way of creating an immutable wrapper similar to JDK's List12, so we'd need to invent one.
>
> (Note: the original design called for an array, but List was recommended because of stream/etc)
You can use `Collections.unmodifiableList(List)` to wrap the list without copying.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1596#discussion_r1816740081
PR Review Comment: https://git.openjdk.org/jfx/pull/1596#discussion_r1816751055
More information about the openjfx-dev
mailing list