diff --git a/jni/NativeFormats/fbreader/src/formats/PluginCollection.cpp b/jni/NativeFormats/fbreader/src/formats/PluginCollection.cpp index 5101bed48..7388f5931 100644 --- a/jni/NativeFormats/fbreader/src/formats/PluginCollection.cpp +++ b/jni/NativeFormats/fbreader/src/formats/PluginCollection.cpp @@ -72,9 +72,7 @@ void PluginCollection::deleteInstance() { PluginCollection::PluginCollection() { JNIEnv *env = AndroidUtil::getEnv(); - jobject instance = AndroidUtil::StaticMethod_PluginCollection_Instance->call( - AndroidUtil::Class_PluginCollection->j() - ); + jobject instance = AndroidUtil::StaticMethod_PluginCollection_Instance->call(); myJavaInstance = env->NewGlobalRef(instance); env->DeleteLocalRef(instance); } diff --git a/jni/NativeFormats/fbreader/src/library/Library.cpp b/jni/NativeFormats/fbreader/src/library/Library.cpp index b08b88b03..b06688ef0 100644 --- a/jni/NativeFormats/fbreader/src/library/Library.cpp +++ b/jni/NativeFormats/fbreader/src/library/Library.cpp @@ -39,7 +39,7 @@ Library::~Library() { std::string Library::cacheDirectory() const { JNIEnv *env = AndroidUtil::getEnv(); - jstring res = (jstring)AndroidUtil::StaticMethod_Paths_cacheDirectory->call(AndroidUtil::Class_Paths->j()); + jstring res = (jstring)AndroidUtil::StaticMethod_Paths_cacheDirectory->call(); const char *data = env->GetStringUTFChars(res, 0); std::string str(data); env->ReleaseStringUTFChars(res, data); diff --git a/jni/NativeFormats/fbreader/src/library/Tag.cpp b/jni/NativeFormats/fbreader/src/library/Tag.cpp index 9edaa3bd5..b615740be 100644 --- a/jni/NativeFormats/fbreader/src/library/Tag.cpp +++ b/jni/NativeFormats/fbreader/src/library/Tag.cpp @@ -138,7 +138,7 @@ jobject Tag::javaTag(JNIEnv *env) const { } jobject javaName = env->NewStringUTF(myName.c_str()); - jobject tag = AndroidUtil::StaticMethod_Tag_getTag->call(AndroidUtil::Class_Tag->j(), parentTag, javaName); + jobject tag = AndroidUtil::StaticMethod_Tag_getTag->call(parentTag, javaName); myJavaTag = env->NewGlobalRef(tag); env->DeleteLocalRef(tag); env->DeleteLocalRef(javaName); diff --git a/jni/NativeFormats/util/AndroidUtil.cpp b/jni/NativeFormats/util/AndroidUtil.cpp index 4129cd68b..b1a814700 100644 --- a/jni/NativeFormats/util/AndroidUtil.cpp +++ b/jni/NativeFormats/util/AndroidUtil.cpp @@ -134,7 +134,7 @@ bool AndroidUtil::init(JavaVM* jvm) { CHECK_NULL( MID_java_util_Collection_toArray = env->GetMethodID(Class_java_util_Collection->j(), "toArray", "()[Ljava/lang/Object;") ); Class_java_util_Locale = new JavaClass(env, "java/util/Locale"); - StaticMethod_java_util_Locale_getDefault = new StaticObjectMethod(env, Class_java_util_Locale->j(), "getDefault", "java/util/Locale", "()"); + StaticMethod_java_util_Locale_getDefault = new StaticObjectMethod(*Class_java_util_Locale, "getDefault", "java/util/Locale", "()"); Method_java_util_Locale_getLanguage = new StringMethod(*Class_java_util_Locale, "getLanguage", "()"); Class_java_io_InputStream = new JavaClass(env, "java/io/InputStream"); @@ -143,7 +143,7 @@ bool AndroidUtil::init(JavaVM* jvm) { Method_java_io_InputStream_skip = new LongMethod(env, Class_java_io_InputStream->j(), "skip", "(J)"); Class_ZLibrary = new JavaClass(env, "org/geometerplus/zlibrary/core/library/ZLibrary"); - StaticMethod_ZLibrary_Instance = new StaticObjectMethod(env, Class_ZLibrary->j(), "Instance", "org/geometerplus/zlibrary/core/library/ZLibrary", "()"); + StaticMethod_ZLibrary_Instance = new StaticObjectMethod(*Class_ZLibrary, "Instance", "org/geometerplus/zlibrary/core/library/ZLibrary", "()"); Method_ZLibrary_getVersionName = new StringMethod(*Class_ZLibrary, "getVersionName", "()"); Class_NativeFormatPlugin = new JavaClass(env, "org/geometerplus/fbreader/formats/NativeFormatPlugin"); @@ -151,7 +151,7 @@ bool AndroidUtil::init(JavaVM* jvm) { Method_NativeFormatPlugin_supportedFileType = new StringMethod(*Class_NativeFormatPlugin, "supportedFileType", "()"); Class_PluginCollection = new JavaClass(env, "org/geometerplus/fbreader/formats/PluginCollection"); - StaticMethod_PluginCollection_Instance = new StaticObjectMethod(env, Class_PluginCollection->j(), "Instance", "org/geometerplus/fbreader/formats/PluginCollection", "()"); + StaticMethod_PluginCollection_Instance = new StaticObjectMethod(*Class_PluginCollection, "Instance", "org/geometerplus/fbreader/formats/PluginCollection", "()"); Class_Encoding = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/Encoding"); Method_Encoding_createConverter = new ObjectMethod(env, Class_Encoding->j(), "createConverter", "org/geometerplus/zlibrary/core/encodings/EncodingConverter", "()"); @@ -162,13 +162,13 @@ bool AndroidUtil::init(JavaVM* jvm) { Method_EncodingConverter_reset = new VoidMethod(env, Class_EncodingConverter->j(), "reset", "()"); Class_JavaEncodingCollection = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection"); - StaticMethod_JavaEncodingCollection_Instance = new StaticObjectMethod(env, Class_JavaEncodingCollection->j(), "Instance", "org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection", "()"); + StaticMethod_JavaEncodingCollection_Instance = new StaticObjectMethod(*Class_JavaEncodingCollection, "Instance", "org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection", "()"); Method_JavaEncodingCollection_getEncoding_String = new ObjectMethod(env, Class_JavaEncodingCollection->j(), "getEncoding", "org/geometerplus/zlibrary/core/encodings/Encoding", "(Ljava/lang/String;)"); Method_JavaEncodingCollection_getEncoding_int = new ObjectMethod(env, Class_JavaEncodingCollection->j(), "getEncoding", "org/geometerplus/zlibrary/core/encodings/Encoding", "(I)"); Method_JavaEncodingCollection_providesConverterFor = new BooleanMethod(env, Class_JavaEncodingCollection->j(), "providesConverterFor", "(Ljava/lang/String;)"); Class_ZLFile = new JavaClass(env, "org/geometerplus/zlibrary/core/filesystem/ZLFile"); - StaticMethod_ZLFile_createFileByPath = new StaticObjectMethod(env, Class_ZLFile->j(), "createFileByPath", "org/geometerplus/zlibrary/core/filesystem/ZLFile", "(Ljava/lang/String;)"); + StaticMethod_ZLFile_createFileByPath = new StaticObjectMethod(*Class_ZLFile, "createFileByPath", "org/geometerplus/zlibrary/core/filesystem/ZLFile", "(Ljava/lang/String;)"); Method_ZLFile_children = new ObjectMethod(env, Class_ZLFile->j(), "children", "java/util/List", "()"); Method_ZLFile_exists = new BooleanMethod(env, Class_ZLFile->j(), "exists", "()"); Method_ZLFile_isDirectory = new BooleanMethod(env, Class_ZLFile->j(), "isDirectory", "()"); @@ -180,7 +180,7 @@ bool AndroidUtil::init(JavaVM* jvm) { Constructor_ZLFileImage = new Constructor(*Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;II)V"); Class_Paths = new JavaClass(env, "org/geometerplus/fbreader/Paths"); - StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(env, Class_Paths->j(), "cacheDirectory", "java/lang/String", "()"); + StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(*Class_Paths, "cacheDirectory", "java/lang/String", "()"); Class_Book = new JavaClass(env, "org/geometerplus/fbreader/library/Book"); CHECK_NULL( FID_Book_File = env->GetFieldID(Class_Book->j(), "File", "Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;") ); @@ -196,7 +196,7 @@ bool AndroidUtil::init(JavaVM* jvm) { Method_Book_save = new BooleanMethod(env, Class_Book->j(), "save", "()"); Class_Tag = new JavaClass(env, "org/geometerplus/fbreader/library/Tag"); - StaticMethod_Tag_getTag = new StaticObjectMethod(env, Class_Tag->j(), "getTag", "org/geometerplus/fbreader/library/Tag", "(Lorg/geometerplus/fbreader/library/Tag;Ljava/lang/String;)"); + StaticMethod_Tag_getTag = new StaticObjectMethod(*Class_Tag, "getTag", "org/geometerplus/fbreader/library/Tag", "(Lorg/geometerplus/fbreader/library/Tag;Ljava/lang/String;)"); Class_NativeBookModel = new JavaClass(env, "org/geometerplus/fbreader/bookmodel/NativeBookModel"); CHECK_NULL( FID_NativeBookModel_Book = env->GetFieldID(Class_NativeBookModel->j(), "Book", "Lorg/geometerplus/fbreader/library/Book;") ); @@ -217,7 +217,7 @@ bool AndroidUtil::init(JavaVM* jvm) { jobject AndroidUtil::createJavaFile(JNIEnv *env, const std::string &path) { jstring javaPath = env->NewStringUTF(path.c_str()); - jobject javaFile = StaticMethod_ZLFile_createFileByPath->call(Class_ZLFile->j(), javaPath); + jobject javaFile = StaticMethod_ZLFile_createFileByPath->call(javaPath); env->DeleteLocalRef(javaPath); return javaFile; } @@ -298,7 +298,6 @@ void AndroidUtil::throwRuntimeException(JNIEnv *env, const std::string &message) void AndroidUtil::throwBookReadingException(const std::string &resourceId, const ZLFile &file) { JNIEnv *env = getEnv(); env->CallStaticVoidMethod( - Class_BookReadingException->j(), StaticMethod_BookReadingException_throwForFile, AndroidUtil::createJavaString(env, resourceId), AndroidUtil::createJavaFile(env, file.path()) diff --git a/jni/NativeFormats/util/JniEnvelope.cpp b/jni/NativeFormats/util/JniEnvelope.cpp index 5a83b8b76..656d1fd44 100644 --- a/jni/NativeFormats/util/JniEnvelope.cpp +++ b/jni/NativeFormats/util/JniEnvelope.cpp @@ -34,6 +34,7 @@ JavaClass::~JavaClass() { } Member::Member(const JavaClass &cls) : myClass(cls) { + //ZLLogger::Instance().registerClass(JNI_LOGGER_CLASS); } Member::~Member() { @@ -58,7 +59,6 @@ Method::Method(JNIEnv *env, jclass cls, const std::string &name, const std::stri } Method::Method(const JavaClass &cls, const std::string &name, const std::string &signature) : myName(name) { - //ZLLogger::Instance().registerClass(JNI_LOGGER_CLASS); myEnv = cls.myEnv; myId = myEnv->GetMethodID(cls.myClass, name.c_str(), signature.c_str()); } @@ -66,10 +66,8 @@ Method::Method(const JavaClass &cls, const std::string &name, const std::string Method::~Method() { } -StaticMethod::StaticMethod(JNIEnv *env, jclass cls, const std::string &name, const std::string &signature) : myName(name) { - //ZLLogger::Instance().registerClass(JNI_LOGGER_CLASS); - myEnv = env; - myId = env->GetStaticMethodID(cls, name.c_str(), signature.c_str()); +StaticMethod::StaticMethod(const JavaClass &cls, const std::string &name, const std::string &signature) : Member(cls), myName(name) { + myId = env().GetStaticMethodID(jClass(), name.c_str(), signature.c_str()); } StaticMethod::~StaticMethod() { @@ -155,14 +153,14 @@ jobject ObjectMethod::call(jobject base, ...) { return result; } -StaticObjectMethod::StaticObjectMethod(JNIEnv *env, jclass cls, const std::string &name, const std::string &returnType, const std::string &signature) : StaticMethod(env, cls, name, signature + "L" + returnType + ";") { +StaticObjectMethod::StaticObjectMethod(const JavaClass &cls, const std::string &name, const std::string &returnType, const std::string &signature) : StaticMethod(cls, name, signature + "L" + returnType + ";") { } -jobject StaticObjectMethod::call(jclass cls, ...) { +jobject StaticObjectMethod::call(...) { ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling StaticObjectMethod " + myName); va_list lst; - va_start(lst, cls); - jobject result = myEnv->CallStaticObjectMethodV(cls, myId, lst); + va_start(lst, this); + jobject result = env().CallStaticObjectMethodV(jClass(), myId, lst); va_end(lst); ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished StaticObjectMethod " + myName); return result; diff --git a/jni/NativeFormats/util/JniEnvelope.h b/jni/NativeFormats/util/JniEnvelope.h index f31e74203..1156f9a82 100644 --- a/jni/NativeFormats/util/JniEnvelope.h +++ b/jni/NativeFormats/util/JniEnvelope.h @@ -42,7 +42,6 @@ private: friend class Member; friend class Method; -friend class StaticMethod; }; class Member { @@ -90,19 +89,14 @@ protected: jmethodID myId; }; -class StaticMethod { +class StaticMethod : public Member { public: - StaticMethod(JNIEnv *env, jclass cls, const std::string &name, const std::string &signature); + StaticMethod(const JavaClass &cls, const std::string &name, const std::string &signature); virtual ~StaticMethod(); -private: - StaticMethod(const StaticMethod&); - const StaticMethod &operator = (const StaticMethod&); - protected: const std::string myName; - JNIEnv *myEnv; jmethodID myId; }; @@ -152,8 +146,8 @@ public: class StaticObjectMethod : public StaticMethod { public: - StaticObjectMethod(JNIEnv *env, jclass cls, const std::string &name, const std::string &returnType, const std::string &signature); - jobject call(jclass cls, ...); + StaticObjectMethod(const JavaClass &cls, const std::string &name, const std::string &returnType, const std::string &signature); + jobject call(...); }; inline jclass JavaClass::j() const { return myClass; } diff --git a/jni/NativeFormats/zlibrary/core/src/encoding/JavaEncodingConverter.cpp b/jni/NativeFormats/zlibrary/core/src/encoding/JavaEncodingConverter.cpp index 1b080d3e4..70b823311 100644 --- a/jni/NativeFormats/zlibrary/core/src/encoding/JavaEncodingConverter.cpp +++ b/jni/NativeFormats/zlibrary/core/src/encoding/JavaEncodingConverter.cpp @@ -49,9 +49,7 @@ bool JavaEncodingConverterProvider::providesConverter(const std::string &encodin return false; } JNIEnv *env = AndroidUtil::getEnv(); - jobject collection = AndroidUtil::StaticMethod_JavaEncodingCollection_Instance->call( - AndroidUtil::Class_JavaEncodingCollection->j() - ); + jobject collection = AndroidUtil::StaticMethod_JavaEncodingCollection_Instance->call(); jstring encodingName = AndroidUtil::createJavaString(env, encoding); jboolean result = AndroidUtil::Method_JavaEncodingCollection_providesConverterFor->call(collection, encodingName); env->DeleteLocalRef(encodingName); @@ -65,9 +63,7 @@ shared_ptr JavaEncodingConverterProvider::createConverter(c JavaEncodingConverter::JavaEncodingConverter(const std::string &encoding) { JNIEnv *env = AndroidUtil::getEnv(); - jobject collection = AndroidUtil::StaticMethod_JavaEncodingCollection_Instance->call( - AndroidUtil::Class_JavaEncodingCollection->j() - ); + jobject collection = AndroidUtil::StaticMethod_JavaEncodingCollection_Instance->call(); jstring encodingName = AndroidUtil::createJavaString(env, encoding); jobject javaEncoding = AndroidUtil::Method_JavaEncodingCollection_getEncoding_String->call(collection, encodingName); myJavaConverter = AndroidUtil::Method_Encoding_createConverter->call(javaEncoding); diff --git a/jni/NativeFormats/zlibrary/ui/src/android/library/ZLAndroidLibraryImplementation.cpp b/jni/NativeFormats/zlibrary/ui/src/android/library/ZLAndroidLibraryImplementation.cpp index d33ab73ca..0f8119430 100644 --- a/jni/NativeFormats/zlibrary/ui/src/android/library/ZLAndroidLibraryImplementation.cpp +++ b/jni/NativeFormats/zlibrary/ui/src/android/library/ZLAndroidLibraryImplementation.cpp @@ -44,9 +44,7 @@ void ZLAndroidLibraryImplementation::init(int &argc, char **&argv) { std::string ZLibrary::Language() { JNIEnv *env = AndroidUtil::getEnv(); - jobject locale = AndroidUtil::StaticMethod_java_util_Locale_getDefault->call( - AndroidUtil::Class_java_util_Locale->j() - ); + jobject locale = AndroidUtil::StaticMethod_java_util_Locale_getDefault->call(); jstring javaLang = (jstring)AndroidUtil::Method_java_util_Locale_getLanguage->call(locale); const char *langData = env->GetStringUTFChars(javaLang, 0); std::string lang(langData); @@ -58,9 +56,7 @@ std::string ZLibrary::Language() { std::string ZLibrary::Version() { JNIEnv *env = AndroidUtil::getEnv(); - jobject zlibrary = AndroidUtil::StaticMethod_ZLibrary_Instance->call( - AndroidUtil::Class_ZLibrary->j() - ); + jobject zlibrary = AndroidUtil::StaticMethod_ZLibrary_Instance->call(); jstring javaVersion = (jstring)AndroidUtil::Method_ZLibrary_getVersionName->call(zlibrary); const char *versionData = env->GetStringUTFChars(javaVersion, 0); std::string version(versionData);