public void dump(DumpContext ctx, int parameterizedJmfType) throws IOException {
    final CodecRegistry codecRegistry = ctx.getSharedContext().getCodecRegistry();

    int jmfType = codecRegistry.extractJmfType(parameterizedJmfType);

    if (jmfType != JMF_ARRAY_LIST)
      throw newBadTypeJMFEncodingException(jmfType, parameterizedJmfType);

    int indexOrLength = readIntData(ctx, (parameterizedJmfType >> 5) & 0x03, false);
    if ((parameterizedJmfType & 0x80) != 0) {
      String v = (String) ctx.getSharedObject(indexOrLength);
      ctx.indentPrintLn("<" + v + "@" + indexOrLength + ">");
      return;
    }

    String v = ArrayList.class.getName() + "[" + indexOrLength + "]";
    int indexOfStoredObject = ctx.addSharedObject(v);
    ctx.indentPrintLn(v + "@" + indexOfStoredObject + " {");
    ctx.incrIndent(1);

    for (int index = 0; index < indexOrLength; index++) {
      parameterizedJmfType = ctx.safeRead();
      jmfType = codecRegistry.extractJmfType(parameterizedJmfType);
      StandardCodec<?> codec = codecRegistry.getCodec(jmfType);

      if (codec == null) throw new JMFEncodingException("No codec for JMF type: " + jmfType);

      codec.dump(ctx, parameterizedJmfType);
    }

    ctx.incrIndent(-1);
    ctx.indentPrintLn("}");
  }