1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-03 09:49:19 +02:00

Member class

This commit is contained in:
Nikolay Pultsin 2012-03-30 21:50:09 +01:00
parent 18e14a29de
commit 266249bd6f
3 changed files with 34 additions and 13 deletions

View file

@ -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
} }
*/ */

View file

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

View file

@ -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__ */