code: private static ProtocolSigFingerprint getSigFingerprint(
        Class <? extends VersionedProtocol> protocol, long serverVersion) {
      String protocolName = protocol.getName();
      synchronized (PROTOCOL_FINGERPRINT_CACHE) {
        ProtocolSigFingerprint sig = PROTOCOL_FINGERPRINT_CACHE.get(protocolName);
        if (sig == null) {
          int[] serverMethodHashcodes = getFingerprints(protocol.getMethods());
          sig = new ProtocolSigFingerprint(
              new ProtocolSignature(serverVersion, serverMethodHashcodes),
              getFingerprint(serverMethodHashcodes));
          PROTOCOL_FINGERPRINT_CACHE.put(protocolName, sig);
        }
        return sig;
      }
    }
docs: Return a protocol's signature and finger print from cache
  
  @param protocol a protocol class
  @param serverVersion protocol version
  @return its signature and finger print