Skip to content

Commit

Permalink
implemented more field reflection
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan12 committed Nov 7, 2018
1 parent f427010 commit 5247b42
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 20 deletions.
38 changes: 19 additions & 19 deletions runtime/native/unsafe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ Java_sun_misc_Unsafe_getInt__Ljava_lang_Object_2J(JNIEnv *env, jobject unsafeObj
}

void
Java_sun_misc_Unsafe_putInt__Ljava_lang_Object_2JI(JNIEnv *env, jobject, jobject, jlong, jint) {
UnsafeUnimplemented("Java_sun_misc_Unsafe_putInt__Ljava_lang_Object_2JI");
Java_sun_misc_Unsafe_putInt__Ljava_lang_Object_2JI(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset, jint value) {
*(reinterpret_cast<jint*>(reinterpret_cast<char*>(obj) + offset)) = value;
}

extern "C" {
Expand All @@ -69,13 +69,13 @@ extern "C" {

jobject
Java_sun_misc_Unsafe_getObject(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset) {
// dw475 TODO autobox primative types (need to inspect object field)
// dw475 TODO autobox primative types (need to inspect object field) (may not have to)
return *(reinterpret_cast<jobject*>(reinterpret_cast<char*>(obj) + offset));
}

void
Java_sun_misc_Unsafe_putObject(JNIEnv *env, jobject, jobject, jlong, jobject) {
UnsafeUnimplemented("Java_sun_misc_Unsafe_putObject");
Java_sun_misc_Unsafe_putObject(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset, jobject value) {
*(reinterpret_cast<jobject*>(reinterpret_cast<char*>(obj) + offset)) = value;
}

jboolean
Expand All @@ -84,8 +84,8 @@ Java_sun_misc_Unsafe_getBoolean(JNIEnv *env, jobject unsafeObj, jobject obj, jlo
}

void
Java_sun_misc_Unsafe_putBoolean(JNIEnv *env, jobject, jobject, jlong, jboolean) {
UnsafeUnimplemented("Java_sun_misc_Unsafe_putBoolean");
Java_sun_misc_Unsafe_putBoolean(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset, jboolean value) {
*(reinterpret_cast<jboolean*>(reinterpret_cast<char*>(obj) + offset)) = value;
}

jbyte
Expand All @@ -94,8 +94,8 @@ Java_sun_misc_Unsafe_getByte__Ljava_lang_Object_2J(JNIEnv *env, jobject unsafeOb
}

void
Java_sun_misc_Unsafe_putByte__Ljava_lang_Object_2JB(JNIEnv *env, jobject, jobject, jlong, jbyte) {
UnsafeUnimplemented("Java_sun_misc_Unsafe_putByte__Ljava_lang_Object_2JB");
Java_sun_misc_Unsafe_putByte__Ljava_lang_Object_2JB(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset, jbyte value) {
*(reinterpret_cast<jbyte*>(reinterpret_cast<char*>(obj) + offset)) = value;
}

jshort
Expand All @@ -104,8 +104,8 @@ Java_sun_misc_Unsafe_getShort__Ljava_lang_Object_2J(JNIEnv *env, jobject unsafeO
}

void
Java_sun_misc_Unsafe_putShort__Ljava_lang_Object_2JS(JNIEnv *env, jobject, jobject, jlong, jshort) {
UnsafeUnimplemented("Java_sun_misc_Unsafe_putShort__Ljava_lang_Object_2JS");
Java_sun_misc_Unsafe_putShort__Ljava_lang_Object_2JS(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset, jshort value) {
*(reinterpret_cast<jshort*>(reinterpret_cast<char*>(obj) + offset)) = value;
}

jchar
Expand All @@ -114,8 +114,8 @@ Java_sun_misc_Unsafe_getChar__Ljava_lang_Object_2J(JNIEnv *env, jobject unsafeOb
}

void
Java_sun_misc_Unsafe_putChar__Ljava_lang_Object_2JC(JNIEnv *env, jobject, jobject, jlong, jchar) {
UnsafeUnimplemented("Java_sun_misc_Unsafe_putChar__Ljava_lang_Object_2JC");
Java_sun_misc_Unsafe_putChar__Ljava_lang_Object_2JC(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset, jchar value) {
*(reinterpret_cast<jchar*>(reinterpret_cast<char*>(obj) + offset)) = value;
}

jlong
Expand All @@ -124,8 +124,8 @@ Java_sun_misc_Unsafe_getLong__Ljava_lang_Object_2J(JNIEnv *env, jobject unsafeOb
}

void
Java_sun_misc_Unsafe_putLong__Ljava_lang_Object_2JJ(JNIEnv *env, jobject, jobject, jlong, jlong) {
UnsafeUnimplemented("Java_sun_misc_Unsafe_putLong__Ljava_lang_Object_2JJ");
Java_sun_misc_Unsafe_putLong__Ljava_lang_Object_2JJ(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset, jlong value) {
*(reinterpret_cast<jlong*>(reinterpret_cast<char*>(obj) + offset)) = value;
}

jfloat
Expand All @@ -134,8 +134,8 @@ Java_sun_misc_Unsafe_getFloat__Ljava_lang_Object_2J(JNIEnv *env, jobject unsafeO
}

void
Java_sun_misc_Unsafe_putFloat__Ljava_lang_Object_2JF(JNIEnv *env, jobject, jobject, jlong, jfloat) {
UnsafeUnimplemented("Java_sun_misc_Unsafe_putFloat__Ljava_lang_Object_2JF");
Java_sun_misc_Unsafe_putFloat__Ljava_lang_Object_2JF(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset, jfloat value) {
*(reinterpret_cast<jfloat*>(reinterpret_cast<char*>(obj) + offset)) = value;
}

jdouble
Expand All @@ -144,8 +144,8 @@ Java_sun_misc_Unsafe_getDouble__Ljava_lang_Object_2J(JNIEnv *env, jobject unsafe
}

void
Java_sun_misc_Unsafe_putDouble__Ljava_lang_Object_2JD(JNIEnv *env, jobject, jobject, jlong, jdouble) {
UnsafeUnimplemented("Java_sun_misc_Unsafe_putDouble__Ljava_lang_Object_2JD");
Java_sun_misc_Unsafe_putDouble__Ljava_lang_Object_2JD(JNIEnv *env, jobject unsafeObj, jobject obj, jlong offset, jdouble value) {
*(reinterpret_cast<jdouble*>(reinterpret_cast<char*>(obj) + offset)) = value;
}

jbyte
Expand Down
33 changes: 32 additions & 1 deletion tests/isolated/FieldReflection.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ public class FieldReflection {
public long ll = 1231231232;
public Long L;
public String s;
public String[] sarr;
public int[] iarr;
public FieldReflectionGen<String> frGeneric;

static Integer b;
static String ss = "AAAA";
Expand All @@ -30,13 +33,41 @@ public static void main(String[] args) throws Exception {
System.out.println(fld.getModifiers());
System.out.println(fld.getType());
System.out.println(fld.get(aaa));
System.out.println(fld.getGenericType());
// TODO fix something with generics
// System.out.println(fld.getGenericType());

if (fld.getName().equals("a")) {
fld.setInt(aaa, 123412);
} else if (fld.getName().equals("bb")) {
fld.setBoolean(aaa, true);
} else if (fld.getName().equals("cc")) {
fld.setShort(aaa, new Short((short)17));
fld.set(aaa, new Short((short)34));
} else if (fld.getName().equals("ff")) {
fld.setFloat(aaa, 0.3432f);
} else if (fld.getName().equals("d")) {
fld.set(aaa, new Double(1234544.92));
} else if (fld.getName().equals("j")) {
fld.setByte(aaa, (byte) 11);
}
}

System.out.println(aaa.a);
System.out.println(aaa.bb);
System.out.println(aaa.cc);
System.out.println(aaa.ff);
System.out.println(aaa.d);
System.out.println(aaa.j);
}

FieldReflection(int i, int j) {
a = i;
s = "A string";
b = j;
sarr = new String[]{"one", "two"};
}

static class FieldReflectionGen<T> {
T[] arr;
}
}

0 comments on commit 5247b42

Please sign in to comment.