On Mon, 2 Sep 2024 12:45:02 GMT, John Hendrikx <[email protected]> wrote:
>> Moves `SimpleSelector` and `CompoundSelector` to internal packages.
>>
>> This can be done with only a minor API break, as `SimpleSelector` and
>> `CompoundSelector` were public before. However, these classes could not be
>> constructed by 3rd parties. The only way to access them was by doing a cast
>> (generally they're accessed via `Selector` not by their sub types). The
>> reason they were public at all was because the CSS engine needs to be able
>> to access them from internal packages.
>>
>> This change fixes a mistake (or possibly something that couldn't be modelled
>> at the time) when the CSS API was first made public. The intention was
>> always to have a `Selector` interface/abstract class, with private
>> implementations (`SimpleSelector` and `CompoundSelector`).
>>
>> This PR as said has a small API break. The other changes are (AFAICS)
>> source and binary compatible:
>>
>> - Made `Selector` `sealed` only permitting `SimpleSelector` and
>> `CompoundSelector` -- as `Selector` had a package private constructor, there
>> are no concerns with pre-existing subclasses
>> - `Selector` has a few more methods that are now `protected` -- given that
>> the class is now sealed, these modified methods are not accessible (they may
>> still require rudimentary documentation I suppose)
>> - `Selector` now has a `public` default constructor -- as the class is
>> sealed, it is inaccessible
>> - `SimpleSelector` and `CompoundSelector` have a few more `public` methods,
>> but they're internal now, so it is irrelevant
>> - `createMatch` was implemented directly in `Selector` to avoid having to
>> expose package private fields in `Match` for use by `CompoundSelector`
>> - No need anymore for the `SimpleSelectorShim`
>
> John Hendrikx has updated the pull request incrementally with one additional
> commit since the last revision:
>
> Reject CSS where compound selectors don't consist of simple selectors
modules/javafx.graphics/src/main/java/com/sun/javafx/css/BinarySerializer.java
line 109:
> 107:
> 108: if (type != TYPE_SIMPLE) {
> 109: throw new IllegalStateException("Expected compound
> selector to consist of simple selectors only, but found type: " + type);
minor: the output will be a signed decimal. would it be better if this can be
formatted as hex?
`String.format("Expected compound selector to consist of TYPE_SIMPLE only, but
found type: 0x%02X", type)`
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1333#discussion_r1742380640