Querying native accessibility children from accessibilityIsIgnored can cause AppKit to walk up the ancestor hierarchy and query the same window’s ignored status again, resulting in infinite recursion that causes a StackOverflowError. The error may go unnoticed during normal execution because the native code clears pending Java exceptions, while an exception breakpoint in a debug session exposes the StackOverflowError before it is cleared.
The fix introduces a Java method that traverses the JavaFX accessibility children directly and reports whether the hierarchy contains context-menu or tooltip content. The native peer uses this result to determine whether the window should be ignored, without requesting native unignored children. The original child query also initialized descendant accessibility peers so that VoiceOver could discover the menu content. The replacement preserves this behavior by initializing every peer encountered during traversal and continuing through all descendants even after finding a matching role. --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - 8393476: [a11y] AssertionFailed in a double popup in macOS in debugger Changes: https://git.openjdk.org/jfx/pull/2360/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=2360&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8393476 Stats: 89 lines in 4 files changed: 58 ins; 23 del; 8 mod Patch: https://git.openjdk.org/jfx/pull/2360.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/2360/head:pull/2360 PR: https://git.openjdk.org/jfx/pull/2360
