diff --git a/modules/javafx.graphics/src/main/java/javafx/css/SimpleSelector.java b/modules/javafx.graphics/src/main/java/javafx/css/SimpleSelector.java index 7c770e859b1..7ef93a17f88 100644 --- a/modules/javafx.graphics/src/main/java/javafx/css/SimpleSelector.java +++ b/modules/javafx.graphics/src/main/java/javafx/css/SimpleSelector.java @@ -98,6 +98,7 @@ public Set getStyleClassSet() { * styleClasses converted to a set of bit masks */ private final Set styleClassSet; + private final Set unwrappedStyleClassSet; private final String id; @@ -148,7 +149,7 @@ public NodeOrientation getNodeOrientation() { // then match needs to check name this.matchOnName = (name != null && !("".equals(name)) && !("*".equals(name))); - Set scs = new StyleClassSet(); + this.unwrappedStyleClassSet = new StyleClassSet(); if (styleClasses != null) { for (int n = 0; n < styleClasses.size(); n++) { @@ -156,11 +157,11 @@ public NodeOrientation getNodeOrientation() { final String styleClassName = styleClasses.get(n); if (styleClassName == null || styleClassName.isEmpty()) continue; - scs.add(StyleClassSet.getStyleClass(styleClassName)); + unwrappedStyleClassSet.add(StyleClassSet.getStyleClass(styleClassName)); } } - this.styleClassSet = Collections.unmodifiableSet(scs); + this.styleClassSet = Collections.unmodifiableSet(unwrappedStyleClassSet); this.matchOnStyleClass = (this.styleClassSet.size() > 0); PseudoClassState pcs = new PseudoClassState(); @@ -289,7 +290,8 @@ public NodeOrientation getNodeOrientation() { // This selector matches when class="pastoral blue aqua marine" but does not // match for class="pastoral blue". private boolean matchStyleClasses(StyleClassSet otherStyleClasses) { - return otherStyleClasses.containsAll(styleClassSet); + // checks against unwrapped version so BitSet can do its special casing for performance + return otherStyleClasses.containsAll(unwrappedStyleClassSet); } @Override public boolean equals(Object obj) {