From daf77393a2f8ef9b797e9b687deafe124e06dd5f Mon Sep 17 00:00:00 2001 From: Nikolay Pultsin Date: Fri, 30 Mar 2012 13:33:51 +0100 Subject: [PATCH] jmethodID -> Method class --- jni/NativeFormats/JavaNativeFormatPlugin.cpp | 2 +- jni/NativeFormats/util/AndroidUtil.cpp | 20 +++++++++---------- jni/NativeFormats/util/AndroidUtil.h | 10 +++++----- jni/NativeFormats/util/JniEnvelope.h | 7 +++++++ jni/NativeFormats/util/Method.cpp | 11 ++++++++++ .../src/encoding/JavaEncodingConverter.cpp | 2 +- .../ui/src/android/filesystem/JavaFSDir.cpp | 4 +--- .../android/filesystem/JavaInputStream.cpp | 3 +-- .../android/filesystem/ZLAndroidFSManager.cpp | 9 ++++----- 9 files changed, 41 insertions(+), 27 deletions(-) diff --git a/jni/NativeFormats/JavaNativeFormatPlugin.cpp b/jni/NativeFormats/JavaNativeFormatPlugin.cpp index d02678f32..fe4262472 100644 --- a/jni/NativeFormats/JavaNativeFormatPlugin.cpp +++ b/jni/NativeFormats/JavaNativeFormatPlugin.cpp @@ -98,7 +98,7 @@ void fillLanguageAndEncoding(JNIEnv* env, jobject javaBook, Book &book) { env->DeleteLocalRef(javaString); } - env->CallBooleanMethod(javaBook, AndroidUtil::MID_Book_save); + AndroidUtil::Method_Book_save->call(javaBook); } extern "C" diff --git a/jni/NativeFormats/util/AndroidUtil.cpp b/jni/NativeFormats/util/AndroidUtil.cpp index 0fb29a19e..c3e10993b 100644 --- a/jni/NativeFormats/util/AndroidUtil.cpp +++ b/jni/NativeFormats/util/AndroidUtil.cpp @@ -72,15 +72,15 @@ shared_ptr AndroidUtil::Method_EncodingConverter_reset; jmethodID AndroidUtil::SMID_JavaEncodingCollection_Instance; jmethodID AndroidUtil::MID_JavaEncodingCollection_getEncoding_int; jmethodID AndroidUtil::MID_JavaEncodingCollection_getEncoding_String; -jmethodID AndroidUtil::MID_JavaEncodingCollection_providesConverterFor; +shared_ptr AndroidUtil::Method_JavaEncodingCollection_providesConverterFor; jmethodID AndroidUtil::SMID_ZLFile_createFileByPath; jmethodID AndroidUtil::MID_ZLFile_children; -jmethodID AndroidUtil::MID_ZLFile_exists; +shared_ptr AndroidUtil::Method_ZLFile_exists; jmethodID AndroidUtil::MID_ZLFile_getInputStream; jmethodID AndroidUtil::MID_ZLFile_getPath; -jmethodID AndroidUtil::MID_ZLFile_isDirectory; -jmethodID AndroidUtil::MID_ZLFile_size; +shared_ptr AndroidUtil::Method_ZLFile_isDirectory; +shared_ptr AndroidUtil::Method_ZLFile_size; jmethodID AndroidUtil::MID_ZLFileImage_init; @@ -96,7 +96,7 @@ shared_ptr AndroidUtil::Method_Book_setLanguage; shared_ptr AndroidUtil::Method_Book_setEncoding; shared_ptr AndroidUtil::Method_Book_addAuthor; shared_ptr AndroidUtil::Method_Book_addTag; -jmethodID AndroidUtil::MID_Book_save; +shared_ptr AndroidUtil::Method_Book_save; jmethodID AndroidUtil::SMID_Tag_getTag; @@ -174,17 +174,17 @@ bool AndroidUtil::init(JavaVM* jvm) { CHECK_NULL( SMID_JavaEncodingCollection_Instance = env->GetStaticMethodID(cls, "Instance", "()Lorg/geometerplus/zlibrary/core/encodings/JavaEncodingCollection;") ); CHECK_NULL( MID_JavaEncodingCollection_getEncoding_String = env->GetMethodID(cls, "getEncoding", "(Ljava/lang/String;)Lorg/geometerplus/zlibrary/core/encodings/Encoding;") ); CHECK_NULL( MID_JavaEncodingCollection_getEncoding_int = env->GetMethodID(cls, "getEncoding", "(I)Lorg/geometerplus/zlibrary/core/encodings/Encoding;") ); - CHECK_NULL( MID_JavaEncodingCollection_providesConverterFor = env->GetMethodID(cls, "providesConverterFor", "(Ljava/lang/String;)Z") ); + Method_JavaEncodingCollection_providesConverterFor = new BooleanMethod(env, cls, "providesConverterFor", "(Ljava/lang/String;)"); env->DeleteLocalRef(cls); CHECK_NULL( cls = env->FindClass(Class_ZLFile) ); CHECK_NULL( SMID_ZLFile_createFileByPath = env->GetStaticMethodID(cls, "createFileByPath", "(Ljava/lang/String;)Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;") ); CHECK_NULL( MID_ZLFile_children = env->GetMethodID(cls, "children", "()Ljava/util/List;") ); - CHECK_NULL( MID_ZLFile_exists = env->GetMethodID(cls, "exists", "()Z") ); - CHECK_NULL( MID_ZLFile_isDirectory = env->GetMethodID(cls, "isDirectory", "()Z") ); + Method_ZLFile_exists = new BooleanMethod(env, cls, "exists", "()"); + Method_ZLFile_isDirectory = new BooleanMethod(env, cls, "isDirectory", "()"); CHECK_NULL( MID_ZLFile_getInputStream = env->GetMethodID(cls, "getInputStream", "()Ljava/io/InputStream;") ); CHECK_NULL( MID_ZLFile_getPath = env->GetMethodID(cls, "getPath", "()Ljava/lang/String;") ); - CHECK_NULL( MID_ZLFile_size = env->GetMethodID(cls, "size", "()J") ); + Method_ZLFile_size = new LongMethod(env, cls, "size", "()"); env->DeleteLocalRef(cls); CHECK_NULL( cls = env->FindClass(Class_ZLFileImage) ); @@ -206,7 +206,7 @@ bool AndroidUtil::init(JavaVM* jvm) { Method_Book_setEncoding = new VoidMethod(env, cls, "setEncoding", "(Ljava/lang/String;)"); Method_Book_addAuthor = new VoidMethod(env, cls, "addAuthor", "(Ljava/lang/String;Ljava/lang/String;)"); Method_Book_addTag = new VoidMethod(env, cls, "addTag", "(Lorg/geometerplus/fbreader/library/Tag;)"); - CHECK_NULL( MID_Book_save = env->GetMethodID(cls, "save", "()Z") ); + Method_Book_save = new BooleanMethod(env, cls, "save", "()"); env->DeleteLocalRef(cls); CHECK_NULL( cls = env->FindClass(Class_Tag) ); diff --git a/jni/NativeFormats/util/AndroidUtil.h b/jni/NativeFormats/util/AndroidUtil.h index 5d0d4cc43..4ff7b7abd 100644 --- a/jni/NativeFormats/util/AndroidUtil.h +++ b/jni/NativeFormats/util/AndroidUtil.h @@ -77,11 +77,11 @@ public: static jmethodID SMID_ZLFile_createFileByPath; static jmethodID MID_ZLFile_children; - static jmethodID MID_ZLFile_exists; + static shared_ptr Method_ZLFile_exists; static jmethodID MID_ZLFile_getInputStream; static jmethodID MID_ZLFile_getPath; - static jmethodID MID_ZLFile_isDirectory; - static jmethodID MID_ZLFile_size; + static shared_ptr Method_ZLFile_isDirectory; + static shared_ptr Method_ZLFile_size; static jmethodID MID_ZLFileImage_init; @@ -99,7 +99,7 @@ public: static jmethodID SMID_JavaEncodingCollection_Instance; static jmethodID MID_JavaEncodingCollection_getEncoding_String; static jmethodID MID_JavaEncodingCollection_getEncoding_int; - static jmethodID MID_JavaEncodingCollection_providesConverterFor; + static shared_ptr Method_JavaEncodingCollection_providesConverterFor; static jmethodID SMID_Paths_cacheDirectory; @@ -113,7 +113,7 @@ public: static shared_ptr Method_Book_setEncoding; static shared_ptr Method_Book_addAuthor; static shared_ptr Method_Book_addTag; - static jmethodID MID_Book_save; + static shared_ptr Method_Book_save; static jmethodID SMID_Tag_getTag; diff --git a/jni/NativeFormats/util/JniEnvelope.h b/jni/NativeFormats/util/JniEnvelope.h index ef41f483d..2a7f1994f 100644 --- a/jni/NativeFormats/util/JniEnvelope.h +++ b/jni/NativeFormats/util/JniEnvelope.h @@ -56,4 +56,11 @@ public: jlong call(jobject base, ...); }; +class BooleanMethod : public Method { + +public: + BooleanMethod(JNIEnv *env, jclass cls, const std::string &name, const std::string &signature); + jboolean call(jobject base, ...); +}; + #endif /* __JNIENVELOPE_H__ */ diff --git a/jni/NativeFormats/util/Method.cpp b/jni/NativeFormats/util/Method.cpp index 996e72110..e16248fed 100644 --- a/jni/NativeFormats/util/Method.cpp +++ b/jni/NativeFormats/util/Method.cpp @@ -58,3 +58,14 @@ jlong LongMethod::call(jobject base, ...) { va_end(lst); return result; } + +BooleanMethod::BooleanMethod(JNIEnv *env, jclass cls, const std::string &name, const std::string &signature) : Method(env, cls, name, signature + "Z") { +} + +jboolean BooleanMethod::call(jobject base, ...) { + va_list lst; + va_start(lst, base); + jboolean result = myEnv->CallBooleanMethod(base, myId, lst); + va_end(lst); + return result; +} diff --git a/jni/NativeFormats/zlibrary/core/src/encoding/JavaEncodingConverter.cpp b/jni/NativeFormats/zlibrary/core/src/encoding/JavaEncodingConverter.cpp index 786422599..e2752548e 100644 --- a/jni/NativeFormats/zlibrary/core/src/encoding/JavaEncodingConverter.cpp +++ b/jni/NativeFormats/zlibrary/core/src/encoding/JavaEncodingConverter.cpp @@ -52,7 +52,7 @@ bool JavaEncodingConverterProvider::providesConverter(const std::string &encodin jclass cls = env->FindClass(AndroidUtil::Class_JavaEncodingCollection); jobject collection = env->CallStaticObjectMethod(cls, AndroidUtil::SMID_JavaEncodingCollection_Instance); jstring encodingName = AndroidUtil::createJavaString(env, encoding); - jboolean result = env->CallBooleanMethod(collection, AndroidUtil::MID_JavaEncodingCollection_providesConverterFor, encodingName); + jboolean result = AndroidUtil::Method_JavaEncodingCollection_providesConverterFor->call(collection, encodingName); env->DeleteLocalRef(encodingName); env->DeleteLocalRef(collection); env->DeleteLocalRef(cls); diff --git a/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaFSDir.cpp b/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaFSDir.cpp index c5d9da00f..643314977 100644 --- a/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaFSDir.cpp +++ b/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaFSDir.cpp @@ -85,9 +85,7 @@ void JavaFSDir::collectChildren(std::vector &names, bool filesNotDi if (index != std::string::npos) { path.erase(index); isdir = true; - } /*else { - isdir = env->CallBooleanMethod(file, AndroidUtil::MID_ZLFile_isDirectory) != 0; - }*/ + } if (isdir ^ filesNotDirs) { names.push_back(path.substr(prefixLength)); } diff --git a/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaInputStream.cpp b/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaInputStream.cpp index 77499922a..e8c852841 100644 --- a/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaInputStream.cpp +++ b/jni/NativeFormats/zlibrary/ui/src/android/filesystem/JavaInputStream.cpp @@ -155,8 +155,7 @@ size_t JavaInputStream::sizeOfOpened() { if (myJavaInputStream == 0 || myJavaFile == 0) { return 0; } - JNIEnv *env = AndroidUtil::getEnv(); - return (size_t) env->CallLongMethod(myJavaFile, AndroidUtil::MID_ZLFile_size); + return (size_t)AndroidUtil::Method_ZLFile_size->call(myJavaFile); } void JavaInputStream::seek(int offset, bool absoluteOffset) { diff --git a/jni/NativeFormats/zlibrary/ui/src/android/filesystem/ZLAndroidFSManager.cpp b/jni/NativeFormats/zlibrary/ui/src/android/filesystem/ZLAndroidFSManager.cpp index f8dc9b20e..d66f8b741 100644 --- a/jni/NativeFormats/zlibrary/ui/src/android/filesystem/ZLAndroidFSManager.cpp +++ b/jni/NativeFormats/zlibrary/ui/src/android/filesystem/ZLAndroidFSManager.cpp @@ -17,10 +17,9 @@ * 02110-1301, USA. */ -#include - #include #include +#include #include "ZLAndroidFSManager.h" @@ -89,11 +88,11 @@ ZLFileInfo ZLAndroidFSManager::fileInfo(const std::string &path) const { return info; } - info.IsDirectory = env->CallBooleanMethod(javaFile, AndroidUtil::MID_ZLFile_isDirectory); - const jboolean exists = env->CallBooleanMethod(javaFile, AndroidUtil::MID_ZLFile_exists); + info.IsDirectory = AndroidUtil::Method_ZLFile_isDirectory->call(javaFile); + const jboolean exists = AndroidUtil::Method_ZLFile_exists->call(javaFile); if (exists) { info.Exists = true; - info.Size = env->CallLongMethod(javaFile, AndroidUtil::MID_ZLFile_size); + info.Size = AndroidUtil::Method_ZLFile_size->call(javaFile); } env->DeleteLocalRef(javaFile);