From a9610d892c11c1e17876cc5a6e35405c649d3b9f Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Sat, 3 Mar 2012 08:38:35 +0000 Subject: [PATCH] fixed Logger issues --- jni/NativeFormats/util/AndroidUtil.cpp | 16 +++++++++ jni/NativeFormats/util/AndroidUtil.h | 6 ++++ .../zlibrary/core/src/logger/ZLLogger.cpp | 36 ++++++------------- .../zlibrary/core/src/logger/ZLLogger.h | 8 ----- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/jni/NativeFormats/util/AndroidUtil.cpp b/jni/NativeFormats/util/AndroidUtil.cpp index 03057277e..705f4960b 100644 --- a/jni/NativeFormats/util/AndroidUtil.cpp +++ b/jni/NativeFormats/util/AndroidUtil.cpp @@ -21,9 +21,11 @@ JavaVM *AndroidUtil::ourJavaVM = 0; +const char * const AndroidUtil::Class_java_lang_System = "java/lang/System"; const char * const AndroidUtil::Class_java_util_Collection = "java/util/Collection"; const char * const AndroidUtil::Class_java_util_Locale = "java/util/Locale"; const char * const AndroidUtil::Class_java_io_InputStream = "java/io/InputStream"; +const char * const AndroidUtil::Class_java_io_PrintStream = "java/io/PrintStream"; const char * const AndroidUtil::Class_ZLibrary = "org/geometerplus/zlibrary/core/library/ZLibrary"; const char * const AndroidUtil::Class_NativeFormatPlugin = "org/geometerplus/fbreader/formats/NativeFormatPlugin"; const char * const AndroidUtil::Class_PluginCollection = "org/geometerplus/fbreader/formats/PluginCollection"; @@ -32,6 +34,8 @@ const char * const AndroidUtil::Class_ZLFile = "org/geometerplus/zlibrary/core/f const char * const AndroidUtil::Class_Book = "org/geometerplus/fbreader/library/Book"; const char * const AndroidUtil::Class_Tag = "org/geometerplus/fbreader/library/Tag"; +jobject AndroidUtil::OBJECT_java_lang_System_err; + jmethodID AndroidUtil::MID_java_util_Collection_toArray; jmethodID AndroidUtil::SMID_java_util_Locale_getDefault; @@ -41,6 +45,8 @@ jmethodID AndroidUtil::MID_java_io_InputStream_close; jmethodID AndroidUtil::MID_java_io_InputStream_read; jmethodID AndroidUtil::MID_java_io_InputStream_skip; +jmethodID AndroidUtil::MID_java_io_PrintStream_println; + jmethodID AndroidUtil::SMID_ZLibrary_Instance; jmethodID AndroidUtil::MID_ZLibrary_getVersionName; @@ -86,6 +92,12 @@ bool AndroidUtil::init(JavaVM* jvm) { JNIEnv *env = getEnv(); jclass cls; + CHECK_NULL( cls = env->FindClass(Class_java_lang_System) ); + jfieldID field; + CHECK_NULL( field = env->GetStaticFieldID(cls, "err", "Ljava/io/PrintStream;") ); + CHECK_NULL( OBJECT_java_lang_System_err = env->GetStaticObjectField(cls, field) ); + env->DeleteLocalRef(cls); + CHECK_NULL( cls = env->FindClass(Class_java_util_Collection) ); CHECK_NULL( MID_java_util_Collection_toArray = env->GetMethodID(cls, "toArray", "()[Ljava/lang/Object;") ); //CHECK_NULL( MID_java_util_Collection_add = env->GetMethodID(cls, "add", "(Ljava/lang/Object;)Z") ); @@ -102,6 +114,10 @@ bool AndroidUtil::init(JavaVM* jvm) { CHECK_NULL( MID_java_io_InputStream_skip = env->GetMethodID(cls, "skip", "(J)J") ); env->DeleteLocalRef(cls); + CHECK_NULL( cls = env->FindClass(Class_java_io_PrintStream) ); + CHECK_NULL( MID_java_io_PrintStream_println = env->GetMethodID(cls, "println", "(Ljava/lang/String;)V") ); + env->DeleteLocalRef(cls); + CHECK_NULL( cls = env->FindClass(Class_ZLibrary) ); CHECK_NULL( SMID_ZLibrary_Instance = env->GetStaticMethodID(cls, "Instance", "()Lorg/geometerplus/zlibrary/core/library/ZLibrary;") ); CHECK_NULL( MID_ZLibrary_getVersionName = env->GetMethodID(cls, "getVersionName", "()Ljava/lang/String;") ); diff --git a/jni/NativeFormats/util/AndroidUtil.h b/jni/NativeFormats/util/AndroidUtil.h index 5fcd91590..7abb7bacd 100644 --- a/jni/NativeFormats/util/AndroidUtil.h +++ b/jni/NativeFormats/util/AndroidUtil.h @@ -30,9 +30,11 @@ private: static JavaVM *ourJavaVM; public: + static const char * const Class_java_lang_System; static const char * const Class_java_util_Collection; static const char * const Class_java_util_Locale; static const char * const Class_java_io_InputStream; + static const char * const Class_java_io_PrintStream; static const char * const Class_ZLibrary; static const char * const Class_ZLFile; static const char * const Class_NativeFormatPlugin; @@ -41,6 +43,8 @@ public: static const char * const Class_Book; static const char * const Class_Tag; + static jobject OBJECT_java_lang_System_err; + static jmethodID MID_java_util_Collection_toArray; static jmethodID SMID_java_util_Locale_getDefault; @@ -50,6 +54,8 @@ public: static jmethodID MID_java_io_InputStream_read; static jmethodID MID_java_io_InputStream_skip; + static jmethodID MID_java_io_PrintStream_println; + static jmethodID SMID_ZLibrary_Instance; static jmethodID MID_ZLibrary_getVersionName; diff --git a/jni/NativeFormats/zlibrary/core/src/logger/ZLLogger.cpp b/jni/NativeFormats/zlibrary/core/src/logger/ZLLogger.cpp index 6cb3cf2d7..44ee030b6 100644 --- a/jni/NativeFormats/zlibrary/core/src/logger/ZLLogger.cpp +++ b/jni/NativeFormats/zlibrary/core/src/logger/ZLLogger.cpp @@ -25,6 +25,17 @@ const std::string ZLLogger::DEFAULT_CLASS; ZLLogger *ZLLogger::ourInstance = 0; +static void printInternal(const std::string &message) { + JNIEnv *env = AndroidUtil::getEnv(); + jstring javaMessage = AndroidUtil::createJavaString(env, message); + env->CallVoidMethod( + AndroidUtil::OBJECT_java_lang_System_err, + AndroidUtil::MID_java_io_PrintStream_println, + javaMessage + ); + env->DeleteLocalRef(javaMessage); +} + ZLLogger &ZLLogger::Instance() { if (ourInstance == 0) { ourInstance = new ZLLogger(); @@ -33,14 +44,6 @@ ZLLogger &ZLLogger::Instance() { } ZLLogger::ZLLogger() { - myEnv = AndroidUtil::getEnv(); - mySystemErr = 0; - myPrintStreamClass = 0; -} - -ZLLogger::~ZLLogger() { - myEnv->DeleteLocalRef(mySystemErr); - myEnv->DeleteLocalRef(myPrintStreamClass); } void ZLLogger::registerClass(const std::string &className) { @@ -63,20 +66,3 @@ void ZLLogger::print(const std::string &className, const std::string &message) c void ZLLogger::println(const std::string &className, const std::string &message) const { print(className, message); } - -void ZLLogger::printInternal(const std::string &message) const { - if (mySystemErr == 0) { - jclass systemClass = myEnv->FindClass("java/lang/System"); - jfieldID systemErr = myEnv->GetStaticFieldID(systemClass, "err", "Ljava/io/PrintStream;"); - mySystemErr = myEnv->GetStaticObjectField(systemClass, systemErr); - myEnv->DeleteLocalRef(systemClass); - } - if (myPrintStreamClass == 0) { - myPrintStreamClass = myEnv->FindClass("java/io/PrintStream"); - } - - jmethodID println = myEnv->GetMethodID(myPrintStreamClass, "print", "(Ljava/lang/String;)V"); - jstring javaMessage = myEnv->NewStringUTF(message.c_str()); - myEnv->CallVoidMethod(mySystemErr, println, javaMessage); - myEnv->DeleteLocalRef(javaMessage); -} diff --git a/jni/NativeFormats/zlibrary/core/src/logger/ZLLogger.h b/jni/NativeFormats/zlibrary/core/src/logger/ZLLogger.h index a243c76eb..5484b9125 100644 --- a/jni/NativeFormats/zlibrary/core/src/logger/ZLLogger.h +++ b/jni/NativeFormats/zlibrary/core/src/logger/ZLLogger.h @@ -20,8 +20,6 @@ #ifndef __ZLLOGGER_H__ #define __ZLLOGGER_H__ -#include - #include #include @@ -37,8 +35,6 @@ private: private: ZLLogger(); - ~ZLLogger(); - void printInternal(const std::string &message) const; public: void registerClass(const std::string &className); @@ -47,10 +43,6 @@ public: private: std::set myRegisteredClasses; - - JNIEnv *myEnv; - mutable jobject mySystemErr; - mutable jclass myPrintStreamClass; }; #endif /* __ZLLOGGER_H__ */