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

Reply via email to