mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 09:49:19 +02:00
Member class
This commit is contained in:
parent
18e14a29de
commit
266249bd6f
3 changed files with 34 additions and 13 deletions
|
@ -297,14 +297,13 @@ void AndroidUtil::throwRuntimeException(JNIEnv *env, const std::string &message)
|
||||||
/*
|
/*
|
||||||
void AndroidUtil::throwBookReadingException(const std::string &resourceId, const ZLFile &file) {
|
void AndroidUtil::throwBookReadingException(const std::string &resourceId, const ZLFile &file) {
|
||||||
JNIEnv *env = getEnv();
|
JNIEnv *env = getEnv();
|
||||||
jclass cls = env->FindClass("org/geometerplus/fbreader/bookmodel/BookReadingException");
|
|
||||||
env->CallStaticVoidMethod(
|
env->CallStaticVoidMethod(
|
||||||
cls,
|
Class_BookReadingException->j(),
|
||||||
StaticMethod_BookReadingException_throwForFile,
|
StaticMethod_BookReadingException_throwForFile,
|
||||||
AndroidUtil::createJavaString(env, resourceId),
|
AndroidUtil::createJavaString(env, resourceId),
|
||||||
AndroidUtil::createJavaFile(env, file.path())
|
AndroidUtil::createJavaFile(env, file.path())
|
||||||
);
|
);
|
||||||
// TODO: possible memory leak
|
// TODO: possible memory leak
|
||||||
// TODO: clear cls & ZLFile object references
|
// TODO: clear ZLFile object reference
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -33,14 +33,20 @@ JavaClass::~JavaClass() {
|
||||||
myEnv->DeleteGlobalRef(myClass);
|
myEnv->DeleteGlobalRef(myClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
Constructor::Constructor(const JavaClass &cls, const std::string &signature) : myClass(cls) {
|
Member::Member(const JavaClass &cls) : myClass(cls) {
|
||||||
myId = cls.myEnv->GetMethodID(cls.j(), "<init>", signature.c_str());
|
}
|
||||||
|
|
||||||
|
Member::~Member() {
|
||||||
|
}
|
||||||
|
|
||||||
|
Constructor::Constructor(const JavaClass &cls, const std::string &signature) : Member(cls) {
|
||||||
|
myId = env().GetMethodID(jClass(), "<init>", signature.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject Constructor::call(...) {
|
jobject Constructor::call(...) {
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, this);
|
va_start(lst, this);
|
||||||
jobject obj = myClass.myEnv->NewObjectV(myClass.j(), myId, lst);
|
jobject obj = env().NewObjectV(jClass(), myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,23 +40,36 @@ private:
|
||||||
JNIEnv *myEnv;
|
JNIEnv *myEnv;
|
||||||
jclass myClass;
|
jclass myClass;
|
||||||
|
|
||||||
|
friend class Member;
|
||||||
friend class Method;
|
friend class Method;
|
||||||
friend class StaticMethod;
|
friend class StaticMethod;
|
||||||
friend class Constructor;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class Constructor {
|
class Member {
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Member(const JavaClass &cls);
|
||||||
|
JNIEnv &env() const;
|
||||||
|
jclass jClass() const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual ~Member();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Member(const Member&);
|
||||||
|
const Member &operator = (const Member&);
|
||||||
|
|
||||||
|
private:
|
||||||
|
const JavaClass &myClass;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Constructor : public Member {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Constructor(const JavaClass &cls, const std::string &signature);
|
Constructor(const JavaClass &cls, const std::string &signature);
|
||||||
jobject call(...);
|
jobject call(...);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Constructor(const Constructor&);
|
|
||||||
const Constructor &operator = (const Constructor&);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
const JavaClass &myClass;
|
|
||||||
jmethodID myId;
|
jmethodID myId;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -145,4 +158,7 @@ public:
|
||||||
|
|
||||||
inline jclass JavaClass::j() const { return myClass; }
|
inline jclass JavaClass::j() const { return myClass; }
|
||||||
|
|
||||||
|
inline JNIEnv &Member::env() const { return *myClass.myEnv; }
|
||||||
|
inline jclass Member::jClass() const { return myClass.myClass; }
|
||||||
|
|
||||||
#endif /* __JNIENVELOPE_H__ */
|
#endif /* __JNIENVELOPE_H__ */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue