diff options
Diffstat (limited to 'java/class.c')
-rw-r--r-- | java/class.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/java/class.c b/java/class.c new file mode 100644 index 0000000..d4e78ae --- /dev/null +++ b/java/class.c @@ -0,0 +1,39 @@ +#include "class.h" +#include "config.h" +#include "misc.h" + +void JNICALL class_prepare(jvmtiEnv *jvmti, JNIEnv* jni, jthread thread, + jclass klass) +{ + jvmtiError error; + char *class_sig = NULL, *class_name = NULL; + + if ((error = (*jvmti)->GetClassSignature (jvmti, klass, &class_sig, NULL)) + != JVMTI_ERROR_NONE) + jvmti_error (jvmti, error, "GetClassSignature"); + else { + if ((class_name = get_class_name_from_sig (class_sig, TRUE)) && + include_class (class_name)) { + jint field_count; + jfieldID* fields; + if ((error = (*jvmti)->GetClassFields (jvmti, klass, &field_count, + &fields)) + != JVMTI_ERROR_NONE) + jvmti_error (jvmti, error, "GetClassFields"); + else { + int i; + for (i = 0; i < field_count; i++) { + if ((error = + (*jvmti)->SetFieldModificationWatch (jvmti, klass, + fields[i])) + != JVMTI_ERROR_NONE) + jvmti_error (jvmti, error, "SetFieldModificationWatch"); + } + } + } + } + + jvmti_dealloc (jvmti, class_sig); + simple_free (class_name); + +} |