diff --git a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/Aria.java b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/api/accessibility/Aria.java
similarity index 98%
rename from sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/Aria.java
rename to sonar-html-plugin/src/main/java/org/sonar/plugins/html/api/accessibility/Aria.java
index 15adaa6f3..2f9d7b16e 100644
--- a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/Aria.java
+++ b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/api/accessibility/Aria.java
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-package org.sonar.plugins.html.checks.accessibility;
+package org.sonar.plugins.html.api.accessibility;
import java.util.HashMap;
import java.util.Map;
@@ -80,7 +80,7 @@ public class Aria {
ARIA_PROPERTIES.put("aria-valuetext", new AriaProperty("aria-valuetext", AriaPropertyType.STRING));
}
- static class AriaProperty {
+ public static class AriaProperty {
private final String name;
private final AriaPropertyType type;
private final Optional allowUndefined;
@@ -114,7 +114,7 @@ public Set getValues() {
}
}
- enum AriaPropertyType {
+ public enum AriaPropertyType {
BOOLEAN("boolean"),
STRING("string"),
TOKEN("token"),
diff --git a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/AriaProptypesCheck.java b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/AriaProptypesCheck.java
index 840b3ba5e..9551b1330 100644
--- a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/AriaProptypesCheck.java
+++ b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/AriaProptypesCheck.java
@@ -23,11 +23,11 @@
import java.util.stream.Collectors;
import org.sonar.check.Rule;
import org.sonar.plugins.html.checks.AbstractPageCheck;
-import org.sonar.plugins.html.checks.accessibility.Aria.AriaProperty;
-import org.sonar.plugins.html.checks.accessibility.Aria.AriaPropertyType;
+import org.sonar.plugins.html.api.accessibility.Aria.AriaProperty;
+import org.sonar.plugins.html.api.accessibility.Aria.AriaPropertyType;
import org.sonar.plugins.html.node.TagNode;
-import static org.sonar.plugins.html.checks.accessibility.Aria.ARIA_PROPERTIES;
+import static org.sonar.plugins.html.api.accessibility.Aria.ARIA_PROPERTIES;
@Rule(key = "S6793")
public class AriaProptypesCheck extends AbstractPageCheck {
diff --git a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/HeadingHasAccessibleContentCheck.java b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/HeadingHasAccessibleContentCheck.java
index 0611a5566..fc9722f10 100644
--- a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/HeadingHasAccessibleContentCheck.java
+++ b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/HeadingHasAccessibleContentCheck.java
@@ -20,7 +20,6 @@
import org.sonar.check.Rule;
import org.sonar.plugins.html.api.Helpers;
import org.sonar.plugins.html.api.BufferStack;
-import org.sonar.plugins.html.api.HtmlConstants;
import org.sonar.plugins.html.checks.AbstractPageCheck;
import org.sonar.plugins.html.node.DirectiveNode;
import org.sonar.plugins.html.node.ExpressionNode;
@@ -32,6 +31,8 @@
import java.util.Deque;
import java.util.List;
+import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
+
@Rule(key = "S6850")
public class HeadingHasAccessibleContentCheck extends AbstractPageCheck {
private final List invalidAttributes = List.of(
@@ -60,7 +61,7 @@ public void startElement(TagNode node) {
String nodeName = node.getNodeName();
// tags that are not part of the known HTML tags list are considered as content
- if (!HtmlConstants.KNOWN_HTML_TAGS.contains(nodeName)) {
+ if (!hasKnownHTMLTag(node)) {
bufferStack.write(nodeName);
}
}
diff --git a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoInteractiveElementToNoninteractiveRoleCheck.java b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoInteractiveElementToNoninteractiveRoleCheck.java
index 469d4141b..d8c7386ce 100644
--- a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoInteractiveElementToNoninteractiveRoleCheck.java
+++ b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoInteractiveElementToNoninteractiveRoleCheck.java
@@ -17,15 +17,14 @@
*/
package org.sonar.plugins.html.checks.accessibility;
-import java.util.Locale;
import org.sonar.check.Rule;
import org.sonar.plugins.html.checks.AbstractPageCheck;
import org.sonar.plugins.html.node.TagNode;
-import static org.sonar.plugins.html.api.HtmlConstants.INTERACTIVE_ELEMENTS;
-import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
-import static org.sonar.plugins.html.api.HtmlConstants.NON_INTERACTIVE_ROLES;
-import static org.sonar.plugins.html.api.HtmlConstants.PRESENTATION_ROLES;
+import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
+import static org.sonar.plugins.html.api.HtmlConstants.hasNonInteractiveRole;
+import static org.sonar.plugins.html.api.HtmlConstants.hasPresentationRole;
+import static org.sonar.plugins.html.api.HtmlConstants.isInteractiveElement;
@Rule(key = "S6843")
public class NoInteractiveElementToNoninteractiveRoleCheck extends AbstractPageCheck {
@@ -34,13 +33,10 @@ public class NoInteractiveElementToNoninteractiveRoleCheck extends AbstractPageC
@Override
public void startElement(TagNode node) {
- var role = node.getPropertyValue("role");
- var tagName = node.getNodeName().toLowerCase(Locale.ROOT);
if (
- role != null &&
- KNOWN_HTML_TAGS.contains(tagName) &&
- INTERACTIVE_ELEMENTS.contains(tagName) &&
- (NON_INTERACTIVE_ROLES.contains(role) || PRESENTATION_ROLES.contains(role))
+ hasKnownHTMLTag(node) &&
+ isInteractiveElement(node) &&
+ (hasNonInteractiveRole(node) || hasPresentationRole(node))
) {
createViolation(node, MESSAGE);
}
diff --git a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNonInteractiveElementsWithHandlersCheck.java b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNonInteractiveElementsWithHandlersCheck.java
index 659f224cb..566c33d82 100644
--- a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNonInteractiveElementsWithHandlersCheck.java
+++ b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNonInteractiveElementsWithHandlersCheck.java
@@ -17,8 +17,8 @@
*/
package org.sonar.plugins.html.checks.accessibility;
-import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
import static org.sonar.plugins.html.api.HtmlConstants.hasAbstractRole;
+import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
import static org.sonar.plugins.html.api.HtmlConstants.isInteractiveElement;
import static org.sonar.plugins.html.api.HtmlConstants.hasInteractiveRole;
import static org.sonar.plugins.html.api.HtmlConstants.isNonInteractiveElement;
@@ -47,8 +47,7 @@ public class NoNonInteractiveElementsWithHandlersCheck extends AbstractPageCheck
@Override
public void startElement(TagNode element) {
- var tagName = element.getNodeName();
- if (!KNOWN_HTML_TAGS.contains(tagName)) {
+ if (!hasKnownHTMLTag(element)) {
return;
}
diff --git a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNoninteractiveElementToInteractiveRoleCheck.java b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNoninteractiveElementToInteractiveRoleCheck.java
index ffc3c6d66..02ae7a72d 100644
--- a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNoninteractiveElementToInteractiveRoleCheck.java
+++ b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNoninteractiveElementToInteractiveRoleCheck.java
@@ -17,9 +17,9 @@
*/
package org.sonar.plugins.html.checks.accessibility;
-import static org.sonar.plugins.html.api.HtmlConstants.INTERACTIVE_ROLES;
-import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
-import static org.sonar.plugins.html.api.HtmlConstants.NON_INTERACTIVE_ELEMENTS;
+import static org.sonar.plugins.html.api.HtmlConstants.hasInteractiveRole;
+import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
+import static org.sonar.plugins.html.api.HtmlConstants.isNonInteractiveElement;
import java.util.Locale;
import org.sonar.check.Rule;
@@ -33,13 +33,10 @@ public class NoNoninteractiveElementToInteractiveRoleCheck extends AbstractPageC
@Override
public void startElement(TagNode node) {
- var role = node.getPropertyValue("role");
- var tagName = node.getNodeName().toLowerCase(Locale.ROOT);
if (
- role != null &&
- KNOWN_HTML_TAGS.contains(tagName) &&
- NON_INTERACTIVE_ELEMENTS.contains(tagName) &&
- INTERACTIVE_ROLES.contains(role)
+ hasKnownHTMLTag(node) &&
+ isNonInteractiveElement(node) &&
+ hasInteractiveRole(node)
) {
createViolation(node, MESSAGE);
}
diff --git a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNoninteractiveTabIndexCheck.java b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNoninteractiveTabIndexCheck.java
index 032469cc2..b5ba6eabd 100644
--- a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNoninteractiveTabIndexCheck.java
+++ b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoNoninteractiveTabIndexCheck.java
@@ -17,9 +17,9 @@
*/
package org.sonar.plugins.html.checks.accessibility;
-import static org.sonar.plugins.html.api.HtmlConstants.INTERACTIVE_ELEMENTS;
-import static org.sonar.plugins.html.api.HtmlConstants.INTERACTIVE_ROLES;
-import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
+import static org.sonar.plugins.html.api.HtmlConstants.hasInteractiveRole;
+import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
+import static org.sonar.plugins.html.api.HtmlConstants.isInteractiveElement;
import org.sonar.check.Rule;
import org.sonar.plugins.html.checks.AbstractPageCheck;
@@ -32,7 +32,7 @@ public class NoNoninteractiveTabIndexCheck extends AbstractPageCheck {
@Override
public void startElement(TagNode node) {
- if (!isHTMLTag(node) || isInteractiveElement(node) || hasInteractiveRole(node)) {
+ if (!hasKnownHTMLTag(node) || isInteractiveElement(node) || hasInteractiveRole(node)) {
return;
}
@@ -50,19 +50,4 @@ public void startElement(TagNode node) {
// ignore
}
}
-
- private static boolean isHTMLTag(TagNode element) {
- var tagName = element.getNodeName();
- return KNOWN_HTML_TAGS.stream().anyMatch(tagName::equalsIgnoreCase);
- }
-
- private static boolean isInteractiveElement(TagNode element) {
- var tagName = element.getNodeName();
- return INTERACTIVE_ELEMENTS.stream().anyMatch(tagName::equalsIgnoreCase);
- }
-
- private static boolean hasInteractiveRole(TagNode element) {
- var role = element.getAttribute("role");
- return role != null && INTERACTIVE_ROLES.stream().anyMatch(role::equalsIgnoreCase);
- }
}
diff --git a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoStaticElementInteractionsCheck.java b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoStaticElementInteractionsCheck.java
index 73b38fd3d..542e4cdc1 100644
--- a/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoStaticElementInteractionsCheck.java
+++ b/sonar-html-plugin/src/main/java/org/sonar/plugins/html/checks/accessibility/NoStaticElementInteractionsCheck.java
@@ -17,8 +17,8 @@
*/
package org.sonar.plugins.html.checks.accessibility;
-import static org.sonar.plugins.html.api.HtmlConstants.KNOWN_HTML_TAGS;
import static org.sonar.plugins.html.api.HtmlConstants.hasAbstractRole;
+import static org.sonar.plugins.html.api.HtmlConstants.hasKnownHTMLTag;
import static org.sonar.plugins.html.api.HtmlConstants.isInteractiveElement;
import static org.sonar.plugins.html.api.HtmlConstants.hasInteractiveRole;
import static org.sonar.plugins.html.api.HtmlConstants.isNonInteractiveElement;
@@ -47,9 +47,7 @@ public class NoStaticElementInteractionsCheck extends AbstractPageCheck {
@Override
public void startElement(TagNode element) {
- var tagName = element.getNodeName();
-
- if (!KNOWN_HTML_TAGS.contains(tagName)) {
+ if (!hasKnownHTMLTag(element)) {
return;
}
diff --git a/sonar-html-plugin/src/test/resources/checks/NoInteractiveElementToNoninteractiveRoleCheck/valid.html b/sonar-html-plugin/src/test/resources/checks/NoInteractiveElementToNoninteractiveRoleCheck/valid.html
index 76bd66275..e6c6aa6a0 100644
--- a/sonar-html-plugin/src/test/resources/checks/NoInteractiveElementToNoninteractiveRoleCheck/valid.html
+++ b/sonar-html-plugin/src/test/resources/checks/NoInteractiveElementToNoninteractiveRoleCheck/valid.html
@@ -107,7 +107,7 @@
-
+