mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 09:49:19 +02:00
JavaType class
This commit is contained in:
parent
a384a82a86
commit
1a3419e95b
3 changed files with 34 additions and 13 deletions
|
@ -157,7 +157,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
||||||
Method_Encoding_createConverter = new ObjectMethod(*Class_Encoding, "createConverter", "org/geometerplus/zlibrary/core/encodings/EncodingConverter", "()");
|
Method_Encoding_createConverter = new ObjectMethod(*Class_Encoding, "createConverter", "org/geometerplus/zlibrary/core/encodings/EncodingConverter", "()");
|
||||||
|
|
||||||
Class_EncodingConverter = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/EncodingConverter");
|
Class_EncodingConverter = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/EncodingConverter");
|
||||||
Field_EncodingConverter_Name = new ObjectField(*Class_EncodingConverter, "Name", "java/lang/String");
|
Field_EncodingConverter_Name = new ObjectField(*Class_EncodingConverter, "Name", *Class_java_lang_String);
|
||||||
Method_EncodingConverter_convert = new IntMethod(*Class_EncodingConverter, "convert", "([BII[BI)");
|
Method_EncodingConverter_convert = new IntMethod(*Class_EncodingConverter, "convert", "([BII[BI)");
|
||||||
Method_EncodingConverter_reset = new VoidMethod(*Class_EncodingConverter, "reset", "()");
|
Method_EncodingConverter_reset = new VoidMethod(*Class_EncodingConverter, "reset", "()");
|
||||||
|
|
||||||
|
@ -183,7 +183,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
||||||
StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(*Class_Paths, "cacheDirectory", "java/lang/String", "()");
|
StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(*Class_Paths, "cacheDirectory", "java/lang/String", "()");
|
||||||
|
|
||||||
Class_Book = new JavaClass(env, "org/geometerplus/fbreader/library/Book");
|
Class_Book = new JavaClass(env, "org/geometerplus/fbreader/library/Book");
|
||||||
Field_Book_File = new ObjectField(*Class_Book, "File", "org/geometerplus/zlibrary/core/filesystem/ZLFile");
|
Field_Book_File = new ObjectField(*Class_Book, "File", *Class_ZLFile);
|
||||||
Method_Book_getTitle = new StringMethod(*Class_Book, "getTitle", "()");
|
Method_Book_getTitle = new StringMethod(*Class_Book, "getTitle", "()");
|
||||||
Method_Book_getLanguage = new StringMethod(*Class_Book, "getLanguage", "()");
|
Method_Book_getLanguage = new StringMethod(*Class_Book, "getLanguage", "()");
|
||||||
Method_Book_getEncodingNoDetection = new StringMethod(*Class_Book, "getEncodingNoDetection", "()");
|
Method_Book_getEncodingNoDetection = new StringMethod(*Class_Book, "getEncodingNoDetection", "()");
|
||||||
|
@ -199,7 +199,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
||||||
StaticMethod_Tag_getTag = new StaticObjectMethod(*Class_Tag, "getTag", "org/geometerplus/fbreader/library/Tag", "(Lorg/geometerplus/fbreader/library/Tag;Ljava/lang/String;)");
|
StaticMethod_Tag_getTag = new StaticObjectMethod(*Class_Tag, "getTag", "org/geometerplus/fbreader/library/Tag", "(Lorg/geometerplus/fbreader/library/Tag;Ljava/lang/String;)");
|
||||||
|
|
||||||
Class_NativeBookModel = new JavaClass(env, "org/geometerplus/fbreader/bookmodel/NativeBookModel");
|
Class_NativeBookModel = new JavaClass(env, "org/geometerplus/fbreader/bookmodel/NativeBookModel");
|
||||||
Field_NativeBookModel_Book = new ObjectField(*Class_NativeBookModel, "Book", "org/geometerplus/fbreader/library/Book");
|
Field_NativeBookModel_Book = new ObjectField(*Class_NativeBookModel, "Book", *Class_Book);
|
||||||
Method_NativeBookModel_initInternalHyperlinks = new VoidMethod(*Class_NativeBookModel, "initInternalHyperlinks", "(Ljava/lang/String;Ljava/lang/String;I)");
|
Method_NativeBookModel_initInternalHyperlinks = new VoidMethod(*Class_NativeBookModel, "initInternalHyperlinks", "(Ljava/lang/String;Ljava/lang/String;I)");
|
||||||
Method_NativeBookModel_initTOC = new VoidMethod(*Class_NativeBookModel, "initTOC", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;[I[I)");
|
Method_NativeBookModel_initTOC = new VoidMethod(*Class_NativeBookModel, "initTOC", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;[I[I)");
|
||||||
Method_NativeBookModel_createTextModel = new ObjectMethod(*Class_NativeBookModel, "createTextModel", "org/geometerplus/zlibrary/text/model/ZLTextModel", "(Ljava/lang/String;Ljava/lang/String;I[I[I[I[I[BLjava/lang/String;Ljava/lang/String;I)");
|
Method_NativeBookModel_createTextModel = new ObjectMethod(*Class_NativeBookModel, "createTextModel", "org/geometerplus/zlibrary/text/model/ZLTextModel", "(Ljava/lang/String;Ljava/lang/String;I[I[I[I[I[BLjava/lang/String;Ljava/lang/String;I)");
|
||||||
|
|
|
@ -23,6 +23,12 @@
|
||||||
|
|
||||||
static const std::string JNI_LOGGER_CLASS = "JniLog";
|
static const std::string JNI_LOGGER_CLASS = "JniLog";
|
||||||
|
|
||||||
|
JavaType::JavaType() {
|
||||||
|
}
|
||||||
|
|
||||||
|
JavaType::~JavaType() {
|
||||||
|
}
|
||||||
|
|
||||||
JavaClass::JavaClass(JNIEnv *env, const std::string &name) : myName(name), myEnv(env) {
|
JavaClass::JavaClass(JNIEnv *env, const std::string &name) : myName(name), myEnv(env) {
|
||||||
jclass ref = env->FindClass(name.c_str());
|
jclass ref = env->FindClass(name.c_str());
|
||||||
myClass = (jclass)env->NewGlobalRef(ref);
|
myClass = (jclass)env->NewGlobalRef(ref);
|
||||||
|
@ -33,6 +39,10 @@ JavaClass::~JavaClass() {
|
||||||
myEnv->DeleteGlobalRef(myClass);
|
myEnv->DeleteGlobalRef(myClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string JavaClass::code() const {
|
||||||
|
return "L" + myName + ";";
|
||||||
|
}
|
||||||
|
|
||||||
Member::Member(const JavaClass &cls) : myClass(cls) {
|
Member::Member(const JavaClass &cls) : myClass(cls) {
|
||||||
//ZLLogger::Instance().registerClass(JNI_LOGGER_CLASS);
|
//ZLLogger::Instance().registerClass(JNI_LOGGER_CLASS);
|
||||||
}
|
}
|
||||||
|
@ -52,8 +62,8 @@ jobject Constructor::call(...) {
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
Field::Field(const JavaClass &cls, const std::string &name, const std::string &type) : Member(cls), myName(name) {
|
Field::Field(const JavaClass &cls, const std::string &name, const JavaType &type) : Member(cls), myName(name) {
|
||||||
myId = env().GetFieldID(jClass(), name.c_str(), type.c_str());
|
myId = env().GetFieldID(jClass(), name.c_str(), type.code().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
Field::~Field() {
|
Field::~Field() {
|
||||||
|
@ -73,7 +83,7 @@ StaticMethod::StaticMethod(const JavaClass &cls, const std::string &name, const
|
||||||
StaticMethod::~StaticMethod() {
|
StaticMethod::~StaticMethod() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ObjectField::ObjectField(const JavaClass &cls, const std::string &name, const std::string &type) : Field(cls, name, "L" + type + ";") {
|
ObjectField::ObjectField(const JavaClass &cls, const std::string &name, const JavaClass &type) : Field(cls, name, type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject ObjectField::value(jobject obj) const {
|
jobject ObjectField::value(jobject obj) const {
|
||||||
|
|
|
@ -24,16 +24,27 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
class JavaClass {
|
class JavaType {
|
||||||
|
|
||||||
|
protected:
|
||||||
|
JavaType();
|
||||||
|
virtual ~JavaType();
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual std::string code() const = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
|
JavaType(const JavaType&);
|
||||||
|
const JavaType &operator = (const JavaType&);
|
||||||
|
};
|
||||||
|
|
||||||
|
class JavaClass : public JavaType {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
JavaClass(JNIEnv *env, const std::string &name);
|
JavaClass(JNIEnv *env, const std::string &name);
|
||||||
~JavaClass();
|
~JavaClass();
|
||||||
jclass j() const;
|
jclass j() const;
|
||||||
|
std::string code() const;
|
||||||
private:
|
|
||||||
JavaClass(const JavaClass&);
|
|
||||||
const JavaClass &operator = (const JavaClass&);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::string myName;
|
const std::string myName;
|
||||||
|
@ -74,7 +85,7 @@ private:
|
||||||
class Field : public Member {
|
class Field : public Member {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Field(const JavaClass &cls, const std::string &name, const std::string &type);
|
Field(const JavaClass &cls, const std::string &name, const JavaType &type);
|
||||||
virtual ~Field();
|
virtual ~Field();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -107,7 +118,7 @@ protected:
|
||||||
class ObjectField : public Field {
|
class ObjectField : public Field {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ObjectField(const JavaClass &cls, const std::string &name, const std::string &type);
|
ObjectField(const JavaClass &cls, const std::string &name, const JavaClass &type);
|
||||||
jobject value(jobject obj) const;
|
jobject value(jobject obj) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue