modules/fxpackager/src/main/native/library/common/Java.cpp

Print this page

        

@@ -38,22 +38,22 @@
 
 
 //--------------------------------------------------------------------------------------------------
 
 #ifdef DEBUG
-std::string JavaException::CreateExceptionMessage(JNIEnv* Env, jthrowable Exception,
+TString JavaException::CreateExceptionMessage(JNIEnv* Env, jthrowable Exception,
     jmethodID GetCauseMethod, jmethodID GetStackTraceMethod, jmethodID ThrowableToTStringMethod,
     jmethodID FrameToTStringMethod) {
 
-    std::string result;
+    TString result;
     jobjectArray frames = (jobjectArray)Env->CallObjectMethod(Exception, GetStackTraceMethod);
 
     // Append Throwable.toTString().
     if (0 != frames) {
         jstring jstr = (jstring)Env->CallObjectMethod(Exception, ThrowableToTStringMethod);
         const char* str = Env->GetStringUTFChars(jstr, 0);
-        result += str;
+        result += PlatformString(str).toPlatformString();
         Env->ReleaseStringUTFChars(jstr, str);
         Env->DeleteLocalRef(jstr);
     }
 
     // Append stack trace if one exists.

@@ -64,12 +64,12 @@
             // Get the string from the next frame and append it to
             // the error message.
             jobject frame = Env->GetObjectArrayElement(frames, i);
             jstring obj = (jstring)Env->CallObjectMethod(frame, FrameToTStringMethod);
             const char* str = Env->GetStringUTFChars(obj, 0);
-            result += "\n  ";
-            result += str;
+            result += _T("\n  ");
+            result += PlatformString(str).toPlatformString();
             Env->ReleaseStringUTFChars(obj, str);
             Env->DeleteLocalRef(obj);
             Env->DeleteLocalRef(frame);
         }
     }

@@ -87,31 +87,22 @@
 
     return result;
 }
 #endif //DEBUG
 
-JavaException::JavaException() : std::exception() {}
+JavaException::JavaException() : Exception() {}
 
-//TODO Fix JavaException for all platforms.
-#ifdef WINDOWS
-JavaException::JavaException(const char* const message) : std::exception(message) {}
-#endif //WINDOWS
-#ifdef MAC
-JavaException::JavaException(const char* const message) {}
-#endif //MAC
-
-#ifdef WINDOWS
-JavaException::JavaException(JNIEnv *Env, const char* const message) : std::exception(message) {
-#endif //WINDOWS
-#ifdef POSIX
-JavaException::JavaException(JNIEnv *Env, const char* const message) {
-#endif //POSIX
+//#ifdef WINDOWS
+JavaException::JavaException(JNIEnv *Env, const TString Message) : Exception(Message) {
+//#endif //WINDOWS
+//#ifdef POSIX
+//JavaException::JavaException(JNIEnv *Env, TString message) {
+//#endif //POSIX
 
     FEnv = Env;
     FException = Env->ExceptionOccurred();
     Env->ExceptionClear();
-    FMessage = message;
 
 #ifdef DEBUG
     Platform& platform = Platform::GetInstance();
 
     if (platform.GetDebugState() == dsNone) {

@@ -163,26 +154,17 @@
         if (FEnv->ExceptionCheck() == JNI_TRUE) {
             Env->ExceptionClear();
             return;
         }
 
-        std::string lmessage = CreateExceptionMessage(Env, FException, GetCauseMethod,
+        TString lmessage = CreateExceptionMessage(Env, FException, GetCauseMethod,
             GetStackTraceMethod, ThrowableToTStringMethod, FrameToTStringMethod);
-        FMessage = lmessage.c_str();
+        SetMessage(lmessage);
     }
 #endif //DEBUG
 }
 
-const char* JavaException::what() {
-    if (FMessage.empty() == true) {
-        return std::exception::what();
-    }
-    else {
-        return FMessage.c_str();
-    }
-}
-
 void JavaException::Rethrow() {
     FEnv->Throw(FException);
 }
 
 //--------------------------------------------------------------------------------------------------

@@ -199,12 +181,11 @@
     FEnv->CallStaticVoidMethodV(FClass, FMethod, args);
     va_end(args);
 
     if (FEnv->ExceptionCheck() == JNI_TRUE) {
         Messages& messages = Messages::GetInstance();
-        std::string message = PlatformString(messages.GetMessage(ERROR_INVOKING_METHOD)).toStdString();
-        throw JavaException(FEnv, message.c_str());
+        throw JavaException(FEnv, messages.GetMessage(ERROR_INVOKING_METHOD));
     }
 }
 
 JavaStaticMethod::operator jmethodID () {
     return FMethod;

@@ -224,12 +205,11 @@
     FEnv->CallVoidMethodV(FObj, FMethod, args);
     va_end(args);
 
     if (FEnv->ExceptionCheck() == JNI_TRUE) {
         Messages& messages = Messages::GetInstance();
-        std::string message = PlatformString(messages.GetMessage(ERROR_INVOKING_METHOD)).toStdString();
-        throw JavaException(FEnv, message.c_str());
+        throw JavaException(FEnv, messages.GetMessage(ERROR_INVOKING_METHOD));
     }
 }
 
 JavaMethod::operator jmethodID () {
     return FMethod;

@@ -242,35 +222,32 @@
     FClassName = Name;
     FClass = FEnv->FindClass(PlatformString(FClassName));
 
     if (FClass == NULL || FEnv->ExceptionCheck() == JNI_TRUE) {
         Messages& messages = Messages::GetInstance();
-        std::string message = PlatformString(messages.GetMessage(CLASS_NOT_FOUND)).toStdString();
-        message = PlatformString::Format(message,
-            PlatformString(FClassName).c_str());
-        throw JavaException(FEnv, message.c_str());
+        TString message = messages.GetMessage(CLASS_NOT_FOUND);
+        message = PlatformString::Format(message, FClassName.data());
+        throw JavaException(FEnv, message);
     }
 }
 
 JavaClass::~JavaClass() {
     FEnv->DeleteLocalRef(FClass);
 
     if (FEnv->ExceptionCheck() == JNI_TRUE) {
-        throw JavaException(FEnv, "Error");
+        throw JavaException(FEnv, _T("Error"));
     }
 }
 
 JavaStaticMethod JavaClass::GetStaticMethod(TString Name, TString Signature) {
     jmethodID method = FEnv->GetStaticMethodID(FClass, PlatformString(Name), PlatformString(Signature));
 
     if (method == NULL || FEnv->ExceptionCheck() == JNI_TRUE) {
         Messages& messages = Messages::GetInstance();
-        std::string message = PlatformString(messages.GetMessage(METHOD_NOT_FOUND)).toStdString();
-        message = PlatformString::Format(message,
-            PlatformString(Name).c_str(),
-            PlatformString(FClassName).c_str());
-        throw JavaException(FEnv, message.c_str());
+        TString message = messages.GetMessage(METHOD_NOT_FOUND);
+        message = PlatformString::Format(message, Name.data(), FClassName.data());
+        throw JavaException(FEnv, message);
     }
 
     return JavaStaticMethod(FEnv, FClass, method);
 }
 

@@ -283,20 +260,20 @@
 void JavaStringArray::Initialize(size_t Size) {
     JavaClass jstringClass(FEnv, _T("java/lang/String"));
 
     if (FEnv->ExceptionCheck() == JNI_TRUE) {
         Messages& messages = Messages::GetInstance();
-        std::string message = PlatformString(messages.GetMessage(CLASS_NOT_FOUND)).toStdString();
-        message = PlatformString::Format(message, "String");
-        throw JavaException(FEnv, message.c_str());
+        TString message = messages.GetMessage(CLASS_NOT_FOUND);
+        message = PlatformString::Format(message, _T("String"));
+        throw JavaException(FEnv, message.data());
     }
 
     jstring str = PlatformString("").toJString(FEnv);
     FData = (jobjectArray)FEnv->NewObjectArray((jsize)Size, jstringClass, str);
 
     if (FEnv->ExceptionCheck() == JNI_TRUE) {
-        throw JavaException(FEnv, "Error");
+        throw JavaException(FEnv, _T("Error"));
     }
 }
 
 JavaStringArray::JavaStringArray(JNIEnv *Env, size_t Size) {
     FEnv = Env;

@@ -326,29 +303,29 @@
 
 void JavaStringArray::SetValue(jsize Index, jstring Item) {
     FEnv->SetObjectArrayElement(FData, Index, Item);
 
     if (FEnv->ExceptionCheck() == JNI_TRUE) {
-        throw JavaException(FEnv, "Error");
+        throw JavaException(FEnv, _T("Error"));
     }
 }
 
 jstring JavaStringArray::GetValue(jsize Index) {
     jstring result = (jstring)FEnv->GetObjectArrayElement(FData, Index);
 
     if (FEnv->ExceptionCheck() == JNI_TRUE) {
-        throw JavaException(FEnv, "Error");
+        throw JavaException(FEnv, _T("Error"));
     }
 
     return result;
 }
 
 unsigned int JavaStringArray::Count() {
     unsigned int result = FEnv->GetArrayLength(FData);
 
     if (FEnv->ExceptionCheck() == JNI_TRUE) {
-        throw JavaException(FEnv, "Error");
+        throw JavaException(FEnv, _T("Error"));
     }
 
     return result;
 }