From 1037987174e34ec2ea483da79d651c7e2e16e83e Mon Sep 17 00:00:00 2001 From: cherierm Date: Wed, 9 Jul 2008 08:05:20 +0000 Subject: [PATCH 1/1] Add to new utility functions : jxbt_get_static_jmethod() and jxbt_get_static_smethod() to get the static method of a Java class. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@5862 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/java/jxbt_utilities.c | 51 +++++++++++++++++++++++++++++++++++++++ src/java/jxbt_utilities.h | 8 ++++++ 2 files changed, 59 insertions(+) diff --git a/src/java/jxbt_utilities.c b/src/java/jxbt_utilities.c index aa2b5c61ce..97d41be30c 100644 --- a/src/java/jxbt_utilities.c +++ b/src/java/jxbt_utilities.c @@ -60,6 +60,57 @@ jmethodID jxbt_get_jmethod(JNIEnv* env, jclass cls, return id; } +jmethodID jxbt_get_static_jmethod(JNIEnv* env, jclass cls, + const char *name,const char *signature) { + jmethodID id; + + if (!cls) + return 0; + id = (*env)->GetStaticMethodID(env, cls, name,signature); + + if(!id) { + + jmethodID tostr_id = (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;"); + jstring jclassname = (jstring) (*env)->CallObjectMethod(env, cls, tostr_id, NULL); + const char *classname = (*env)->GetStringUTFChars(env, jclassname, 0); + + char *m=bprintf("Cannot find static method %s(%s) in %s", name, signature ,classname); + + (*env)->ReleaseStringUTFChars(env, jclassname, classname); + + jxbt_throw_jni(env,m); + + free(m); + return 0; + } + + return id; +} + +jmethodID jxbt_get_static_smethod(JNIEnv* env, const char *classname, + const char *name,const char *signature) { + + jclass cls; + + jmethodID id; + cls = jxbt_get_class(env,classname); + + if (!cls) + return 0; + + id = (*env)->GetStaticMethodID(env, cls, name,signature); + + if(!id) { + char *m=bprintf("Cannot find static method %s(%s) in %s", name, signature,classname); + + jxbt_throw_jni(env,m); + + free(m); + return 0; + } + return id; +} + jmethodID jxbt_get_smethod(JNIEnv* env, const char *classname, const char *name,const char *signature) { diff --git a/src/java/jxbt_utilities.h b/src/java/jxbt_utilities.h index 97e5eb4a13..570645bab1 100644 --- a/src/java/jxbt_utilities.h +++ b/src/java/jxbt_utilities.h @@ -27,6 +27,10 @@ jclass jxbt_get_class(JNIEnv* env, const char*name); (it's ok to to pass a NULL class: it's a noop) */ jmethodID jxbt_get_jmethod(JNIEnv* env, jclass class, const char *name,const char *signature); + +/* Like the jxbt_get_class() but get a static method */ +jmethodID jxbt_get_static_jmethod(JNIEnv* env, jclass cls, + const char *name,const char *signature); /* Search a field in a class and throw an exception if not found (it's ok to to pass a NULL class: it's a noop) */ @@ -39,6 +43,10 @@ jfieldID jxbt_get_jfield(JNIEnv* env, jclass class, jmethodID jxbt_get_smethod(JNIEnv* env, const char *classname, const char *name,const char *signature); +/* Like the jxbt_get_smethod() but get a static method */ +jmethodID jxbt_get_static_smethod(JNIEnv* env, const char *classname, + const char *name,const char *signature); + /* Search a field in a class and throw an exception if not found (it's ok to to pass a NULL class: it's a noop) */ jfieldID jxbt_get_sfield(JNIEnv* env, const char *classname, -- 2.20.1