--- old/src/jdk.accessibility/windows/classes/com/sun/java/accessibility/internal/AccessBridge.java 2019-08-22 18:28:03.890143129 +0530 +++ new/src/jdk.accessibility/windows/classes/com/sun/java/accessibility/internal/AccessBridge.java 2019-08-22 18:28:03.638017129 +0530 @@ -1457,6 +1457,24 @@ return null; } + private int get_nonVisibleChildrenCountBeforeIndex(AccessibleContext parentAC, int beforeIndex) { + if (parentAC == null || beforeIndex < 0 || beforeIndex >= parentAC.getAccessibleChildrenCount()) { + return 0; + } else { + int childrenCount = parentAC.getAccessibleChildrenCount(); + int nonVisibleChildrenCount = 0; + if (beforeIndex >= childrenCount) { + beforeIndex = childrenCount - 1; + } + for (int i = 0; i <= beforeIndex; i++) { + if (!parentAC.getAccessibleChild(i).getAccessibleContext().getAccessibleStateSet().contains(AccessibleState.SHOWING)) { + nonVisibleChildrenCount++; + } + } + return nonVisibleChildrenCount; + } + } + /** * returns the AccessibleParent from an AccessibleContext */ @@ -1487,7 +1505,12 @@ return InvocationUtils.invokeAndWait(new Callable() { @Override public Integer call() throws Exception { - return ac.getAccessibleIndexInParent(); + int indexInParent = ac.getAccessibleIndexInParent(); + Accessible parent = ac.getAccessibleParent(); + if (parent != null) { + indexInParent -= get_nonVisibleChildrenCountBeforeIndex(parent.getAccessibleContext(), indexInParent); + } + return indexInParent; } }, ac); } @@ -1501,7 +1524,8 @@ return InvocationUtils.invokeAndWait(new Callable() { @Override public Integer call() throws Exception { - return ac.getAccessibleChildrenCount(); + int childrenCount = ac.getAccessibleChildrenCount(); + return childrenCount - get_nonVisibleChildrenCountBeforeIndex(ac, childrenCount); } }, ac); } @@ -1537,7 +1561,8 @@ return InvocationUtils.invokeAndWait(new Callable() { @Override public AccessibleContext call() throws Exception { - Accessible a = ac.getAccessibleChild(index); + int visibleIndex = index + get_nonVisibleChildrenCountBeforeIndex(ac, index); + Accessible a = ac.getAccessibleChild(visibleIndex); if (a != null) { return a.getAccessibleContext(); } @@ -3517,7 +3542,18 @@ AccessibleRelation[] relations = ars.toArray(); if (relations != null && i >= 0 && i < relations.length) { Object[] targets = relations[i].getTarget(); - return targets.length; + if (targets != null) { + int nonVisibleTargets = 0; + for (Object target : targets) { + if (target instanceof Accessible) { + AccessibleContext ac = ((Accessible) target).getAccessibleContext(); + if (!ac.getAccessibleStateSet().contains(AccessibleState.SHOWING)) { + nonVisibleTargets++; + } + } + } + return targets.length - nonVisibleTargets; + } } } } @@ -3532,7 +3568,7 @@ */ private AccessibleContext getAccessibleRelationTarget(final AccessibleContext ac, final int i, final int j) { - debugString("[INFO]: ***** getAccessibleRelationTarget"); + debugString("[INFO]: ***** getAccessibleRelationTarget: get target[" + j + "] from relation[" + i + "] "); return InvocationUtils.invokeAndWait(new Callable() { @Override public AccessibleContext call() throws Exception { @@ -3543,7 +3579,7 @@ if (relations != null && i >= 0 && i < relations.length) { Object[] targets = relations[i].getTarget(); if (targets != null && j >= 0 & j < targets.length) { - Object o = targets[j]; + Object o = targets[j + get_NonVisibleTargetCountBeforeIndex(targets, j)]; if (o instanceof Accessible) { return ((Accessible) o).getAccessibleContext(); } @@ -3556,6 +3592,22 @@ }, ac); } + private int get_NonVisibleTargetCountBeforeIndex(Object[] targets, int indexBefore) { + if (indexBefore == 0 || indexBefore >= targets.length) { + return 0; + } + int nonVisibleTargetsCount = 0; + for (int i = 0 ; i <= indexBefore; i++) { + if (targets[i] instanceof Accessible) { + AccessibleContext ac = ((Accessible) targets[i]).getAccessibleContext(); + if (ac != null && !ac.getAccessibleStateSet().contains(AccessibleState.SHOWING)) { + nonVisibleTargetsCount++; + } + } + } + return nonVisibleTargetsCount; + } + // ========= AccessibleHypertext ========= private Map hyperTextContextMap = new WeakHashMap<>();