< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityAction.m

Print this page
rev 54094 : 8257853: Remove dependencies on JNF's JNI utility functions in AWT and 2D code
rev 54097 : 8259869: [macOS] Remove desktop module dependencies on JNF Reference APIs
rev 54098 : 8260616: Removing remaining JNF dependencies in the java.desktop module
8259729: Missed JNFInstanceOf -> IsInstanceOf conversion
rev 54101 : 8259585: Accessible actions do not work on mac os x
Reviewed-by: serb

*** 1,7 **** /* ! * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 25,93 **** #import "JavaAccessibilityAction.h" #import "JavaAccessibilityUtilities.h" #import "ThreadUtilities.h" @implementation JavaAxAction - (id)initWithEnv:(JNIEnv *)env withAccessibleAction:(jobject)accessibleAction withIndex:(jint)index withComponent:(jobject)component { self = [super init]; if (self) { ! fAccessibleAction = JNFNewWeakGlobalRef(env, accessibleAction); fIndex = index; ! fComponent = JNFNewWeakGlobalRef(env, component); } return self; } - (void)dealloc { JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; ! JNFDeleteWeakGlobalRef(env, fAccessibleAction); fAccessibleAction = NULL; ! JNFDeleteWeakGlobalRef(env, fComponent); fComponent = NULL; [super dealloc]; } - (NSString *)getDescription { - static JNF_STATIC_MEMBER_CACHE(jm_getAccessibleActionDescription, sjc_CAccessibility, "getAccessibleActionDescription", "(Ljavax/accessibility/AccessibleAction;ILjava/awt/Component;)Ljava/lang/String;"); - JNIEnv* env = [ThreadUtilities getJNIEnv]; jobject fCompLocal = (*env)->NewLocalRef(env, fComponent); if ((*env)->IsSameObject(env, fCompLocal, NULL)) { return nil; } NSString *str = nil; ! jstring jstr = JNFCallStaticObjectMethod( env, jm_getAccessibleActionDescription, ! fAccessibleAction, fIndex, fCompLocal ); if (jstr != NULL) { ! str = JNFJavaToNSString(env, jstr); // AWT_THREADING Safe (AWTRunLoopMode) (*env)->DeleteLocalRef(env, jstr); } (*env)->DeleteLocalRef(env, fCompLocal); return str; } - (void)perform { - static JNF_STATIC_MEMBER_CACHE(jm_doAccessibleAction, sjc_CAccessibility, "doAccessibleAction", "(Ljavax/accessibility/AccessibleAction;ILjava/awt/Component;)V"); - JNIEnv* env = [ThreadUtilities getJNIEnv]; ! ! JNFCallStaticVoidMethod(env, jm_doAccessibleAction, fAccessibleAction, fIndex, fComponent); // AWT_THREADING Safe (AWTRunLoopMode) } @end --- 25,109 ---- #import "JavaAccessibilityAction.h" #import "JavaAccessibilityUtilities.h" #import "ThreadUtilities.h" + #import "JNIUtilities.h" @implementation JavaAxAction - (id)initWithEnv:(JNIEnv *)env withAccessibleAction:(jobject)accessibleAction withIndex:(jint)index withComponent:(jobject)component { self = [super init]; if (self) { ! fAccessibleAction = (*env)->NewWeakGlobalRef(env, accessibleAction); ! CHECK_EXCEPTION(); fIndex = index; ! fComponent = (*env)->NewWeakGlobalRef(env, component); ! CHECK_EXCEPTION(); } return self; } - (void)dealloc { JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; ! (*env)->DeleteWeakGlobalRef(env, fAccessibleAction); fAccessibleAction = NULL; ! (*env)->DeleteWeakGlobalRef(env, fComponent); fComponent = NULL; [super dealloc]; } - (NSString *)getDescription { JNIEnv* env = [ThreadUtilities getJNIEnv]; + DECLARE_CLASS_RETURN(sjc_CAccessibility, "sun/lwawt/macosx/CAccessibility", nil); + DECLARE_STATIC_METHOD_RETURN(jm_getAccessibleActionDescription, sjc_CAccessibility, + "getAccessibleActionDescription", + "(Ljavax/accessibility/AccessibleAction;ILjava/awt/Component;)Ljava/lang/String;", nil); + /* WeakGlobalRefs can be cleared at any time, so first get strong local refs and use those */ jobject fCompLocal = (*env)->NewLocalRef(env, fComponent); if ((*env)->IsSameObject(env, fCompLocal, NULL)) { return nil; } + jobject fAccessibleActionLocal = (*env)->NewLocalRef(env, fAccessibleAction); + if ((*env)->IsSameObject(env, fAccessibleActionLocal, NULL)) { + (*env)->DeleteLocalRef(env, fCompLocal); + return nil; + } NSString *str = nil; ! jstring jstr = (*env)->CallStaticObjectMethod(env, sjc_CAccessibility, jm_getAccessibleActionDescription, ! fAccessibleActionLocal, fIndex, fCompLocal ); + CHECK_EXCEPTION(); if (jstr != NULL) { ! str = JavaStringToNSString(env, jstr); (*env)->DeleteLocalRef(env, jstr); } (*env)->DeleteLocalRef(env, fCompLocal); + (*env)->DeleteLocalRef(env, fAccessibleActionLocal); return str; } - (void)perform { JNIEnv* env = [ThreadUtilities getJNIEnv]; ! DECLARE_CLASS(sjc_CAccessibility, "sun/lwawt/macosx/CAccessibility"); ! DECLARE_STATIC_METHOD(jm_doAccessibleAction, sjc_CAccessibility, "doAccessibleAction", ! "(Ljavax/accessibility/AccessibleAction;ILjava/awt/Component;)V"); ! ! (*env)->CallStaticVoidMethod(env, sjc_CAccessibility, jm_doAccessibleAction, ! fAccessibleAction, fIndex, fComponent); ! CHECK_EXCEPTION(); } @end
*** 95,119 **** - (id)initWithEnv:(JNIEnv *)env withTabGroup:(jobject)tabGroup withIndex:(jint)index withComponent:(jobject)component { self = [super init]; if (self) { ! fTabGroup = JNFNewWeakGlobalRef(env, tabGroup); fIndex = index; ! fComponent = JNFNewWeakGlobalRef(env, component); } return self; } - (void)dealloc { JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; ! JNFDeleteWeakGlobalRef(env, fTabGroup); fTabGroup = NULL; ! JNFDeleteWeakGlobalRef(env, fComponent); fComponent = NULL; [super dealloc]; } --- 111,137 ---- - (id)initWithEnv:(JNIEnv *)env withTabGroup:(jobject)tabGroup withIndex:(jint)index withComponent:(jobject)component { self = [super init]; if (self) { ! fTabGroup = (*env)->NewWeakGlobalRef(env, tabGroup); ! CHECK_EXCEPTION(); fIndex = index; ! fComponent = (*env)->NewWeakGlobalRef(env, component); ! CHECK_EXCEPTION(); } return self; } - (void)dealloc { JNIEnv *env = [ThreadUtilities getJNIEnvUncached]; ! (*env)->DeleteWeakGlobalRef(env, fTabGroup); fTabGroup = NULL; ! (*env)->DeleteWeakGlobalRef(env, fComponent); fComponent = NULL; [super dealloc]; }
< prev index next >