@SuppressWarnings("unchecked") private static Object parseArray(Class<?> arrayType,ByteBuffer buf,ConstantPool constPool,Class<?> container){
  int length=buf.getShort() & 0xFFFF;
  Class<?> componentType=arrayType.getComponentType();
  if (componentType == byte.class) {
    return parseByteArray(length,buf,constPool);
  }
 else   if (componentType == char.class) {
    return parseCharArray(length,buf,constPool);
  }
 else   if (componentType == double.class) {
    return parseDoubleArray(length,buf,constPool);
  }
 else   if (componentType == float.class) {
    return parseFloatArray(length,buf,constPool);
  }
 else   if (componentType == int.class) {
    return parseIntArray(length,buf,constPool);
  }
 else   if (componentType == long.class) {
    return parseLongArray(length,buf,constPool);
  }
 else   if (componentType == short.class) {
    return parseShortArray(length,buf,constPool);
  }
 else   if (componentType == boolean.class) {
    return parseBooleanArray(length,buf,constPool);
  }
 else   if (componentType == String.class) {
    return parseStringArray(length,buf,constPool);
  }
 else   if (componentType == Class.class) {
    return parseClassArray(length,buf,constPool,container);
  }
 else   if (componentType.isEnum()) {
    return parseEnumArray(length,(Class<? extends Enum<?>>)componentType,buf,constPool,container);
  }
 else {
    assert componentType.isAnnotation();
    return parseAnnotationArray(length,(Class<? extends Annotation>)componentType,buf,constPool,container);
  }
}

@ SuppressWarnings ( "unchecked" ) private static Object parseArray ( Class < ? > arrayType , ByteBuffer buf , ConstantPool constPool , Class < ? > container ) { int length = buf . getShort ( ) & 0xFFFF ; Class < ? > componentType = arrayType . getComponentType ( ) ; if ( componentType == byte . class ) { return parseByteArray ( length , buf , constPool ) ; } else if ( componentType == char . class ) { return parseCharArray ( length , buf , constPool ) ; } else if ( componentType == double . class ) { return parseDoubleArray ( length , buf , constPool ) ; } else if ( componentType == float . class ) { return parseFloatArray ( length , buf , constPool ) ; } else if ( componentType == int . class ) { return parseIntArray ( length , buf , constPool ) ; } else if ( componentType == long . class ) { return parseLongArray ( length , buf , constPool ) ; } else if ( componentType == short . class ) { return parseShortArray ( length , buf , constPool ) ; } else if ( componentType == boolean . class ) { return parseBooleanArray ( length , buf , constPool ) ; } else if ( componentType == String . class ) { return parseStringArray ( length , buf , constPool ) ; } else if ( componentType == Class . class ) { return parseClassArray ( length , buf , constPool , container ) ; } else if ( componentType . isEnum ( ) ) { return parseEnumArray ( length , ( Class < ? extends Enum < ? > > ) componentType , buf , constPool , container ) ; } else { assert componentType . isAnnotation ( ) ; return parseAnnotationArray ( length , ( Class < ? extends Annotation > ) componentType , buf , constPool , container ) ; } }
parses the array value at the current position in the specified byte buffer , resolving constant references in the specified constant pool . the cursor of the byte buffer must point to an array value struct as specified in the runtimevisibleannotations_attribute : { u2 num_values ; member_value values [ num_values ] ; } array_value ; if the array values do not match arraytype , an annotationtypemismatchexceptionproxy will be returned .
