aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog5
-rw-r--r--libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc34
2 files changed, 37 insertions, 2 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 18720f4..a69d1da 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,8 @@
+2007-01-24 Keith Seitz <keiths@redhat.com>
+
+ * gnu/classpath/jdwp/natVMVirtualMachine.cc
+ (getAllClassMethods): Implement.
+
2007-01-24 Andrew Haley <aph@redhat.com>
* gnu/classpath/natVMStackWalker.cc: Call InitClass everywhere.
diff --git a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
index 84b75ec..afdfbc7 100644
--- a/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
+++ b/libjava/gnu/classpath/jdwp/natVMVirtualMachine.cc
@@ -301,9 +301,39 @@ getClassStatus (MAYBE_UNUSED jclass klass)
JArray<gnu::classpath::jdwp::VMMethod *> *
gnu::classpath::jdwp::VMVirtualMachine::
-getAllClassMethods (MAYBE_UNUSED jclass klass)
+getAllClassMethods (jclass klass)
{
- return NULL;
+ jint count;
+ jmethodID *methods;
+ jvmtiError err = _jdwp_jvmtiEnv->GetClassMethods (klass, &count, &methods);
+ if (err != JVMTI_ERROR_NONE)
+ {
+ char *error;
+ jstring msg;
+ if (_jdwp_jvmtiEnv->GetErrorName (err, &error) != JVMTI_ERROR_NONE)
+ {
+ msg = JvNewStringLatin1 (error);
+ _jdwp_jvmtiEnv->Deallocate ((unsigned char *) error);
+ }
+ else
+ msg = JvNewStringLatin1 ("out of memory");
+
+ using namespace gnu::classpath::jdwp::exception;
+ throw new JdwpInternalErrorException (msg);
+ }
+
+ JArray<VMMethod *> *result
+ = (JArray<VMMethod *> *) JvNewObjectArray (count,
+ &VMMethod::class$, NULL);
+ VMMethod **rmeth = elements (result);
+ for (int i = 0; i < count; ++i)
+ {
+ jlong id = reinterpret_cast<jlong> (methods[i]);
+ rmeth[i] = getClassMethod (klass, id);
+ }
+
+ _jdwp_jvmtiEnv->Deallocate ((unsigned char *) methods);
+ return result;
}
gnu::classpath::jdwp::VMMethod *