< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/font/AWTFont.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 54098 : 8260616: Removing remaining JNF dependencies in the java.desktop module
8259729: Missed JNFInstanceOf -> IsInstanceOf conversion

@@ -21,21 +21,20 @@
  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 
-#import <JavaNativeFoundation/JavaNativeFoundation.h>
-
 #import "java_awt_Font.h"
 #import "sun_awt_PlatformFont.h"
 #import "sun_awt_FontDescriptor.h"
 #import "sun_font_CFont.h"
 #import "sun_font_CFontManager.h"
 
 #import "AWTFont.h"
 #import "AWTStrike.h"
 #import "CoreTextSupport.h"
+#import "JNIUtilities.h"
 
 @implementation AWTFont
 
 - (id) initWithFont:(NSFont *)font {
     self = [super init];

@@ -120,45 +119,47 @@
         NSLog(@"nil font");
 #endif
         return nil;
     }
 
-    static JNF_CLASS_CACHE(jc_Font, "java/awt/Font");
+    DECLARE_CLASS_RETURN(jc_Font, "java/awt/Font", nil);
 
     // obtain the Font2D
-    static JNF_MEMBER_CACHE(jm_Font_getFont2D, jc_Font, "getFont2D", "()Lsun/font/Font2D;");
-    jobject font2d = JNFCallObjectMethod(env, javaFont, jm_Font_getFont2D);
+    DECLARE_METHOD_RETURN(jm_Font_getFont2D, jc_Font, "getFont2D", "()Lsun/font/Font2D;", nil);
+    jobject font2d = (*env)->CallObjectMethod(env, javaFont, jm_Font_getFont2D);
+    CHECK_EXCEPTION();
     if (font2d == NULL) {
 #ifdef DEBUG
         NSLog(@"nil font2d");
 #endif
         return nil;
     }
 
     // if it's not a CFont, it's likely one of TTF or OTF fonts
     // from the Sun rendering loops
-    static JNF_CLASS_CACHE(jc_CFont, "sun/font/CFont");
-    if (!JNFIsInstanceOf(env, font2d, &jc_CFont)) {
+    DECLARE_CLASS_RETURN(jc_CFont, "sun/font/CFont", nil);
+    if (!(*env)->IsInstanceOf(env, font2d, jc_CFont)) {
 #ifdef DEBUG
         NSLog(@"font2d !instanceof CFont");
 #endif
         return nil;
     }
 
-    static JNF_MEMBER_CACHE(jm_CFont_getFontStrike, jc_CFont, "getStrike", "(Ljava/awt/Font;)Lsun/font/FontStrike;");
-    jobject fontStrike = JNFCallObjectMethod(env, font2d, jm_CFont_getFontStrike, javaFont);
-
-    static JNF_CLASS_CACHE(jc_CStrike, "sun/font/CStrike");
-    if (!JNFIsInstanceOf(env, fontStrike, &jc_CStrike)) {
+    DECLARE_METHOD_RETURN(jm_CFont_getFontStrike, jc_CFont, "getStrike", "(Ljava/awt/Font;)Lsun/font/FontStrike;", nil);
+    jobject fontStrike = (*env)->CallObjectMethod(env, font2d, jm_CFont_getFontStrike, javaFont);
+    CHECK_EXCEPTION();
+    DECLARE_CLASS_RETURN(jc_CStrike, "sun/font/CStrike", nil);
+    if (!(*env)->IsInstanceOf(env, fontStrike, jc_CStrike)) {
 #ifdef DEBUG
         NSLog(@"fontStrike !instanceof CStrike");
 #endif
         return nil;
     }
 
-    static JNF_MEMBER_CACHE(jm_CStrike_nativeStrikePtr, jc_CStrike, "getNativeStrikePtr", "()J");
-    jlong awtStrikePtr = JNFCallLongMethod(env, fontStrike, jm_CStrike_nativeStrikePtr);
+    DECLARE_METHOD_RETURN(jm_CStrike_nativeStrikePtr, jc_CStrike, "getNativeStrikePtr", "()J", nil);
+    jlong awtStrikePtr = (*env)->CallLongMethod(env, fontStrike, jm_CStrike_nativeStrikePtr);
+    CHECK_EXCEPTION();
     if (awtStrikePtr == 0L) {
 #ifdef DEBUG
         NSLog(@"nil nativeFontPtr from CFont");
 #endif
         return nil;

@@ -283,111 +284,43 @@
 {
     return FSPathMakeRef((UInt8 *)[inPath fileSystemRepresentation],
                          myFSRefPtr, NULL);
 }
 
-// /*
-//  * Class:     sun_font_CFontManager
-//  * Method:    loadFileFont
-//  * Signature: (Ljava/lang/String;)Lsun/font/Font2D;
-//  */
-// JNIEXPORT /* sun.font.CFont */ jobject JNICALL
-// Java_sun_font_CFontManager_loadFileFont
-//     (JNIEnv *env, jclass obj, jstring fontpath)
-// {
-//     jobject result = NULL;
-//
-// JNF_COCOA_ENTER(env);
-//
-//     NSString *nsFilePath = JNFJavaToNSString(env, fontpath);
-//     jstring javaFontName = NULL;
-//
-//     //
-//     // Note: This API uses ATS and can therefore return Carbon error codes.
-//     // These codes can be found at:
-//     // http://developer.apple.com/techpubs/macosx/Carbon/Files/FileManager/File_Manager/ResultCodes/ResultCodes.html
-//     //
-//
-//     FSRef iFile;
-//     OSStatus status = CreateFSRef(&iFile, nsFilePath);
-//
-//     if (status == noErr) {
-//         ATSFontContainerRef oContainer;
-//         status = ATSFontActivateFromFileReference(&iFile, kATSFontContextLocal,
-//                                                   kATSFontFormatUnspecified,
-//                                                   NULL,
-//                                                   kATSOptionFlagsUseDataFork,
-//                                                   &oContainer);
-//         if (status == noErr) {
-//             ATSFontRef ioArray[1];
-//             ItemCount oCount;
-//             status = ATSFontFindFromContainer(oContainer,
-//                                               kATSOptionFlagsUseDataFork,
-//                                               1, ioArray, &oCount);
-//
-//             if (status == noErr) {
-//                 CFStringRef oName;
-//                 status = ATSFontGetPostScriptName(ioArray[0],
-//                                                   kATSOptionFlagsUseDataFork,
-//                                                   &oName);
-//                 if (status == noErr) {
-//                     javaFontName = JNFNSToJavaString(env, (NSString *)oName);
-//                     CFRelease(oName);
-//                 }
-//             }
-//         }
-//     }
-//
-//     if (javaFontName != NULL) {
-//         // create the CFont!
-//         static JNF_CLASS_CACHE(sjc_CFont, "sun/font/CFont");
-//         static JNF_CTOR_CACHE(sjf_CFont_ctor,
-//                               sjc_CFont, "(Ljava/lang/String;)V");
-//         result = JNFNewObject(env, sjf_CFont_ctor, javaFontName);
-//     }
-//
-// JNF_COCOA_EXIT(env);
-//
-//     return result;
-// }
-
 /*
  * Class:     sun_font_CFontManager
  * Method:    loadNativeFonts
  * Signature: ()V
  */
 JNIEXPORT void JNICALL
 Java_sun_font_CFontManager_loadNativeFonts
     (JNIEnv *env, jobject jthis)
 {
-    static JNF_CLASS_CACHE(jc_CFontManager,
-                           "sun/font/CFontManager");
-    static JNF_MEMBER_CACHE(jm_registerFont, jc_CFontManager,
-                            "registerFont",
-                            "(Ljava/lang/String;Ljava/lang/String;)V");
+    DECLARE_CLASS(jc_CFontManager, "sun/font/CFontManager");
+    DECLARE_METHOD(jm_registerFont, jc_CFontManager, "registerFont", "(Ljava/lang/String;Ljava/lang/String;)V");
 
     jint num = 0;
 
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
 
     NSArray *filteredFonts = GetFilteredFonts();
     num = (jint)[filteredFonts count];
 
     jint i;
     for (i = 0; i < num; i++) {
         NSString *fontname = [filteredFonts objectAtIndex:i];
-        jobject jFontName = JNFNSToJavaString(env, fontname);
+        jobject jFontName = NSStringToJavaString(env, fontname);
         jobject jFontFamilyName =
-            JNFNSToJavaString(env, GetFamilyNameForFontName(fontname));
+            NSStringToJavaString(env, GetFamilyNameForFontName(fontname));
 
-        JNFCallVoidMethod(env, jthis,
-                          jm_registerFont, jFontName, jFontFamilyName);
+        (*env)->CallVoidMethod(env, jthis, jm_registerFont, jFontName, jFontFamilyName);
+        CHECK_EXCEPTION();
         (*env)->DeleteLocalRef(env, jFontName);
         (*env)->DeleteLocalRef(env, jFontFamilyName);
     }
 
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
 }
 
 /*
  * Class:     Java_sun_font_CFontManager_loadNativeDirFonts
  * Method:    loadNativeDirFonts

@@ -395,21 +328,21 @@
  */
 JNIEXPORT void JNICALL
 Java_sun_font_CFontManager_loadNativeDirFonts
 (JNIEnv *env, jclass clz, jstring filename)
 {
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
 
-    NSString *path = JNFJavaToNSString(env, filename);
+    NSString *path = JavaStringToNSString(env, filename);
     NSURL *url = [NSURL fileURLWithPath:(NSString *)path];
     bool res = CTFontManagerRegisterFontsForURL((CFURLRef)url, kCTFontManagerScopeProcess, nil);
 #ifdef DEBUG
     NSLog(@"path is : %@", (NSString*)path);
     NSLog(@"url is : %@", (NSString*)url);
     printf("res is %d\n", res);
 #endif
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
 }
 
 #pragma mark --- sun.font.CFont JNI ---
 
 /*

@@ -435,11 +368,11 @@
 Java_sun_font_CFont_getTableBytesNative
     (JNIEnv *env, jclass clazz,
      jlong awtFontPtr, jint jtag)
 {
     jbyteArray jbytes = NULL;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
 
     CTFontTableTag tag = (CTFontTableTag)jtag;
     int i, found = 0;
     AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr);
     NSFont* nsFont = awtFont->fFont;

@@ -477,11 +410,11 @@
     (*env)->SetByteArrayRegion(env, jbytes, 0,
                                (jsize)tableLength,
                                (jbyte*)tableBytes);
     CFRelease(table);
 
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
 
     return jbytes;
 }
 
 /*

@@ -494,21 +427,21 @@
     (JNIEnv *env, jclass clazz,
      jstring nativeFontName, jint style)
 {
     AWTFont *awtFont = nil;
 
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
 
     awtFont =
-        [AWTFont awtFontForName:JNFJavaToNSString(env, nativeFontName)
+        [AWTFont awtFontForName:JavaStringToNSString(env, nativeFontName)
          style:style]; // autoreleased
 
     if (awtFont) {
         CFRetain(awtFont); // GC
     }
 
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
 
     return ptr_to_jlong(awtFont);
 }
 
 /*

@@ -519,20 +452,20 @@
 JNIEXPORT jfloat JNICALL
 Java_sun_font_CFont_getWidthNative
     (JNIEnv *env, jobject cfont, jlong awtFontPtr)
 {
     float widthVal;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
 
     AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr);
     NSFont* nsFont = awtFont->fFont;
     NSFontDescriptor *fontDescriptor = nsFont.fontDescriptor;
     NSDictionary *fontTraits = [fontDescriptor objectForKey : NSFontTraitsAttribute];
     NSNumber *width = [fontTraits objectForKey : NSFontWidthTrait];
     widthVal = (float)[width floatValue];
 
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
    return (jfloat)widthVal;
 }
 
 /*
  * Class:     sun_font_CFont

@@ -542,20 +475,20 @@
 JNIEXPORT jfloat JNICALL
 Java_sun_font_CFont_getWeightNative
     (JNIEnv *env, jobject cfont, jlong awtFontPtr)
 {
     float weightVal;
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
 
     AWTFont *awtFont = (AWTFont *)jlong_to_ptr(awtFontPtr);
     NSFont* nsFont = awtFont->fFont;
     NSFontDescriptor *fontDescriptor = nsFont.fontDescriptor;
     NSDictionary *fontTraits = [fontDescriptor objectForKey : NSFontTraitsAttribute];
     NSNumber *weight = [fontTraits objectForKey : NSFontWeightTrait];
     weightVal = (float)[weight floatValue];
 
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
    return (jfloat)weightVal;
 }
 
 /*
  * Class:     sun_font_CFont

@@ -564,17 +497,17 @@
  */
 JNIEXPORT void JNICALL
 Java_sun_font_CFont_disposeNativeFont
     (JNIEnv *env, jclass clazz, jlong awtFontPtr)
 {
-JNF_COCOA_ENTER(env);
+JNI_COCOA_ENTER(env);
 
     if (awtFontPtr) {
         CFRelease((AWTFont *)jlong_to_ptr(awtFontPtr)); // GC
     }
 
-JNF_COCOA_EXIT(env);
+JNI_COCOA_EXIT(env);
 }
 
 
 #pragma mark --- Miscellaneous JNI ---
 

@@ -633,10 +566,13 @@
         CFStringRef fontname =
             CTFontDescriptorCopyAttribute(ref, kCTFontNameAttribute);
 #ifdef DEBUG
         NSLog(@"Font is : %@", (NSString*)fontname);
 #endif
-        jstring jFontName = (jstring)JNFNSToJavaString(env, fontname);
+        jstring jFontName = (jstring)NSStringToJavaString(env, fontname);
         (*env)->CallBooleanMethod(env, arrayListOfString, addMID, jFontName);
+        if ((*env)->ExceptionOccurred(env)) {
+            return;
+        }
         (*env)->DeleteLocalRef(env, jFontName);
     }
 }
< prev index next >