mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 10:19: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;
|
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_RuntimeException;
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_String;
|
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_String;
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_util_Collection;
|
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_toLowerCase;
|
||||||
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toUpperCase;
|
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<StaticObjectMethod> AndroidUtil::StaticMethod_java_util_Locale_getDefault;
|
||||||
shared_ptr<StringMethod> AndroidUtil::Method_java_util_Locale_getLanguage;
|
shared_ptr<StringMethod> AndroidUtil::Method_java_util_Locale_getLanguage;
|
||||||
|
@ -126,6 +128,8 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
||||||
|
|
||||||
JNIEnv *env = getEnv();
|
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_RuntimeException = new JavaClass(env, "java/lang/RuntimeException");
|
||||||
Class_java_lang_String = new JavaClass(env, "java/lang/String");
|
Class_java_lang_String = new JavaClass(env, "java/lang/String");
|
||||||
Class_java_util_Collection = new JavaClass(env, "java/util/Collection");
|
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_toLowerCase = new StringMethod(*Class_java_lang_String, "toLowerCase", "()");
|
||||||
Method_java_lang_String_toUpperCase = new StringMethod(*Class_java_lang_String, "toUpperCase", "()");
|
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, "()");
|
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", "()");
|
Method_java_util_Locale_getLanguage = new StringMethod(*Class_java_util_Locale, "getLanguage", "()");
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <shared_ptr.h>
|
#include <shared_ptr.h>
|
||||||
|
|
||||||
class JavaClass;
|
class JavaClass;
|
||||||
|
class JavaArray;
|
||||||
class Constructor;
|
class Constructor;
|
||||||
class ObjectField;
|
class ObjectField;
|
||||||
class VoidMethod;
|
class VoidMethod;
|
||||||
|
@ -36,6 +37,7 @@ class LongMethod;
|
||||||
class BooleanMethod;
|
class BooleanMethod;
|
||||||
class StringMethod;
|
class StringMethod;
|
||||||
class ObjectMethod;
|
class ObjectMethod;
|
||||||
|
class ObjectArrayMethod;
|
||||||
class StaticObjectMethod;
|
class StaticObjectMethod;
|
||||||
|
|
||||||
class ZLFile;
|
class ZLFile;
|
||||||
|
@ -47,6 +49,8 @@ private:
|
||||||
static JavaVM *ourJavaVM;
|
static JavaVM *ourJavaVM;
|
||||||
|
|
||||||
public:
|
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_RuntimeException;
|
||||||
static shared_ptr<JavaClass> Class_java_lang_String;
|
static shared_ptr<JavaClass> Class_java_lang_String;
|
||||||
static shared_ptr<JavaClass> Class_java_util_Collection;
|
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_toLowerCase;
|
||||||
static shared_ptr<StringMethod> Method_java_lang_String_toUpperCase;
|
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<StaticObjectMethod> StaticMethod_java_util_Locale_getDefault;
|
||||||
static shared_ptr<StringMethod> Method_java_util_Locale_getLanguage;
|
static shared_ptr<StringMethod> Method_java_util_Locale_getLanguage;
|
||||||
|
|
|
@ -34,6 +34,13 @@ JavaType::JavaType() {
|
||||||
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) {
|
JavaClass::JavaClass(JNIEnv *env, const std::string &name) : myName(name), myEnv(env) {
|
||||||
myClass = 0;
|
myClass = 0;
|
||||||
}
|
}
|
||||||
|
@ -175,7 +182,7 @@ jstring StringMethod::call(jobject base, ...) {
|
||||||
return result;
|
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, ...) {
|
jobject ObjectMethod::call(jobject base, ...) {
|
||||||
|
@ -188,7 +195,20 @@ jobject ObjectMethod::call(jobject base, ...) {
|
||||||
return result;
|
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(...) {
|
jobject StaticObjectMethod::call(...) {
|
||||||
|
|
|
@ -57,6 +57,16 @@ private:
|
||||||
const std::string myCode;
|
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 {
|
class JavaClass : public JavaType {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -179,14 +189,21 @@ public:
|
||||||
class ObjectMethod : public Method {
|
class ObjectMethod : public Method {
|
||||||
|
|
||||||
public:
|
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, ...);
|
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 {
|
class StaticObjectMethod : public StaticMethod {
|
||||||
|
|
||||||
public:
|
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(...);
|
jobject call(...);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ jobjectArray JavaFSDir::getFileChildren(JNIEnv *env) {
|
||||||
if (list == 0) {
|
if (list == 0) {
|
||||||
return 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);
|
env->DeleteLocalRef(list);
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue