Hi,
I've committed the attached patch which cleans up an otherwise
troublesome implementation of VMVirtualMachine.getAllLoadedClasses. I
don't know the reason why this was done this way when it was committed,
but now that I've actually tried to implement it in gcj, I don't like it.
So I'm changing it. :-)
Keith
ChangeLog
2007-02-22 Keith Seitz <[EMAIL PROTECTED]>
* vm/refernece/gnu/classpath/jdwp/VMVirtualMachine.java
(getAllLoadedClassesCount): Remove.
(getAllLoadedClasses): Return a Collection.
* gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
(executeClassesBySignature): VMVirtualMachine.getAllLoadedClasses
now returns Collection.
(executeAllClasses): Likewise.
Get size of return from Colleciton instead of calling
getAllLoadedClassesCount.
Index: gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java
===================================================================
RCS file: /sources/classpath/classpath/gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java,v
retrieving revision 1.8
diff -u -p -r1.8 VirtualMachineCommandSet.java
--- gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java 17 Feb 2006 14:49:06 -0000 1.8
+++ gnu/classpath/jdwp/processor/VirtualMachineCommandSet.java 22 Feb 2007 23:27:34 -0000
@@ -1,6 +1,6 @@
/* VirtualMachineCommandSet.java -- class to implement the VirtualMachine
Command Set
- Copyright (C) 2005, 2006 Free Software Foundation
+ Copyright (C) 2005, 2006, 2007 Free Software Foundation
This file is part of GNU Classpath.
@@ -54,6 +54,7 @@ import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.Properties;
@@ -179,7 +180,8 @@ public class VirtualMachineCommandSet
ArrayList allMatchingClasses = new ArrayList();
// This will be an Iterator over all loaded Classes
- Iterator iter = VMVirtualMachine.getAllLoadedClasses();
+ Collection classes = VMVirtualMachine.getAllLoadedClasses();
+ Iterator iter = classes.iterator ();
while (iter.hasNext())
{
@@ -203,22 +205,11 @@ public class VirtualMachineCommandSet
private void executeAllClasses(ByteBuffer bb, DataOutputStream os)
throws JdwpException, IOException
{
- // Disable garbage collection while we're collecting the info on loaded
- // classes so we some classes don't get collected between the time we get
- // the count and the time we get the list
- //VMVirtualMachine.disableGarbageCollection();
+ Collection classes = VMVirtualMachine.getAllLoadedClasses();
+ os.writeInt(classes.size ());
- int classCount = VMVirtualMachine.getAllLoadedClassesCount();
- os.writeInt(classCount);
-
- // This will be an Iterator over all loaded Classes
- Iterator iter = VMVirtualMachine.getAllLoadedClasses();
- //VMVirtualMachine.enableGarbageCollection();
- int count = 0;
-
- // Note it's possible classes were created since out classCount so make
- // sure we don't write more classes than we told the debugger
- while (iter.hasNext() && count++ < classCount)
+ Iterator iter = classes.iterator ();
+ while (iter.hasNext())
{
Class clazz = (Class) iter.next();
ReferenceTypeId id = idMan.getReferenceTypeId(clazz);
Index: vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java
===================================================================
RCS file: /sources/classpath/classpath/vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java,v
retrieving revision 1.8
diff -u -p -r1.8 VMVirtualMachine.java
--- vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java 2 Feb 2007 14:45:53 -0000 1.8
+++ vm/reference/gnu/classpath/jdwp/VMVirtualMachine.java 22 Feb 2007 23:27:34 -0000
@@ -1,7 +1,7 @@
/* VMVirtualMachine.java -- A reference implementation of a JDWP virtual
machine
- Copyright (C) 2005, 2006 Free Software Foundation
+ Copyright (C) 2005, 2006, 2007 Free Software Foundation
This file is part of GNU Classpath.
@@ -48,7 +48,7 @@ import gnu.classpath.jdwp.util.MethodRes
import java.lang.reflect.Method;
import java.nio.ByteBuffer;
import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.Collection;
/**
* A virtual machine according to JDWP.
@@ -170,15 +170,9 @@ public class VMVirtualMachine
throws JdwpException;
/**
- * Returns a count of the number of loaded classes in the VM
+ * Returns a Collection of all classes loaded in the VM
*/
- public static native int getAllLoadedClassesCount()
- throws JdwpException;
-
- /**
- * Returns an iterator over all the loaded classes in the VM
- */
- public static native Iterator getAllLoadedClasses()
+ public static native Collection getAllLoadedClasses()
throws JdwpException;
/**