Skip to content

Commit

Permalink
Method CSSStyleSheet.validateSelectors(SelectorList, int, DomNode) is…
Browse files Browse the repository at this point in the history
… deprecated; please use method CSSStyleSheet.validateSelectors(SelectorList, DomNode) instead.
  • Loading branch information
rbri committed Aug 11, 2024
1 parent 05f5b06 commit 2283bdf
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 19 deletions.
46 changes: 30 additions & 16 deletions src/main/java/org/htmlunit/css/CssStyleSheet.java
Original file line number Diff line number Diff line change
Expand Up @@ -1087,11 +1087,28 @@ private static String toString(final InputSource source) {
* @param documentMode see {@link Document#getDocumentMode()}
* @param domNode the dom node the query should work on
* @throws CSSException if a selector is invalid
*
* @deprecated as of version 4.5.0; use {@link #validateSelectors(SelectorList, DomNode)} instead
*/
@Deprecated
public static void validateSelectors(final SelectorList selectorList, final int documentMode,
final DomNode domNode) throws CSSException {
for (final Selector selector : selectorList) {
if (!isValidSelector(selector, documentMode, domNode)) {
if (!isValidSelector(selector, domNode)) {
throw new CSSException("Invalid selector: " + selector, null);
}
}
}

/**
* Validates the list of selectors.
* @param selectorList the selectors
* @param domNode the dom node the query should work on
* @throws CSSException if a selector is invalid
*/
public static void validateSelectors(final SelectorList selectorList, final DomNode domNode) throws CSSException {
for (final Selector selector : selectorList) {
if (!isValidSelector(selector, domNode)) {
throw new CSSException("Invalid selector: " + selector, null);
}
}
Expand All @@ -1100,34 +1117,34 @@ public static void validateSelectors(final SelectorList selectorList, final int
/**
* @param documentMode see {@link Document#getDocumentMode()}
*/
private static boolean isValidSelector(final Selector selector, final int documentMode, final DomNode domNode) {
private static boolean isValidSelector(final Selector selector, final DomNode domNode) {
switch (selector.getSelectorType()) {
case ELEMENT_NODE_SELECTOR:
final List<Condition> conditions = ((ElementSelector) selector).getConditions();
if (conditions != null) {
for (final Condition condition : conditions) {
if (!isValidCondition(condition, documentMode, domNode)) {
if (!isValidCondition(condition, domNode)) {
return false;
}
}
}
return true;
case DESCENDANT_SELECTOR:
final DescendantSelector ds = (DescendantSelector) selector;
return isValidSelector(ds.getAncestorSelector(), documentMode, domNode)
&& isValidSelector(ds.getSimpleSelector(), documentMode, domNode);
return isValidSelector(ds.getAncestorSelector(), domNode)
&& isValidSelector(ds.getSimpleSelector(), domNode);
case CHILD_SELECTOR:
final ChildSelector cs = (ChildSelector) selector;
return isValidSelector(cs.getAncestorSelector(), documentMode, domNode)
&& isValidSelector(cs.getSimpleSelector(), documentMode, domNode);
return isValidSelector(cs.getAncestorSelector(), domNode)
&& isValidSelector(cs.getSimpleSelector(), domNode);
case DIRECT_ADJACENT_SELECTOR:
final DirectAdjacentSelector das = (DirectAdjacentSelector) selector;
return isValidSelector(das.getSelector(), documentMode, domNode)
&& isValidSelector(das.getSimpleSelector(), documentMode, domNode);
return isValidSelector(das.getSelector(), domNode)
&& isValidSelector(das.getSimpleSelector(), domNode);
case GENERAL_ADJACENT_SELECTOR:
final GeneralAdjacentSelector gas = (GeneralAdjacentSelector) selector;
return isValidSelector(gas.getSelector(), documentMode, domNode)
&& isValidSelector(gas.getSimpleSelector(), documentMode, domNode);
return isValidSelector(gas.getSelector(), domNode)
&& isValidSelector(gas.getSimpleSelector(), domNode);
default:
if (LOG.isWarnEnabled()) {
LOG.warn("Unhandled CSS selector type '"
Expand All @@ -1140,7 +1157,7 @@ private static boolean isValidSelector(final Selector selector, final int docume
/**
* @param documentMode see {@link Document#getDocumentMode()}
*/
private static boolean isValidCondition(final Condition condition, final int documentMode, final DomNode domNode) {
private static boolean isValidCondition(final Condition condition, final DomNode domNode) {
switch (condition.getConditionType()) {
case ATTRIBUTE_CONDITION:
case ID_CONDITION:
Expand All @@ -1156,7 +1173,7 @@ private static boolean isValidCondition(final Condition condition, final int doc
final NotPseudoClassCondition notPseudoCondition = (NotPseudoClassCondition) condition;
final SelectorList selectorList = notPseudoCondition.getSelectors();
for (final Selector selector : selectorList) {
if (!isValidSelector(selector, documentMode, domNode)) {
if (!isValidSelector(selector, domNode)) {
return false;
}
}
Expand All @@ -1169,9 +1186,6 @@ private static boolean isValidCondition(final Condition condition, final int doc
}
value = value.substring(0, value.indexOf('(') + 1) + ')';
}
if (documentMode < 9) {
return CSS2_PSEUDO_CLASSES.contains(value);
}

if ("nth-child()".equals(value)) {
final String arg = StringUtils.substringBetween(condition.getValue(), "(", ")").trim();
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/htmlunit/html/DomNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -1789,7 +1789,7 @@ protected SelectorList getSelectorList(final String selectors, final WebClient w
}

if (selectorList != null) {
CssStyleSheet.validateSelectors(selectorList, 9, this);
CssStyleSheet.validateSelectors(selectorList, this);

}
return selectorList;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,13 +321,13 @@ public String getUri() {
* @throws CSSException if a selector is invalid
*
* @deprecated as of version 3.7.0; use
* {@link CssStyleSheet#validateSelectors(org.htmlunit.cssparser.parser.selector.SelectorList, int, DomNode)}
* {@link CssStyleSheet#validateSelectors(org.htmlunit.cssparser.parser.selector.SelectorList, DomNode)}
* instead
*/
@Deprecated
public static void validateSelectors(final SelectorList selectorList, final int documentMode,
final DomNode domNode) throws CSSException {
CssStyleSheet.validateSelectors(selectorList, documentMode, domNode);
CssStyleSheet.validateSelectors(selectorList, domNode);
}

private void initCssRules() {
Expand Down

0 comments on commit 2283bdf

Please sign in to comment.