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;
 
   /**

Reply via email to