< prev index next >
src/java.desktop/macosx/native/libawt_lwawt/awt/CInputMethod.m
Print this page
rev 54094 : 8257853: Remove dependencies on JNF's JNI utility functions in AWT and 2D code
rev 54096 : 8259651: [macOS] Replace JNF_COCOA_ENTER/EXIT macros
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
@@ -28,31 +28,24 @@
#import "sun_lwawt_macosx_CInputMethod.h"
#import "sun_lwawt_macosx_CInputMethodDescriptor.h"
#import "ThreadUtilities.h"
#import "AWTView.h"
+#import "JNIUtilities.h"
-#import <JavaNativeFoundation/JavaNativeFoundation.h>
#import <JavaRuntimeSupport/JavaRuntimeSupport.h>
#define JAVA_LIST @"JAVA_LIST"
#define CURRENT_KB_DESCRIPTION @"CURRENT_KB_DESCRIPTION"
-static JNF_CLASS_CACHE(jc_localeClass, "java/util/Locale");
-static JNF_CTOR_CACHE(jm_localeCons, jc_localeClass, "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
-static JNF_CLASS_CACHE(jc_arrayListClass, "java/util/ArrayList");
-static JNF_CTOR_CACHE(jm_arrayListCons, jc_arrayListClass, "()V");
-static JNF_MEMBER_CACHE(jm_listAdd, jc_arrayListClass, "add", "(Ljava/lang/Object;)Z");
-static JNF_MEMBER_CACHE(jm_listContains, jc_arrayListClass, "contains", "(Ljava/lang/Object;)Z");
-
-
-
//
// NOTE: This returns a JNI Local Ref. Any code that calls must call DeleteLocalRef with the return value.
//
static jobject CreateLocaleObjectFromNSString(JNIEnv *env, NSString *name)
{
+ DECLARE_CLASS_RETURN(jc_localeClass, "java/util/Locale", NULL);
+ DECLARE_METHOD_RETURN(jm_localeCons, jc_localeClass, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", NULL);
// Break apart the string into its components.
// First, duplicate the NSString into a C string, since we're going to modify it.
char * language = strdup([name UTF8String]);
char * country;
char * variant;
@@ -75,12 +68,13 @@
if (langObj != NULL) {
jobject ctryObj = (*env)->NewStringUTF(env, country);
if(ctryObj != NULL) {
jobject vrntObj = (*env)->NewStringUTF(env, variant);
if (vrntObj != NULL) {
- localeObj = JNFNewObject(env, jm_localeCons,langObj, ctryObj,
+ localeObj = (*env)->NewObject(env, jc_localeClass, jm_localeCons,langObj, ctryObj,
vrntObj);
+ CHECK_EXCEPTION();
(*env)->DeleteLocalRef(env, vrntObj);
}
(*env)->DeleteLocalRef(env, ctryObj);
}
(*env)->DeleteLocalRef(env, langObj);
@@ -115,17 +109,17 @@
if (!inputMethodController) return;
[inputMethodController performSelector:@selector(setCurrentInputMethodForLocale) withObject:theLocale];
}
-+ (void) _nativeNotifyPeerWithView:(AWTView *)view inputMethod:(JNFJObjectWrapper *) inputMethod {
++ (void) _nativeNotifyPeerWithView:(AWTView *)view inputMethod:(jobject) inputMethod {
AWT_ASSERT_APPKIT_THREAD;
if (!view) return;
if (!inputMethod) return;
- [view setInputMethod:[inputMethod jObject]];
+ [view setInputMethod:inputMethod]; // inputMethod is a GlobalRef
}
+ (void) _nativeEndComposition:(AWTView *)view {
if (view == nil) return;
@@ -155,22 +149,22 @@
(JNIEnv *env, jclass klass)
{
if (!inputMethodController) return NULL;
jobject returnValue = 0;
__block NSString *keyboardInfo = NULL;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
keyboardInfo = [inputMethodController performSelector:@selector(currentInputMethodName)];
[keyboardInfo retain];
}];
if (keyboardInfo == nil) return NULL;
- returnValue = JNFNSToJavaString(env, keyboardInfo);
+ returnValue = NSStringToJavaString(env, keyboardInfo);
[keyboardInfo release];
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
return returnValue;
}
/*
* Class: sun_lwawt_macosx_CInputMethod
@@ -178,18 +172,18 @@
* Signature: (JLsun/lwawt/macosx/CInputMethod;)V
*/
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeNotifyPeer
(JNIEnv *env, jobject this, jlong nativePeer, jobject inputMethod)
{
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
AWTView *view = (AWTView *)jlong_to_ptr(nativePeer);
- JNFJObjectWrapper *inputMethodWrapper = [[JNFJObjectWrapper alloc] initWithJObject:inputMethod withEnv:env];
+ jobject inputMethodRef = (*env)->NewGlobalRef(env, inputMethod);
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
- [CInputMethod _nativeNotifyPeerWithView:view inputMethod:inputMethodWrapper];
+ [CInputMethod _nativeNotifyPeerWithView:view inputMethod:inputMethodRef];
}];
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
}
/*
* Class: sun_lwawt_macosx_CInputMethod
@@ -197,18 +191,18 @@
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CInputMethod_nativeEndComposition
(JNIEnv *env, jobject this, jlong nativePeer)
{
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
AWTView *view = (AWTView *)jlong_to_ptr(nativePeer);
[ThreadUtilities performOnMainThreadWaiting:NO block:^(){
[CInputMethod _nativeEndComposition:view];
}];
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
}
/*
* Class: sun_lwawt_macosx_CInputMethod
* Method: getNativeLocale
@@ -218,11 +212,11 @@
(JNIEnv *env, jobject this)
{
if (!inputMethodController) return NULL;
jobject returnValue = 0;
__block NSString *isoAbbreviation;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
isoAbbreviation = (NSString *) [inputMethodController performSelector:@selector(currentInputMethodLocale)];
[isoAbbreviation retain];
}];
@@ -237,22 +231,22 @@
sLastKeyboardStr = [isoAbbreviation retain];
jobject localObj = CreateLocaleObjectFromNSString(env, isoAbbreviation);
[isoAbbreviation release];
if (sLastKeyboardLocaleObj) {
- JNFDeleteGlobalRef(env, sLastKeyboardLocaleObj);
+ (*env)->DeleteGlobalRef(env, sLastKeyboardLocaleObj);
sLastKeyboardLocaleObj = NULL;
}
if (localObj != NULL) {
- sLastKeyboardLocaleObj = JNFNewGlobalRef(env, localObj);
+ sLastKeyboardLocaleObj = (*env)->NewGlobalRef(env, localObj);
(*env)->DeleteLocalRef(env, localObj);
}
}
returnValue = sLastKeyboardLocaleObj;
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
return returnValue;
}
/*
@@ -261,20 +255,20 @@
* Signature: (Ljava/lang/String;Z)Z
*/
JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_CInputMethod_setNativeLocale
(JNIEnv *env, jobject this, jstring locale, jboolean isActivating)
{
-JNF_COCOA_ENTER(env);
- NSString *localeStr = JNFJavaToNSString(env, locale);
+JNI_COCOA_ENTER(env);
+ NSString *localeStr = JavaStringToNSString(env, locale);
[localeStr retain];
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
[CInputMethod setKeyboardLayout:localeStr];
}];
[localeStr release];
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
return JNI_TRUE;
}
/*
* Class: sun_lwawt_macosx_CInputMethodDescriptor
@@ -293,38 +287,46 @@
* Signature: ()[Ljava/util/Locale;
*/
JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CInputMethodDescriptor_nativeGetAvailableLocales
(JNIEnv *env, jclass klass)
{
+ DECLARE_CLASS_RETURN(jc_arrayListClass, "java/util/ArrayList", NULL);
+ DECLARE_METHOD_RETURN(jm_arrayListCons, jc_arrayListClass, "<init>", "()V", NULL);
+ DECLARE_METHOD_RETURN(jm_listAdd, jc_arrayListClass, "add", "(Ljava/lang/Object;)Z", NULL);
+ DECLARE_METHOD_RETURN(jm_listContains, jc_arrayListClass, "contains", "(Ljava/lang/Object;)Z", NULL);
+
if (!inputMethodController) return NULL;
jobject returnValue = 0;
__block NSArray *selectableArray = nil;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
selectableArray = (NSArray *)[inputMethodController performSelector:@selector(availableInputMethodLocales)];
[selectableArray retain];
}];
if (selectableArray == nil) return NULL;
// Create an ArrayList to return back to the caller.
- returnValue = JNFNewObject(env, jm_arrayListCons);
+ returnValue = (*env)->NewObject(env, jc_arrayListClass, jm_arrayListCons);
+ CHECK_EXCEPTION_NULL_RETURN(returnValue, NULL);
for(NSString *locale in selectableArray) {
jobject localeObj = CreateLocaleObjectFromNSString(env, locale);
if (localeObj == NULL) {
break;
}
- if (JNFCallBooleanMethod(env, returnValue, jm_listContains, localeObj) == JNI_FALSE) {
- JNFCallBooleanMethod(env, returnValue, jm_listAdd, localeObj);
+ if ((*env)->CallBooleanMethod(env, returnValue, jm_listContains, localeObj) == JNI_FALSE) {
+ if ((*env)->ExceptionOccurred(env)) (*env)->ExceptionClear(env);
+ (*env)->CallBooleanMethod(env, returnValue, jm_listAdd, localeObj);
}
+ if ((*env)->ExceptionOccurred(env)) (*env)->ExceptionClear(env);
(*env)->DeleteLocalRef(env, localeObj);
}
[selectableArray release];
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
return returnValue;
}
< prev index next >