Returns the abstract type corresponding to the given type descriptor. @param symbolTable the type table to use to lookup and store type Symbol. @param buffer a string ending with a type descriptor. @param offset the start offset of the type descriptor in buffer. @return the abstract type co
(
final SymbolTable symbolTable, final String buffer, final int offset)
| 272 | * @return the abstract type corresponding to the given type descriptor. |
| 273 | */ |
| 274 | private static int getAbstractTypeFromDescriptor( |
| 275 | final SymbolTable symbolTable, final String buffer, final int offset) { |
| 276 | String internalName; |
| 277 | switch (buffer.charAt(offset)) { |
| 278 | case 'V': |
| 279 | return 0; |
| 280 | case 'Z': |
| 281 | case 'C': |
| 282 | case 'B': |
| 283 | case 'S': |
| 284 | case 'I': |
| 285 | return INTEGER; |
| 286 | case 'F': |
| 287 | return FLOAT; |
| 288 | case 'J': |
| 289 | return LONG; |
| 290 | case 'D': |
| 291 | return DOUBLE; |
| 292 | case 'L': |
| 293 | internalName = buffer.substring(offset + 1, buffer.length() - 1); |
| 294 | return REFERENCE_KIND | symbolTable.addType(internalName); |
| 295 | case '[': |
| 296 | int elementDescriptorOffset = offset + 1; |
| 297 | while (buffer.charAt(elementDescriptorOffset) == '[') { |
| 298 | ++elementDescriptorOffset; |
| 299 | } |
| 300 | int typeValue; |
| 301 | switch (buffer.charAt(elementDescriptorOffset)) { |
| 302 | case 'Z': |
| 303 | typeValue = BOOLEAN; |
| 304 | break; |
| 305 | case 'C': |
| 306 | typeValue = CHAR; |
| 307 | break; |
| 308 | case 'B': |
| 309 | typeValue = BYTE; |
| 310 | break; |
| 311 | case 'S': |
| 312 | typeValue = SHORT; |
| 313 | break; |
| 314 | case 'I': |
| 315 | typeValue = INTEGER; |
| 316 | break; |
| 317 | case 'F': |
| 318 | typeValue = FLOAT; |
| 319 | break; |
| 320 | case 'J': |
| 321 | typeValue = LONG; |
| 322 | break; |
| 323 | case 'D': |
| 324 | typeValue = DOUBLE; |
| 325 | break; |
| 326 | case 'L': |
| 327 | internalName = buffer.substring(elementDescriptorOffset + 1, buffer.length() - 1); |
| 328 | typeValue = REFERENCE_KIND | symbolTable.addType(internalName); |
| 329 | break; |
| 330 | default: |
| 331 | throw new IllegalArgumentException(); |
no test coverage detected