[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: RFR: JDK-8304959: Public API in javafx.css.Match should not return private API class PseudoClass
From:       Kevin Rushforth <kcr () openjdk ! org>
Date:       2023-05-31 22:07:19
Message-ID: cR89Xw6G8mC7k99sNEdeKjK8PaQrw4j5zS_En9hXpp0=.bbffc0c2-01d1-4f6f-9109-df61cc2ae67e () github ! com
[Download RAW message or body]

On Sat, 20 May 2023 00:57:08 GMT, John Hendrikx <jhendrikx@openjdk.org> wrote:

> > I took a closer look at the compatibility issues Joe raised in the CSR, and I can \
> > confirm that yes, this change will break binary compatibility for any application \
> > that calls the existing method. It would also can break source compatibility for \
> > the subset of those applications that use the return value as an `ObservableSet` \
> > (which is the lowest public supertype of `PseudoClassState`), although this \
> > latter concern seems _very_ unlikely, and not all that impactful. 
> > So it's the binary compatibility we need to consider. The question is: is the \
> > `Match::getPseudoClasses` method being called in a useful manner by applications \
> > today? 
> > If not, then the change seems OK.
> > 
> > If it is, then we might need to consider adding a replacement method and \
> > deprecating the existing method for removal. The implementation of the \
> > replacement method would be exactly what your PR currently has for the existing \
> > method, and the existing method, would create a `PseudoClassState` object to hold \
> > a copy of the objects in the set.
> 
> > So it's the binary compatibility we need to consider. The question is: is the \
> > `Match::getPseudoClasses` method being called in a useful manner by applications \
> > today? 
> > If not, then the change seems OK.
> > 
> > If it is, then we might need to consider adding a replacement method and \
> > deprecating the existing method for removal. The implementation of the \
> > replacement method would be exactly what your PR currently has for the existing \
> > method, and the existing method, would create a `PseudoClassState` object to hold \
> > a copy of the objects in the set.
> 
> I've done some Googling with `"getPseudoClasses" import javafx`, and also looked at \
> several code search sites, and if it's used, then I can't find any examples at all. \
> I also searched for `createMatch`, with similar results, no uses outside the JavaFX \
> code base. 
> To call this method, one would to do something like this at a minimum:
> 
> StyleSheet styleSheet = StyleSheet.loadBinary( <input stream> );
> 
> for (Rule rule : styleSheet.getRules()) {
> for (Selector selector : rule.getSelectors()) {
> Match match = selector.createMatch();
> 
> match.getPseudoClassStates();  // here...
> }
> }
> 
> I did find a few references to `loadBinary`, but nothing for `getRules` which would \
> be needed next. 
> There's not a lot of reason to call `getPseudoClassStates` -- the method is mainly \
> public so internal code outside its the public package can reach these to do the \
> actual matching logic. This is why I initially tried to make `Selector`'s \
> subclasses private, but couldn't.

@hjohn In case you missed seeing it, the CSR was approved, so Skara marked this PR as \
`ready`.

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

PR Comment: https://git.openjdk.org/jfx/pull/1070#issuecomment-1571025701


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic