< 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 >