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

Print this page

        

*** 38,59 **** //-------------------------------------------------------------------------------------------------- #ifdef DEBUG ! std::string JavaException::CreateExceptionMessage(JNIEnv* Env, jthrowable Exception, jmethodID GetCauseMethod, jmethodID GetStackTraceMethod, jmethodID ThrowableToTStringMethod, jmethodID FrameToTStringMethod) { ! std::string 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; Env->ReleaseStringUTFChars(jstr, str); Env->DeleteLocalRef(jstr); } // Append stack trace if one exists. --- 38,59 ---- //-------------------------------------------------------------------------------------------------- #ifdef DEBUG ! TString JavaException::CreateExceptionMessage(JNIEnv* Env, jthrowable Exception, jmethodID GetCauseMethod, jmethodID GetStackTraceMethod, jmethodID ThrowableToTStringMethod, jmethodID FrameToTStringMethod) { ! 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 += PlatformString(str).toPlatformString(); Env->ReleaseStringUTFChars(jstr, str); Env->DeleteLocalRef(jstr); } // Append stack trace if one exists.
*** 64,75 **** // 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; Env->ReleaseStringUTFChars(obj, str); Env->DeleteLocalRef(obj); Env->DeleteLocalRef(frame); } } --- 64,75 ---- // 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 += _T("\n "); ! result += PlatformString(str).toPlatformString(); Env->ReleaseStringUTFChars(obj, str); Env->DeleteLocalRef(obj); Env->DeleteLocalRef(frame); } }
*** 87,117 **** return result; } #endif //DEBUG ! JavaException::JavaException() : std::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 FEnv = Env; FException = Env->ExceptionOccurred(); Env->ExceptionClear(); - FMessage = message; #ifdef DEBUG Platform& platform = Platform::GetInstance(); if (platform.GetDebugState() == dsNone) { --- 87,108 ---- return result; } #endif //DEBUG ! JavaException::JavaException() : Exception() {} ! //#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(); #ifdef DEBUG Platform& platform = Platform::GetInstance(); if (platform.GetDebugState() == dsNone) {
*** 163,188 **** if (FEnv->ExceptionCheck() == JNI_TRUE) { Env->ExceptionClear(); return; } ! std::string lmessage = CreateExceptionMessage(Env, FException, GetCauseMethod, GetStackTraceMethod, ThrowableToTStringMethod, FrameToTStringMethod); ! FMessage = lmessage.c_str(); } #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); } //-------------------------------------------------------------------------------------------------- --- 154,170 ---- if (FEnv->ExceptionCheck() == JNI_TRUE) { Env->ExceptionClear(); return; } ! TString lmessage = CreateExceptionMessage(Env, FException, GetCauseMethod, GetStackTraceMethod, ThrowableToTStringMethod, FrameToTStringMethod); ! SetMessage(lmessage); } #endif //DEBUG } void JavaException::Rethrow() { FEnv->Throw(FException); } //--------------------------------------------------------------------------------------------------
*** 199,210 **** 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()); } } JavaStaticMethod::operator jmethodID () { return FMethod; --- 181,191 ---- FEnv->CallStaticVoidMethodV(FClass, FMethod, args); va_end(args); if (FEnv->ExceptionCheck() == JNI_TRUE) { Messages& messages = Messages::GetInstance(); ! throw JavaException(FEnv, messages.GetMessage(ERROR_INVOKING_METHOD)); } } JavaStaticMethod::operator jmethodID () { return FMethod;
*** 224,235 **** 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()); } } JavaMethod::operator jmethodID () { return FMethod; --- 205,215 ---- FEnv->CallVoidMethodV(FObj, FMethod, args); va_end(args); if (FEnv->ExceptionCheck() == JNI_TRUE) { Messages& messages = Messages::GetInstance(); ! throw JavaException(FEnv, messages.GetMessage(ERROR_INVOKING_METHOD)); } } JavaMethod::operator jmethodID () { return FMethod;
*** 242,276 **** 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()); } } JavaClass::~JavaClass() { FEnv->DeleteLocalRef(FClass); if (FEnv->ExceptionCheck() == JNI_TRUE) { ! throw JavaException(FEnv, "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()); } return JavaStaticMethod(FEnv, FClass, method); } --- 222,253 ---- FClassName = Name; FClass = FEnv->FindClass(PlatformString(FClassName)); if (FClass == NULL || FEnv->ExceptionCheck() == JNI_TRUE) { Messages& messages = Messages::GetInstance(); ! 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, _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(); ! 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,302 **** 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()); } jstring str = PlatformString("").toJString(FEnv); FData = (jobjectArray)FEnv->NewObjectArray((jsize)Size, jstringClass, str); if (FEnv->ExceptionCheck() == JNI_TRUE) { ! throw JavaException(FEnv, "Error"); } } JavaStringArray::JavaStringArray(JNIEnv *Env, size_t Size) { FEnv = Env; --- 260,279 ---- void JavaStringArray::Initialize(size_t Size) { JavaClass jstringClass(FEnv, _T("java/lang/String")); if (FEnv->ExceptionCheck() == JNI_TRUE) { Messages& messages = Messages::GetInstance(); ! 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, _T("Error")); } } JavaStringArray::JavaStringArray(JNIEnv *Env, size_t Size) { FEnv = Env;
*** 326,354 **** void JavaStringArray::SetValue(jsize Index, jstring Item) { FEnv->SetObjectArrayElement(FData, Index, Item); if (FEnv->ExceptionCheck() == JNI_TRUE) { ! throw JavaException(FEnv, "Error"); } } jstring JavaStringArray::GetValue(jsize Index) { jstring result = (jstring)FEnv->GetObjectArrayElement(FData, Index); if (FEnv->ExceptionCheck() == JNI_TRUE) { ! throw JavaException(FEnv, "Error"); } return result; } unsigned int JavaStringArray::Count() { unsigned int result = FEnv->GetArrayLength(FData); if (FEnv->ExceptionCheck() == JNI_TRUE) { ! throw JavaException(FEnv, "Error"); } return result; } --- 303,331 ---- void JavaStringArray::SetValue(jsize Index, jstring Item) { FEnv->SetObjectArrayElement(FData, Index, Item); if (FEnv->ExceptionCheck() == JNI_TRUE) { ! 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, _T("Error")); } return result; } unsigned int JavaStringArray::Count() { unsigned int result = FEnv->GetArrayLength(FData); if (FEnv->ExceptionCheck() == JNI_TRUE) { ! throw JavaException(FEnv, _T("Error")); } return result; }