Skip to content

Instantly share code, notes, and snippets.

@rikkimax
Created February 15, 2015 10:50
Show Gist options
  • Save rikkimax/11ef88b85c9bd67273fd to your computer and use it in GitHub Desktop.
Save rikkimax/11ef88b85c9bd67273fd to your computer and use it in GitHub Desktop.
class String : JRootObject {
this(jobject id) {
myJavaObjectID_ = id;
}
private jobject myJavaObjectID_;
@property jobject myJavaObjectId() { return myJavaObjectID_; }
static {
private JClass myJavaClassID_;
@property JClass myJavaClassId() {
if (myJavaClassID_ is null) myJavaClassID_ = DJvm.getInstance.findClass("java.lang.String");
return myJavaClassID_; }
}
this(string a0) {
DJvm djvm = DJvm.getInstance;
JNIEnv* env = djvm.env;
if (env is null) throw new NonCreatableClass("Cannot create a class, environement unknown.");
JMethod mid = myJavaClassId.getMethod("<init>", "(Ljava/lang/String;)V");
if (myJavaClassId is null) throw new NonCreatableClass("Cannot create a class, unknown method constructor for arguments, (Ljava/lang/String;)V.");
myJavaObjectID_ = (*env).NewObject(env, myJavaClassId.cls, mid.methodID, (*env).NewStringUTF(env, a0.toStringz));
}
this() {
DJvm djvm = DJvm.getInstance;
JNIEnv* env = djvm.env;
if (env is null) throw new NonCreatableClass("Cannot create a class, environement unknown.");
JMethod mid = myJavaClassId.getMethod("<init>", "()V");
if (myJavaClassId is null) throw new NonCreatableClass("Cannot create a class, unknown method constructor for arguments, ()V.");
myJavaObjectID_ = (*env).NewObject(env, myJavaClassId.cls, mid.methodID, );
}
char charAt(int a0) {
JNIEnv* env = DJvm.getInstance.env;
jmethodID mid = (*env).GetMethodID(env, myJavaClassId.cls, cast(const(char)*)"charAt".toStringz, cast(const(char)*)"(I)C".toStringz);
auto ret = (*env).CallByteMethod(env, myJavaObjectId(), mid, jvalue.fromValue(a0));
return cast(char)ret;
}
string concat(string a0) {
JNIEnv* env = DJvm.getInstance.env;
jmethodID mid = (*env).GetMethodID(env, myJavaClassId.cls, cast(const(char)*)"concat".toStringz, cast(const(char)*)"(Ljava/lang/String;)Ljava/lang/String;".toStringz);
auto ret = (*env).CallObjectMethod(env, myJavaObjectId(), mid, (*env).NewStringUTF(env, a0.toStringz));
int len = (*env).GetStringUTFLength(env, ret);
auto retv = (*env).GetStringUTFChars(env, ret, null);
string retv2 = cast(string)retv[0 .. len].idup;
(*env).ReleaseStringUTFChars(env, ret, retv);
return retv2;
}
static string valueOf(bool a0) {
JNIEnv* env = DJvm.getInstance.env;
jmethodID mid = (*env).GetMethodID(env, myJavaClassId.cls, cast(const(char)*)"valueOf".toStringz, cast(const(char)*)"(Z)Ljava/lang/String;".toStringz);
auto ret = (*env).CallStaticObjectMethod(env, myJavaClassId().cls, mid, jvalue.fromValue(a0));
int len = (*env).GetStringUTFLength(env, ret);
auto retv = (*env).GetStringUTFChars(env, ret, null);
string retv2 = cast(string)retv[0 .. len].idup;
(*env).ReleaseStringUTFChars(env, ret, retv);
return retv2;
}
@property bool myfield() {
JNIEnv* env = DJvm.getInstance.env;
JField field = myJavaClassId().getField("myfield", "Z");
auto ret = (*env).GetBooleanField(env, myJavaObjectId(), field.fieldId);
return cast(bool)ret;
}
@property void myfield(bool toset) {
JNIEnv* env = DJvm.getInstance.env;
JField field = myJavaClassId().getField("myfield", "Z");
(*env).SetBooleanField(env, myJavaObjectId(), field.fieldId, toset);
}
static @property string javaMangleOf() pure { return "java/lang/String"; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment