Beispiel #1
0
 /**
  * Reads the an object of the given Class from the untagged value contained in the ByteBuffer.
  *
  * @param bb contains the Object
  * @param tag TAG of the Value to be read
  * @return the object
  * @throws JdwpException
  * @throws IOException
  */
 public static Object getUntaggedObj(ByteBuffer bb, byte tag) throws JdwpException, IOException {
   switch (tag) {
     case JdwpConstants.Tag.BYTE:
       return new Byte(bb.get());
     case JdwpConstants.Tag.CHAR:
       return new Character(bb.getChar());
     case JdwpConstants.Tag.FLOAT:
       return new Float(bb.getFloat());
     case JdwpConstants.Tag.DOUBLE:
       return new Double(bb.getDouble());
     case JdwpConstants.Tag.INT:
       return new Integer(bb.getInt());
     case JdwpConstants.Tag.LONG:
       return new Long(bb.getLong());
     case JdwpConstants.Tag.SHORT:
       return new Short(bb.getShort());
     case JdwpConstants.Tag.VOID:
       return new byte[0];
     case JdwpConstants.Tag.BOOLEAN:
       return (bb.get() == 0) ? new Boolean(false) : new Boolean(true);
     case JdwpConstants.Tag.STRING:
       return JdwpString.readString(bb);
     case JdwpConstants.Tag.ARRAY:
     case JdwpConstants.Tag.THREAD:
     case JdwpConstants.Tag.OBJECT:
     case JdwpConstants.Tag.THREAD_GROUP:
     case JdwpConstants.Tag.CLASS_LOADER:
     case JdwpConstants.Tag.CLASS_OBJECT:
       // All these cases are ObjectIds
       ObjectId oid = VMIdManager.getDefault().readObjectId(bb);
       return oid.getObject();
     default:
       throw new NotImplementedException("Tag " + tag + " is not implemented.");
   }
 }
  /**
   * Writes the event to the given stream
   *
   * @param outStream the output stream to write the event to
   * @throws IOException
   */
  protected void _writeData(DataOutputStream outStream) throws IOException {
    VMIdManager idm = VMIdManager.getDefault();
    ThreadId tid = (ThreadId) idm.getObjectId(_thread);
    ObjectId oid = idm.getObjectId(_exception);

    tid.write(outStream);
    _location.write(outStream);
    oid.writeTagged(outStream);
    _catchLocation.write(outStream);
  }
Beispiel #3
0
 /**
  * Will write the given object as either a value or an untagged value to the DataOutputStream.
  *
  * @param os write the value here
  * @param obj the Object to write
  * @param tagged true if the value is tagged, false otherwise
  * @throws IOException
  * @throws InvalidFieldException
  */
 private static void writeValue(DataOutputStream os, Object obj, boolean tagged)
     throws IOException, JdwpException {
   Class clazz = obj.getClass();
   if (clazz.isPrimitive()) {
     if (clazz == byte.class) {
       if (tagged) os.writeByte(JdwpConstants.Tag.BYTE);
       os.writeByte(((Byte) obj).byteValue());
     } else if (clazz == char.class) {
       if (tagged) os.writeByte(JdwpConstants.Tag.CHAR);
       os.writeChar(((Character) obj).charValue());
     } else if (clazz == float.class) {
       if (tagged) os.writeByte(JdwpConstants.Tag.FLOAT);
       os.writeFloat(((Float) obj).floatValue());
     } else if (clazz == double.class) {
       if (tagged) os.writeByte(JdwpConstants.Tag.DOUBLE);
       os.writeDouble(((Double) obj).doubleValue());
     } else if (clazz == int.class) {
       if (tagged) os.writeByte(JdwpConstants.Tag.BYTE);
       os.writeInt(((Integer) obj).intValue());
     } else if (clazz == long.class) {
       if (tagged) os.writeByte(JdwpConstants.Tag.LONG);
       os.writeLong(((Long) obj).longValue());
     } else if (clazz == short.class) {
       if (tagged) os.writeByte(JdwpConstants.Tag.SHORT);
       os.writeInt(((Short) obj).shortValue());
     } else if (clazz == void.class) { // A 'void' has no data
       if (tagged) os.writeByte(JdwpConstants.Tag.VOID);
     } else if (clazz == boolean.class) {
       if (tagged) os.writeByte(JdwpConstants.Tag.BOOLEAN);
       os.writeBoolean(((Boolean) obj).booleanValue());
     } else { // This shouldn't be possible
       throw new JdwpInternalErrorException("Field has invalid primitive!");
     }
   } else {
     // Object is an Object, not a primitive type wrapped in an object
     // Write the appropriate tag
     if (tagged) {
       if (clazz.isArray()) os.writeByte(JdwpConstants.Tag.ARRAY);
       else if (obj instanceof String) os.writeByte(JdwpConstants.Tag.STRING);
       else if (obj instanceof Thread) os.writeByte(JdwpConstants.Tag.THREAD);
       else if (obj instanceof ThreadGroup) os.writeByte(JdwpConstants.Tag.THREAD_GROUP);
       else if (obj instanceof ClassLoader) os.writeByte(JdwpConstants.Tag.CLASS_LOADER);
       else if (obj instanceof Class) os.writeByte(JdwpConstants.Tag.CLASS_OBJECT);
       else os.writeByte(JdwpConstants.Tag.OBJECT);
     }
     ObjectId oid = VMIdManager.getDefault().getObjectId(obj);
     oid.write(os);
   }
 }
Beispiel #4
0
 /**
  * Reads an object of the given Class from the untagged value contained in the ByteBuffer.
  *
  * @param bb contains the Object
  * @param type corresponds to the TAG of value to be read
  * @return the resultant object
  * @throws JdwpException
  * @throws IOException
  */
 public static Object getUntaggedObj(ByteBuffer bb, Class type) throws JdwpException, IOException {
   if (type.isPrimitive()) {
     if (type == byte.class) return new Byte(bb.get());
     else if (type == char.class) return new Character(bb.getChar());
     else if (type == float.class) return new Float(bb.getFloat());
     else if (type == double.class) return new Double(bb.getDouble());
     else if (type == int.class) return new Integer(bb.getInt());
     else if (type == long.class) return new Long(bb.getLong());
     else if (type == short.class) return new Short(bb.getShort());
     else if (type == boolean.class) return Boolean.valueOf(bb.get() != 0);
     else if (type == void.class) return new byte[0];
     else { // This shouldn't be possible
       throw new JdwpInternalErrorException("Field has invalid primitive!");
     }
   } else {
     // Field is an object
     ObjectId oid = VMIdManager.getDefault().readObjectId(bb);
     return oid.getObject();
   }
 }