<AWT Dev> RFR: 8267385: Create NSAccessibilityElement implementation for JavaComponentAccessibility

Sergey Bylokhov serb at openjdk.java.net
Wed Jun 16 21:25:38 UTC 2021


On Tue, 8 Jun 2021 13:06:53 GMT, Artem Semenov <github.com+36081106+savoptik at openjdk.org> wrote:

> 8267385: Create NSAccessibilityElement implementation for JavaComponentAccessibility
> This pull request contains solutions for the following tickets:
> * JDK-8267385 Create NSAccessibilityElement implementation for JavaComponentAccessibility;
> * JDK-8262031 Create implementation for NSAccessibilityNavigableStaticText protocol;
> * JDK-8264287 Create implementation for NSAccessibilityComboBox protocol peer;
> * JDK-8264303 Create implementation for NSAccessibilityTabGroup protocol peer;
> * JDK-8264292 Create implementation for NSAccessibilityList protocol peer;
> * JDK-8267387 Create implementation for NSAccessibilityOutline protocol;
> * JDK-8267388 Create implementation for NSAccessibilityTable protocol.

src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java line 130:

> 128:         if (c != null) {
> 129:             try {
> 130:                 value = EventQueue.isDispatchThread() ? callable.call() : LWCToolkit.invokeAndWait(callable, c);

When this method is called on EDT?

src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java line 556:

> 554:                     ((JList) parent).setSelectedIndex(i);
> 555:                     return;
> 556:                 }

Looks like the a11y interface miss "setSelectedIndex" method? The code above will not work for the custom component which uses the "AccessibleJListChild" a11y object?

src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m line 50:

> 48: #define JAVA_AX_ALL_CHILDREN (-1)
> 49: #define JAVA_AX_SELECTED_CHILDREN (-2)
> 50: #define JAVA_AX_VISIBLE_CHILDREN (-3)

Why not mark them as @native in the CAccessibility  and use constants generated by the javac?

src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/NavigableTextAccessibility.m line 79:

> 77:     if (values == NULL) {
> 78:         // Note: Java will not be on the stack here so a java exception can't happen and no need to call ExceptionCheck.
> 79:         NSLog(@"%s failed calling GetDoubleArrayElements", __FUNCTION__);

Please clarify the comment above.

src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TableAccessibility.m line 44:

> 42:     jclass clsInfo = (*env)->GetObjectClass(env, axContext);
> 43:     DECLARE_METHOD_RETURN(jm_getAccessibleRowCount, clsInfo, "getAccessibleRowCount", "()I", 0);
> 44:     jint javaRowsCount = (*env)->CallIntMethod(env, axContext, jm_getAccessibleRowCount);

Do we need to check the java exception here and in other similar cases? This code is executed on appkit?

src/java.desktop/macosx/native/libawt_lwawt/awt/a11y/TableAccessibility.m line 155:

> 153: - (NSArray *)accessibilitySelectedChildren
> 154: {
> 155:     return [self accessibilitySelectedRows];

Does it mean that the children of the table are rows and columns and not "cells".? How it will work if only one cell is selected?

test/jdk/java/awt/a11y/AccessibleJComboboxTest.java line 30:

> 28:  * @summary Create implementation for NSAccessibilityComboBox protocol peer
> 29:  * @author Artem.Semenov at jetbrains.com
> 30:  * @run main/manual AccessibleJComboboxTest

On what platforms these tests are supposed to work?

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

PR: https://git.openjdk.java.net/jdk/pull/4412


More information about the awt-dev mailing list