/** * 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."); } }
/** * 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(); } }