diff options
author | "Anton Tarasov ext:(%22) <anton.tarasov@jetbrains.com> | 2016-01-21 12:33:08 +0300 |
---|---|---|
committer | "Anton Tarasov ext:(%22) <anton.tarasov@jetbrains.com> | 2016-01-21 12:33:08 +0300 |
commit | 02f9a5fbb4924ff67c8a04c15e490acfcc750003 (patch) | |
tree | 0023128d574e316a2c3f5062fe6acc7e78191d0f | |
parent | deb73834b9cd6402dddc6c1eb984bc41113c66b4 (diff) | |
download | jdk8u_jdk-02f9a5fbb4924ff67c8a04c15e490acfcc750003.tar.gz |
IDEA-148854: AppCode crashes randomly every 15 mins or so
--HG--
branch : 8u40-verified-fixes
-rw-r--r-- | src/macosx/classes/sun/lwawt/macosx/CAccessibility.java | 21 | ||||
-rw-r--r-- | src/macosx/classes/sun/lwawt/macosx/CAccessible.java | 2 | ||||
-rw-r--r-- | src/macosx/native/sun/awt/JavaComponentAccessibility.m | 7 |
3 files changed, 20 insertions, 10 deletions
diff --git a/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java b/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java index d3ab6a651d..c58a7a6dd2 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java +++ b/src/macosx/classes/sun/lwawt/macosx/CAccessibility.java @@ -82,6 +82,15 @@ class CAccessibility implements PropertyChangeListener { 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); @@ -177,7 +186,7 @@ class CAccessibility implements PropertyChangeListener { return new Boolean(as.isAccessibleChildSelected(index)); } - }, c); + }, c, false); } public static AccessibleStateSet getAccessibleStateSet(final AccessibleContext ac, final Component c) { @@ -199,7 +208,7 @@ class CAccessibility implements PropertyChangeListener { if (ass == null) return null; return ass.contains(as); } - }, c); + }, c, false); } static Field getAccessibleBundleKeyFieldWithReflection() { @@ -265,7 +274,7 @@ class CAccessibility implements PropertyChangeListener { public Integer call() throws Exception { return at.getCharCount(); } - }, c); + }, c, 0); } // Accessibility Threadsafety for JavaComponentAccessibility.m @@ -290,7 +299,7 @@ class CAccessibility implements PropertyChangeListener { if (ac == null) return null; return ac.getAccessibleIndexInParent(); } - }, c); + }, c, -1); } public static AccessibleComponent getAccessibleComponent(final Accessible a, final Component c) { @@ -386,7 +395,7 @@ class CAccessibility implements PropertyChangeListener { return aComp.isFocusTraversable(); } - }, c); + }, c, false); } public static Accessible accessibilityHitTest(final Container parent, final float hitPointX, final float hitPointY) { @@ -443,7 +452,7 @@ class CAccessibility implements PropertyChangeListener { return aComp.isEnabled(); } - }, c); + }, c, false); } // KCH - can we make this a postEvent instead? diff --git a/src/macosx/classes/sun/lwawt/macosx/CAccessible.java b/src/macosx/classes/sun/lwawt/macosx/CAccessible.java index c5611c4d45..8c89b1d99f 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CAccessible.java +++ b/src/macosx/classes/sun/lwawt/macosx/CAccessible.java @@ -96,7 +96,7 @@ class CAccessible extends CFRetainedResource implements Accessible { @Override public AccessibleContext getAccessibleContext() { - return accessible.getAccessibleContext(); + return accessible != null ? accessible.getAccessibleContext() : null; } // currently only supports text components diff --git a/src/macosx/native/sun/awt/JavaComponentAccessibility.m b/src/macosx/native/sun/awt/JavaComponentAccessibility.m index ffea40f72f..c00731f097 100644 --- a/src/macosx/native/sun/awt/JavaComponentAccessibility.m +++ b/src/macosx/native/sun/awt/JavaComponentAccessibility.m @@ -323,8 +323,9 @@ static NSObject *sAttributeNamesLOCK = nil; { jobject jcomponent = [(AWTView *)view awtComponent:env]; jint index = JNFCallStaticIntMethod(env, sjm_getAccessibleIndexInParent, jaccessible, jcomponent); - NSString *javaRole = getJavaRole(env, jaccessible, jcomponent); + if (index < 0) return nil; + NSString *javaRole = getJavaRole(env, jaccessible, jcomponent); return [self createWithAccessible:jaccessible role:javaRole index:index withEnv:env withView:view]; } @@ -663,8 +664,8 @@ static NSObject *sAttributeNamesLOCK = nil; if (![[self accessibilityRoleAttribute] isEqualToString:NSAccessibilityListRole]) { return [super accessibilityIndexOfChild:child]; } - - return JNFCallStaticIntMethod([ThreadUtilities getJNIEnv], sjm_getAccessibleIndexInParent, ((JavaComponentAccessibility *)child)->fAccessible, ((JavaComponentAccessibility *)child)->fComponent); + jint index = JNFCallStaticIntMethod([ThreadUtilities getJNIEnv], sjm_getAccessibleIndexInParent, ((JavaComponentAccessibility *)child)->fAccessible, ((JavaComponentAccessibility *)child)->fComponent); + return index >= 0 ? index : 0; } // Without this optimization accessibilityChildrenAttribute is called in order to get the entire array of children. |