IJPL-162408 improve AccessibleNameNotEmpty inspection and add utils.kt

Merge-request: IJ-MR-146013
Merged-by: Dmitrii Drobotov <dmitry.drobotov@jetbrains.com>

GitOrigin-RevId: 274e2837c30eb77ac14559766c40125c30777b07
This commit is contained in:
Valentin.Dorofeev
2024-10-14 17:52:01 +00:00
committed by intellij-monorepo-bot
parent ff567970a9
commit 3df8bf4481
4 changed files with 33 additions and 28 deletions
@@ -12,10 +12,8 @@ class AccessibleNameAndDescriptionNotEqualInspection : UiInspectorAccessibilityI
override val severity: Severity = Severity.WARNING
override fun passesInspection(context: AccessibleContext): Boolean {
val name = context.accessibleName
val description = context.accessibleDescription
if (name != null && description != null && name.isNotEmpty() && description.isNotEmpty()) {
return name != description
if (context.accessibleName != null && context.accessibleDescription != null && context.accessibleName.isNotEmpty() && context.accessibleDescription.isNotEmpty()) {
return context.accessibleName != context.accessibleDescription
}
return true
}
@@ -13,12 +13,7 @@ class AccessibleNameNotEmptyForFocusableComponentsInspection : UiInspectorAccess
override val severity: Severity = Severity.WARNING
override fun passesInspection(context: AccessibleContext): Boolean {
val states = context.accessibleStateSet
val containsAll = states.contains(AccessibleState.ENABLED)
&& states.contains(AccessibleState.FOCUSABLE)
&& states.contains(AccessibleState.VISIBLE)
&& states.contains(AccessibleState.SHOWING)
if (containsAll) {
if (context.isVisibleAndEnabled() && context.accessibleStateSet.contains(AccessibleState.FOCUSABLE) && context.isInteractive()) {
return context.accessibleName != null && !context.accessibleName.isEmpty()
}
return true
@@ -4,7 +4,6 @@ package com.intellij.internal.inspector.accessibilityAudit
import com.intellij.internal.InternalActionsBundle
import org.jetbrains.annotations.ApiStatus
import javax.accessibility.AccessibleContext
import javax.accessibility.AccessibleRole
import javax.accessibility.AccessibleState
@ApiStatus.Internal
@@ -14,23 +13,7 @@ class AccessibleStateSetContainsFocusableInspection : UiInspectorAccessibilityIn
override val severity: Severity = Severity.WARNING
override fun passesInspection(context: AccessibleContext): Boolean {
if ((context.accessibleStateSet.contains(AccessibleState.ENABLED) &&
context.accessibleStateSet.contains(AccessibleState.VISIBLE) &&
context.accessibleStateSet.contains(AccessibleState.SHOWING)) &&
context.accessibleRole in arrayOf(AccessibleRole.CHECK_BOX,
AccessibleRole.PUSH_BUTTON,
AccessibleRole.RADIO_BUTTON,
AccessibleRole.TOGGLE_BUTTON,
AccessibleRole.LIST,
AccessibleRole.LIST_ITEM,
AccessibleRole.TABLE,
AccessibleRole.TREE,
AccessibleRole.PAGE_TAB_LIST,
AccessibleRole.TEXT,
AccessibleRole.PASSWORD_TEXT,
AccessibleRole.HYPERLINK,
AccessibleRole.POPUP_MENU,
AccessibleRole.SLIDER)) {
if (context.isInteractive() && context.isVisibleAndEnabled()) {
return context.accessibleStateSet.contains(AccessibleState.FOCUSABLE)
}
return true
@@ -0,0 +1,29 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.internal.inspector.accessibilityAudit
import javax.accessibility.AccessibleContext
import javax.accessibility.AccessibleRole
import javax.accessibility.AccessibleState
internal fun AccessibleContext.isInteractive(): Boolean {
return this.accessibleRole in arrayOf(AccessibleRole.CHECK_BOX,
AccessibleRole.PUSH_BUTTON,
AccessibleRole.RADIO_BUTTON,
AccessibleRole.TOGGLE_BUTTON,
AccessibleRole.LIST,
AccessibleRole.LIST_ITEM,
AccessibleRole.TABLE,
AccessibleRole.TREE,
AccessibleRole.PAGE_TAB_LIST,
AccessibleRole.TEXT,
AccessibleRole.PASSWORD_TEXT,
AccessibleRole.HYPERLINK,
AccessibleRole.POPUP_MENU,
AccessibleRole.SLIDER)
}
internal fun AccessibleContext.isVisibleAndEnabled(): Boolean {
return this.accessibleStateSet.contains(AccessibleState.ENABLED) &&
this.accessibleStateSet.contains(AccessibleState.VISIBLE) &&
this.accessibleStateSet.contains(AccessibleState.SHOWING)
}