1
0
Fork 0
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:
Nikolay Pultsin 2012-03-31 11:44:59 +01:00
parent f68bd00b36
commit 062df7442a
5 changed files with 53 additions and 8 deletions

View file

@ -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", "()");

View file

@ -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;

View file

@ -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 &parameters) : Method(cls, name, returnType, parameters) { ObjectMethod::ObjectMethod(const JavaClass &cls, const std::string &name, const JavaClass &returnType, const std::string &parameters) : 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 &parameters) : StaticMethod(cls, name, returnType, parameters) { ObjectArrayMethod::ObjectArrayMethod(const JavaClass &cls, const std::string &name, const JavaArray &returnType, const std::string &parameters) : 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 &parameters) : StaticMethod(cls, name, returnType, parameters) {
} }
jobject StaticObjectMethod::call(...) { jobject StaticObjectMethod::call(...) {

View file

@ -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 &parameters); ObjectMethod(const JavaClass &cls, const std::string &name, const JavaClass &returnType, const std::string &parameters);
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 &parameters);
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 &parameters); StaticObjectMethod(const JavaClass &cls, const std::string &name, const JavaClass &returnType, const std::string &parameters);
jobject call(...); jobject call(...);
}; };

View file

@ -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;
} }