decode reads the value v from r, using the JDWP encoding scheme.
(r binary.Reader, v reflect.Value)
| 151 | |
| 152 | // decode reads the value v from r, using the JDWP encoding scheme. |
| 153 | func (c *Connection) decode(r binary.Reader, v reflect.Value) error { |
| 154 | if debug { |
| 155 | defer func() { |
| 156 | if r := recover(); r != nil { |
| 157 | panic(fmt.Errorf("Type %T %v %v", v.Interface(), v.Type().Name(), v.Kind())) |
| 158 | } |
| 159 | }() |
| 160 | } |
| 161 | |
| 162 | switch v.Type() { |
| 163 | case reflect.TypeOf((*Event)(nil)).Elem(): |
| 164 | var kind EventKind |
| 165 | if err := c.decode(r, reflect.ValueOf(&kind)); err != nil { |
| 166 | return err |
| 167 | } |
| 168 | event := kind.event() |
| 169 | v.Set(reflect.ValueOf(event)) |
| 170 | v = v.Elem() |
| 171 | // Continue to decode event body below. |
| 172 | |
| 173 | case reflect.TypeOf((*Value)(nil)).Elem(): |
| 174 | tag := Tag(r.Uint8()) |
| 175 | var ty reflect.Type |
| 176 | switch tag { |
| 177 | case TagArray: |
| 178 | ty = reflect.TypeOf(ArrayID(0)) |
| 179 | case TagByte: |
| 180 | ty = reflect.TypeOf(byte(0)) |
| 181 | case TagChar: |
| 182 | ty = reflect.TypeOf(Char(0)) |
| 183 | case TagObject: |
| 184 | ty = reflect.TypeOf(ObjectID(0)) |
| 185 | case TagFloat: |
| 186 | ty = reflect.TypeOf(float32(0)) |
| 187 | case TagDouble: |
| 188 | ty = reflect.TypeOf(float64(0)) |
| 189 | case TagInt: |
| 190 | ty = reflect.TypeOf(int(0)) |
| 191 | case TagShort: |
| 192 | ty = reflect.TypeOf(int16(0)) |
| 193 | case TagLong: |
| 194 | ty = reflect.TypeOf(int64(0)) |
| 195 | case TagBoolean: |
| 196 | ty = reflect.TypeOf(false) |
| 197 | case TagString: |
| 198 | ty = reflect.TypeOf(StringID(0)) |
| 199 | case TagThread: |
| 200 | ty = reflect.TypeOf(ThreadID(0)) |
| 201 | case TagThreadGroup: |
| 202 | ty = reflect.TypeOf(ThreadGroupID(0)) |
| 203 | case TagClassLoader: |
| 204 | ty = reflect.TypeOf(ClassLoaderID(0)) |
| 205 | case TagClassObject: |
| 206 | ty = reflect.TypeOf(ClassObjectID(0)) |
| 207 | case TagVoid: |
| 208 | v.Set(reflect.New(v.Type()).Elem()) |
| 209 | return r.Error() |
| 210 | default: |
no test coverage detected