8165829: Android Studio 2.x crashes with NPE at sun.lwawt.macosx.CAccessibility.getAccessibleIndexInParent
Reviewed-by: serb, ptbrunet
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java Tue Sep 27 09:55:45 2016 +0300
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java Tue Sep 27 17:15:02 2016 +0300
@@ -86,6 +86,15 @@
return null;
}
+ static <T> T invokeAndWait(final Callable<T> callable, final Component c, final T defValue) {
+ T value = null;
+ try {
+ value = LWCToolkit.invokeAndWait(callable, c);
+ } catch (final Exception e) { e.printStackTrace(); }
+
+ return value != null ? value : defValue;
+ }
+
static void invokeLater(final Runnable runnable, final Component c) {
try {
LWCToolkit.invokeLater(runnable, c);
@@ -181,7 +190,7 @@
return as.isAccessibleChildSelected(index);
}
- }, c);
+ }, c, false);
}
public static AccessibleStateSet getAccessibleStateSet(final AccessibleContext ac, final Component c) {
@@ -203,7 +212,7 @@
if (ass == null) return null;
return ass.contains(as);
}
- }, c);
+ }, c, false);
}
static String getAccessibleRoleFor(final Accessible a) {
@@ -248,7 +257,7 @@
public Integer call() throws Exception {
return at.getCharCount();
}
- }, c);
+ }, c, 0);
}
// Accessibility Threadsafety for JavaComponentAccessibility.m
@@ -273,7 +282,7 @@
if (ac == null) return null;
return ac.getAccessibleIndexInParent();
}
- }, c);
+ }, c, -1);
}
public static AccessibleComponent getAccessibleComponent(final Accessible a, final Component c) {
@@ -369,7 +378,7 @@
return aComp.isFocusTraversable();
}
- }, c);
+ }, c, false);
}
public static Accessible accessibilityHitTest(final Container parent, final float hitPointX, final float hitPointY) {
@@ -428,7 +437,7 @@
return aComp.isEnabled();
}
- }, c);
+ }, c, false);
}
// KCH - can we make this a postEvent instead?
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m Tue Sep 27 09:55:45 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m Tue Sep 27 17:15:02 2016 +0300
@@ -323,11 +323,15 @@
+ (JavaComponentAccessibility *)createWithAccessible:(jobject)jaccessible withEnv:(JNIEnv *)env withView:(NSView *)view
{
+ JavaComponentAccessibility *ret = nil;
jobject jcomponent = [(AWTView *)view awtComponent:env];
jint index = JNFCallStaticIntMethod(env, sjm_getAccessibleIndexInParent, jaccessible, jcomponent);
- NSString *javaRole = getJavaRole(env, jaccessible, jcomponent);
+ if (index >= 0) {
+ NSString *javaRole = getJavaRole(env, jaccessible, jcomponent);
+ ret = [self createWithAccessible:jaccessible role:javaRole index:index withEnv:env withView:view];
+ }
(*env)->DeleteLocalRef(env, jcomponent);
- return [self createWithAccessible:jaccessible role:javaRole index:index withEnv:env withView:view];
+ return ret;
}
+ (JavaComponentAccessibility *) createWithAccessible:(jobject)jaccessible role:(NSString *)javaRole index:(jint)index withEnv:(JNIEnv *)env withView:(NSView *)view