Ok, fixed that, I think this is probably the better way to do it, I hadn't though about when the event would get passed from the VM and this will work both ways.

Kyle

Keith Seitz wrote:
Some questions about this...

Kyle Galloway wrote:

+  /**
+   * Constructs a new <code>ClassUnloadEvent</code>
+   * +   * @param clazz class which was prepared
+   */
+  public ClassUnloadEvent(Class clazz)
+  {
+    super(JdwpConstants.EventKind.CLASS_UNLOAD);
+    _class = clazz;
+  }

Do you intend for this event to be generated just before the class is unloaded or just after? If after, the class's Class object will be gone, and this constructor cannot be used. If the constructor is going to take a Class argument, it should be documented that you expect this notification to happen just before the type is unloaded. [more on this later]

+  /**
+   * Writes the event to the given stream
+   * +   * @param outStream the output stream to write the event to
+   */
+ protected void _writeData(DataOutputStream outStream) + throws IOException
+  {
+    VMIdManager idm = VMIdManager.getDefault();
+    ReferenceTypeId rid = idm.getReferenceTypeId(_class);
+
+    rid.writeTagged(outStream);
+ JdwpString.writeString(outStream, Signature.computeClassSignature(_class));
+  }
+
+}

I don't think we output the reference type id -- just the type's signature.

Back to the notification before/after the "unload" issue: I think we're probably safest just getting the type signature (as a String) from the VM instead of the Class object. That way, it won't matter whether the class has actually been unloaded or whether it is about to be.

Keith

Index: ClassUnloadEvent.java
===================================================================
RCS file: ClassUnloadEvent.java
diff -N ClassUnloadEvent.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ClassUnloadEvent.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,96 @@
+/* ClassUnloadEvent.java -- event generated when a class is unloaded
+ Copyright (C) 2006 Free Software Foundation, Inc.
+
+ This file is part of GNU Classpath.
+
+ GNU Classpath is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU Classpath is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Classpath; see the file COPYING.  If not, write to the
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA.
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library.  Thus, the terms and
+ conditions of the GNU General Public License cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module.  An independent module is a module which is not derived from
+ or based on this library.  If you modify this library, you may extend
+ this exception to your version of the library, but you are not
+ obligated to do so.  If you do not wish to do so, delete this
+ exception statement from your version. */
+
+
+package gnu.classpath.jdwp.event;
+
+import gnu.classpath.jdwp.JdwpConstants;
+import gnu.classpath.jdwp.VMIdManager;
+import gnu.classpath.jdwp.util.JdwpString;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+/**
+ * "Notification of a class unload in the target VM" -- JDWP 1.4.2
+ * 
+ * @author Kyle Galloway ([EMAIL PROTECTED])
+ */
+public class ClassUnloadEvent
+    extends Event
+{
+  //signature directly from VM
+  private String _signature;
+
+  /**
+   * Constructs a new <code>ClassUnloadEvent</code>
+   * 
+   * @param signature the signature reported from the VM
+   */
+  public ClassUnloadEvent(String signature)
+  {
+    super(JdwpConstants.EventKind.CLASS_UNLOAD);
+    _signature = signature;
+  }
+
+  /**
+   * Returns a specific filtering parameter for this event. Class is the only
+   * valid type.
+   * 
+   * @param type the type of parameter desired
+   * @returns the desired parameter or <code>null</code>
+   */
+  public Object getParameter(int type)
+  {
+
+    return null;
+  }
+
+  /**
+   * Writes the event to the given stream
+   * 
+   * @param outStream the output stream to write the event to
+   */
+  protected void _writeData(DataOutputStream outStream) 
+    throws IOException
+  {
+    VMIdManager idm = VMIdManager.getDefault();
+
+    JdwpString.writeString(outStream, _signature);
+  }
+
+}

Reply via email to