code: public <T extends MessageLite> T readMessage(
        final Parser<T> parser,
        final ExtensionRegistryLite extensionRegistry)
        throws IOException {
      int length = readRawVarint32();
      if (recursionDepth >= recursionLimit) {
        throw InvalidProtocolBufferException.recursionLimitExceeded();
      }
      final int oldLimit = pushLimit(length);
      ++recursionDepth;
      T result = parser.parsePartialFrom(this, extensionRegistry);
      checkLastTagWas(0);
      --recursionDepth;
      popLimit(oldLimit);
      return result;
    }
docs: Read an embedded message field value from the stream.