Source for gnu.classpath.jdwp.event.ClassPrepareEvent

   1: /* ClassPrepareEvent.java -- An event specifying that a class has been
   2:    prepared by the virtual machine
   3:    Copyright (C) 2005 Free Software Foundation
   4: 
   5: This file is part of GNU Classpath.
   6: 
   7: GNU Classpath is free software; you can redistribute it and/or modify
   8: it under the terms of the GNU General Public License as published by
   9: the Free Software Foundation; either version 2, or (at your option)
  10: any later version.
  11: 
  12: GNU Classpath is distributed in the hope that it will be useful, but
  13: WITHOUT ANY WARRANTY; without even the implied warranty of
  14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15: General Public License for more details.
  16: 
  17: You should have received a copy of the GNU General Public License
  18: along with GNU Classpath; see the file COPYING.  If not, write to the
  19: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  20: 02110-1301 USA.
  21: 
  22: Linking this library statically or dynamically with other modules is
  23: making a combined work based on this library.  Thus, the terms and
  24: conditions of the GNU General Public License cover the whole
  25: combination.
  26: 
  27: As a special exception, the copyright holders of this library give you
  28: permission to link this library with independent modules to produce an
  29: executable, regardless of the license terms of these independent
  30: modules, and to copy and distribute the resulting executable under
  31: terms of your choice, provided that you also meet, for each linked
  32: terms of your choice, provided that you also meet, for each linked
  33: independent module, the terms and conditions of the license of that
  34: module.  An independent module is a module which is not derived from
  35: or based on this library.  If you modify this library, you may extend
  36: this exception to your version of the library, but you are not
  37: obligated to do so.  If you do not wish to do so, delete this
  38: exception statement from your version. */
  39: 
  40: 
  41: package gnu.classpath.jdwp.event;
  42: 
  43: import gnu.classpath.jdwp.JdwpConstants;
  44: import gnu.classpath.jdwp.VMIdManager;
  45: import gnu.classpath.jdwp.id.ReferenceTypeId;
  46: import gnu.classpath.jdwp.id.ThreadId;
  47: import gnu.classpath.jdwp.util.JdwpString;
  48: import gnu.classpath.jdwp.util.Signature;
  49: 
  50: import java.io.DataOutputStream;
  51: import java.io.IOException;
  52: 
  53: /**
  54:  * "Notification of a class prepare in the target VM. See the JVM
  55:  * specification for a definition of class preparation. Class prepare
  56:  * events are not generated for primtiive classes (for example,
  57:  * <code>java.lang.Integer.TYPE</code>)." -- JDWP 1.4.2
  58:  *
  59:  * @author Keith Seitz  (keiths@redhat.com)
  60:  */
  61: public class ClassPrepareEvent
  62:   extends Event
  63: {
  64:   // The thread in which this event occurred
  65:   private Thread _thread;
  66: 
  67:   // The class that was prepared
  68:   private Class _class;
  69: 
  70:   // Prepare flags
  71:   private int _status;
  72: 
  73:   /**
  74:    * Class has been verified
  75:    */
  76:   public static final int STATUS_VERIFIED
  77:       = JdwpConstants.ClassStatus.VERIFIED;
  78: 
  79:   /**
  80:    * Class has been prepared
  81:    */
  82:   public static final int STATUS_PREPARED
  83:       = JdwpConstants.ClassStatus.PREPARED;
  84: 
  85:   /**
  86:    * Class has been initialized
  87:    */
  88:   public static final int STATUS_INITIALIZED
  89:       = JdwpConstants.ClassStatus.INITIALIZED;
  90: 
  91:   /**
  92:    * Error preparing class
  93:    */
  94:   public static final int STATUS_ERROR
  95:       = JdwpConstants.ClassStatus.ERROR;
  96: 
  97:   /**
  98:    * Constructs a new <code>ClassPrepareEvent</code>
  99:    *
 100:    * @param thread  thread in which event occurred
 101:    * @param clazz   class which was prepared
 102:    * @param flags   prepare status flags
 103:    */
 104:   public ClassPrepareEvent (Thread thread, Class clazz, int flags)
 105:   {
 106:     super (JdwpConstants.EventKind.CLASS_PREPARE);
 107:     _thread = thread;
 108:     _class = clazz;
 109:     _status = flags;
 110:   }
 111: 
 112:   /**
 113:    * Returns a specific filtering parameter for this event.
 114:    * Valid types are thread and class.
 115:    *
 116:    * @param type  the type of parameter desired
 117:    * @returns the desired parameter or <code>null</code>
 118:    */
 119:   public Object getParameter (int type)
 120:   {
 121:     if (type == EVENT_THREAD)
 122:       return _thread;
 123:     else if (type == EVENT_CLASS)
 124:       return _class;
 125: 
 126:     return null;
 127:   }
 128: 
 129:   /**
 130:    * Writes the event to the given stream
 131:    *
 132:    * @param outStream  the output stream to write the event to
 133:    */
 134:   protected void _writeData (DataOutputStream outStream)
 135:     throws IOException
 136:   {
 137:     VMIdManager idm = VMIdManager.getDefault();
 138:     ThreadId tid = (ThreadId) idm.getObjectId (_thread);
 139:     ReferenceTypeId rid = idm.getReferenceTypeId (_class);
 140: 
 141:     tid.write (outStream);
 142:     rid.writeTagged (outStream);
 143:     JdwpString.writeString (outStream,
 144:                             Signature.computeClassSignature (_class));
 145:     outStream.writeInt (_status);
 146:   }
 147: }