mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-05 19:42:17 +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) {
|
||||
JNIEnv *env = getEnv();
|
||||
jclass cls = env->FindClass("org/geometerplus/fbreader/bookmodel/BookReadingException");
|
||||
env->CallStaticVoidMethod(
|
||||
cls,
|
||||
Class_BookReadingException->j(),
|
||||
StaticMethod_BookReadingException_throwForFile,
|
||||
AndroidUtil::createJavaString(env, resourceId),
|
||||
AndroidUtil::createJavaFile(env, file.path())
|
||||
);
|
||||
// TODO: possible memory leak
|
||||
// TODO: clear cls & ZLFile object references
|
||||
// TODO: clear ZLFile object reference
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -33,14 +33,20 @@ JavaClass::~JavaClass() {
|
|||
myEnv->DeleteGlobalRef(myClass);
|
||||
}
|
||||
|
||||
Constructor::Constructor(const JavaClass &cls, const std::string &signature) : myClass(cls) {
|
||||
myId = cls.myEnv->GetMethodID(cls.j(), "<init>", signature.c_str());
|
||||
Member::Member(const JavaClass &cls) : myClass(cls) {
|
||||
}
|
||||
|
||||
Member::~Member() {
|
||||
}
|
||||
|
||||
Constructor::Constructor(const JavaClass &cls, const std::string &signature) : Member(cls) {
|
||||
myId = env().GetMethodID(jClass(), "<init>", signature.c_str());
|
||||
}
|
||||
|
||||
jobject Constructor::call(...) {
|
||||
va_list lst;
|
||||
va_start(lst, this);
|
||||
jobject obj = myClass.myEnv->NewObjectV(myClass.j(), myId, lst);
|
||||
jobject obj = env().NewObjectV(jClass(), myId, lst);
|
||||
va_end(lst);
|
||||
return obj;
|
||||
}
|
||||
|
|
|
@ -40,23 +40,36 @@ private:
|
|||
JNIEnv *myEnv;
|
||||
jclass myClass;
|
||||
|
||||
friend class Member;
|
||||
friend class Method;
|
||||
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:
|
||||
Constructor(const JavaClass &cls, const std::string &signature);
|
||||
jobject call(...);
|
||||
|
||||
private:
|
||||
Constructor(const Constructor&);
|
||||
const Constructor &operator = (const Constructor&);
|
||||
|
||||
protected:
|
||||
const JavaClass &myClass;
|
||||
jmethodID myId;
|
||||
};
|
||||
|
||||
|
@ -145,4 +158,7 @@ public:
|
|||
|
||||
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__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue