123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #include <gcj/cni.h>
- #include <jvm.h>
- #include <jvmti.h>
- #include <stdio.h>
- #include <java/lang/Object.h>
- #include "getmethodname.h"
- static void
- print_error (jvmtiEnv *env, const char *msg, jvmtiError err)
- {
- char *error_msg;
- env->GetErrorName (err, &error_msg);
- printf ("%s: %s\n", msg, error_msg);
- env->Deallocate (reinterpret_cast<unsigned char *> (error_msg));
- }
- #define NUM_METHODS 8
- static const char *function_names[] = { "clone",
- "equals",
- "finalize",
- "getClass",
- "hashCode",
- "notify",
- "notifyAll",
- "toString" };
- static int
- function_index (const char *name)
- {
- for (int i = 0; i < NUM_METHODS; ++i)
- {
- if (strcmp (function_names[i], name) == 0)
- return i;
- }
- return -1;
- }
- void
- getmethodname::do_getmethodname_tests ()
- {
- jvmtiEnv *env;
- JavaVM *vm = _Jv_GetJavaVM ();
- vm->GetEnv (reinterpret_cast<void **> (&env), JVMTI_VERSION_1_0);
- jvmtiError err;
- err = env->GetMethodName (reinterpret_cast<jmethodID> (NULL),
- reinterpret_cast<char **> (NULL),
- reinterpret_cast<char **> (NULL),
- reinterpret_cast<char **> (NULL));
- print_error (env, "null jmethodID", err);
- jint count;
- jmethodID *methods;
- err = env->GetClassMethods (&java::lang::Object::class$, &count, &methods);
- print_error (env, "GetClassMethods", err);
- char *names[NUM_METHODS], *solo_names[NUM_METHODS];
- char *signatures[NUM_METHODS], *solo_signatures[NUM_METHODS];
- char *generics[NUM_METHODS], *solo_generics[NUM_METHODS];
- for (jint i = 0; i < count; ++i)
- {
- char *name, *n;
- char *signature, *s;
- char *generic, *g;
- err = env->GetMethodName (methods[i], &name, &signature, &generic);
- int idx = -1;
- if (err != JVMTI_ERROR_NONE)
- {
- print_error (env, "GetMethodName - all fields", err);
- continue;
- }
- idx = function_index (name);
- if (idx == -1)
- continue;
- names[idx] = name;
- signatures[idx] = signature;
- generics[idx] = generic;
- err = env->GetMethodName (methods[i], &n, NULL, NULL);
- print_error (env, "GetMethodName - name", err);
- solo_names[idx] = n;
- err = env->GetMethodName (methods[i], NULL, &s, NULL);
- print_error (env, "GetMethodName - signature", err);
- solo_signatures[idx] = s;
- err = env->GetMethodName (methods[i], NULL, NULL, &g);
- print_error (env, "GetMethodName - generic", err);
- solo_generics[idx] = g;
- }
- #define WRAP(X) ((X) == NULL ? "null" : (X))
- #define MATCH(X,Y) (strcmp ((X),(Y)) == 0 ? "match" : "do not match")
- for (int i = 0; i < NUM_METHODS; ++i)
- {
- printf ("name=%s, signature=%s, generic=%s\n",
- WRAP (names[i]), WRAP (signatures[i]), WRAP (generics[i]));
- printf ("names %s\n", MATCH (solo_names[i], names[i]));
- printf ("signatures %s\n", MATCH (solo_signatures[i], signatures[i]));
- printf ("generic %s\n", "not yet");
- env->Deallocate (reinterpret_cast<unsigned char *> (names[i]));
- env->Deallocate (reinterpret_cast<unsigned char *> (solo_names[i]));
- env->Deallocate (reinterpret_cast<unsigned char *> (signatures[i]));
- env->Deallocate (reinterpret_cast<unsigned char *> (solo_signatures[i]));
- env->Deallocate (reinterpret_cast<unsigned char *> (generics[i]));
- env->Deallocate (reinterpret_cast<unsigned char *> (solo_generics[i]));
- }
- }
|