mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 17:59:33 +02:00
avoided jmethodID usages
This commit is contained in:
parent
f68bd00b36
commit
062df7442a
5 changed files with 53 additions and 8 deletions
|
@ -25,6 +25,8 @@
|
|||
|
||||
JavaVM *AndroidUtil::ourJavaVM = 0;
|
||||
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_Object;
|
||||
shared_ptr<JavaArray> AndroidUtil::Array_java_lang_Object;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_RuntimeException;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_String;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_util_Collection;
|
||||
|
@ -49,7 +51,7 @@ shared_ptr<JavaClass> AndroidUtil::Class_NativeBookModel;
|
|||
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toLowerCase;
|
||||
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toUpperCase;
|
||||
|
||||
jmethodID AndroidUtil::MID_java_util_Collection_toArray;
|
||||
shared_ptr<ObjectArrayMethod> AndroidUtil::Method_java_util_Collection_toArray;
|
||||
|
||||
shared_ptr<StaticObjectMethod> AndroidUtil::StaticMethod_java_util_Locale_getDefault;
|
||||
shared_ptr<StringMethod> AndroidUtil::Method_java_util_Locale_getLanguage;
|
||||
|
@ -126,6 +128,8 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
|||
|
||||
JNIEnv *env = getEnv();
|
||||
|
||||
Class_java_lang_Object = new JavaClass(env, "java/lang/Object");
|
||||
Array_java_lang_Object = new JavaArray(*Class_java_lang_Object);
|
||||
Class_java_lang_RuntimeException = new JavaClass(env, "java/lang/RuntimeException");
|
||||
Class_java_lang_String = new JavaClass(env, "java/lang/String");
|
||||
Class_java_util_Collection = new JavaClass(env, "java/util/Collection");
|
||||
|
@ -152,7 +156,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
|||
Method_java_lang_String_toLowerCase = new StringMethod(*Class_java_lang_String, "toLowerCase", "()");
|
||||
Method_java_lang_String_toUpperCase = new StringMethod(*Class_java_lang_String, "toUpperCase", "()");
|
||||
|
||||
CHECK_NULL( MID_java_util_Collection_toArray = env->GetMethodID(Class_java_util_Collection->j(), "toArray", "()[Ljava/lang/Object;") );
|
||||
Method_java_util_Collection_toArray = new ObjectArrayMethod(*Class_java_util_Collection, "toArray", *Array_java_lang_Object, "()");
|
||||
|
||||
StaticMethod_java_util_Locale_getDefault = new StaticObjectMethod(*Class_java_util_Locale, "getDefault", *Class_java_util_Locale, "()");
|
||||
Method_java_util_Locale_getLanguage = new StringMethod(*Class_java_util_Locale, "getLanguage", "()");
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <shared_ptr.h>
|
||||
|
||||
class JavaClass;
|
||||
class JavaArray;
|
||||
class Constructor;
|
||||
class ObjectField;
|
||||
class VoidMethod;
|
||||
|
@ -36,6 +37,7 @@ class LongMethod;
|
|||
class BooleanMethod;
|
||||
class StringMethod;
|
||||
class ObjectMethod;
|
||||
class ObjectArrayMethod;
|
||||
class StaticObjectMethod;
|
||||
|
||||
class ZLFile;
|
||||
|
@ -47,6 +49,8 @@ private:
|
|||
static JavaVM *ourJavaVM;
|
||||
|
||||
public:
|
||||
static shared_ptr<JavaClass> Class_java_lang_Object;
|
||||
static shared_ptr<JavaArray> Array_java_lang_Object;
|
||||
static shared_ptr<JavaClass> Class_java_lang_RuntimeException;
|
||||
static shared_ptr<JavaClass> Class_java_lang_String;
|
||||
static shared_ptr<JavaClass> Class_java_util_Collection;
|
||||
|
@ -71,7 +75,7 @@ public:
|
|||
static shared_ptr<StringMethod> Method_java_lang_String_toLowerCase;
|
||||
static shared_ptr<StringMethod> Method_java_lang_String_toUpperCase;
|
||||
|
||||
static jmethodID MID_java_util_Collection_toArray;
|
||||
static shared_ptr<ObjectArrayMethod> Method_java_util_Collection_toArray;
|
||||
|
||||
static shared_ptr<StaticObjectMethod> StaticMethod_java_util_Locale_getDefault;
|
||||
static shared_ptr<StringMethod> Method_java_util_Locale_getLanguage;
|
||||
|
|
|
@ -34,6 +34,13 @@ JavaType::JavaType() {
|
|||
JavaType::~JavaType() {
|
||||
}
|
||||
|
||||
JavaArray::JavaArray(const JavaType &base) : myBase(base) {
|
||||
}
|
||||
|
||||
std::string JavaArray::code() const {
|
||||
return "[" + myBase.code();
|
||||
}
|
||||
|
||||
JavaClass::JavaClass(JNIEnv *env, const std::string &name) : myName(name), myEnv(env) {
|
||||
myClass = 0;
|
||||
}
|
||||
|
@ -175,7 +182,7 @@ jstring StringMethod::call(jobject base, ...) {
|
|||
return result;
|
||||
}
|
||||
|
||||
ObjectMethod::ObjectMethod(const JavaClass &cls, const std::string &name, const JavaType &returnType, const std::string ¶meters) : Method(cls, name, returnType, parameters) {
|
||||
ObjectMethod::ObjectMethod(const JavaClass &cls, const std::string &name, const JavaClass &returnType, const std::string ¶meters) : Method(cls, name, returnType, parameters) {
|
||||
}
|
||||
|
||||
jobject ObjectMethod::call(jobject base, ...) {
|
||||
|
@ -188,7 +195,20 @@ jobject ObjectMethod::call(jobject base, ...) {
|
|||
return result;
|
||||
}
|
||||
|
||||
StaticObjectMethod::StaticObjectMethod(const JavaClass &cls, const std::string &name, const JavaType &returnType, const std::string ¶meters) : StaticMethod(cls, name, returnType, parameters) {
|
||||
ObjectArrayMethod::ObjectArrayMethod(const JavaClass &cls, const std::string &name, const JavaArray &returnType, const std::string ¶meters) : Method(cls, name, returnType, parameters) {
|
||||
}
|
||||
|
||||
jobjectArray ObjectArrayMethod::call(jobject base, ...) {
|
||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling ObjectArrayMethod " + myName);
|
||||
va_list lst;
|
||||
va_start(lst, base);
|
||||
jobjectArray result = (jobjectArray)env().CallObjectMethodV(base, myId, lst);
|
||||
va_end(lst);
|
||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished ObjectArrayMethod " + myName);
|
||||
return result;
|
||||
}
|
||||
|
||||
StaticObjectMethod::StaticObjectMethod(const JavaClass &cls, const std::string &name, const JavaClass &returnType, const std::string ¶meters) : StaticMethod(cls, name, returnType, parameters) {
|
||||
}
|
||||
|
||||
jobject StaticObjectMethod::call(...) {
|
||||
|
|
|
@ -57,6 +57,16 @@ private:
|
|||
const std::string myCode;
|
||||
};
|
||||
|
||||
class JavaArray : public JavaType {
|
||||
|
||||
public:
|
||||
JavaArray(const JavaType &base);
|
||||
std::string code() const;
|
||||
|
||||
private:
|
||||
const JavaType &myBase;
|
||||
};
|
||||
|
||||
class JavaClass : public JavaType {
|
||||
|
||||
public:
|
||||
|
@ -179,14 +189,21 @@ public:
|
|||
class ObjectMethod : public Method {
|
||||
|
||||
public:
|
||||
ObjectMethod(const JavaClass &cls, const std::string &name, const JavaType &returnType, const std::string ¶meters);
|
||||
ObjectMethod(const JavaClass &cls, const std::string &name, const JavaClass &returnType, const std::string ¶meters);
|
||||
jobject call(jobject base, ...);
|
||||
};
|
||||
|
||||
class ObjectArrayMethod : public Method {
|
||||
|
||||
public:
|
||||
ObjectArrayMethod(const JavaClass &cls, const std::string &name, const JavaArray &returnType, const std::string ¶meters);
|
||||
jobjectArray call(jobject base, ...);
|
||||
};
|
||||
|
||||
class StaticObjectMethod : public StaticMethod {
|
||||
|
||||
public:
|
||||
StaticObjectMethod(const JavaClass &cls, const std::string &name, const JavaType &returnType, const std::string ¶meters);
|
||||
StaticObjectMethod(const JavaClass &cls, const std::string &name, const JavaClass &returnType, const std::string ¶meters);
|
||||
jobject call(...);
|
||||
};
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ jobjectArray JavaFSDir::getFileChildren(JNIEnv *env) {
|
|||
if (list == 0) {
|
||||
return 0;
|
||||
}
|
||||
jobjectArray array = (jobjectArray)env->CallObjectMethod(list, AndroidUtil::MID_java_util_Collection_toArray);
|
||||
jobjectArray array = AndroidUtil::Method_java_util_Collection_toArray->call(list);
|
||||
env->DeleteLocalRef(list);
|
||||
return array;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue