code: private ServerReflectionIndex updateIndexIfNecessary() {
      synchronized (lock) {
        if (serverReflectionIndex == null) {
          serverReflectionIndex =
              new ServerReflectionIndex(server.getImmutableServices(), server.getMutableServices());
          return serverReflectionIndex;
        }
  
        Set<FileDescriptor> serverFileDescriptors = new HashSet<>();
        Set<String> serverServiceNames = new HashSet<>();
        List<ServerServiceDefinition> serverMutableServices = server.getMutableServices();
        for (ServerServiceDefinition mutableService : serverMutableServices) {
          io.grpc.ServiceDescriptor serviceDescriptor = mutableService.getServiceDescriptor();
          if (serviceDescriptor.getSchemaDescriptor() instanceof ProtoFileDescriptorSupplier) {
            String serviceName = serviceDescriptor.getName();
            FileDescriptor fileDescriptor =
                ((ProtoFileDescriptorSupplier) serviceDescriptor.getSchemaDescriptor())
                    .getFileDescriptor();
            serverFileDescriptors.add(fileDescriptor);
            serverServiceNames.add(serviceName);
          }
        }
  
        // Replace the index if the underlying mutable services have changed. Check both the file
        // descriptors and the service names, because one file descriptor can define multiple
        // services.
        FileDescriptorIndex mutableServicesIndex = serverReflectionIndex.getMutableServicesIndex();
        if (!mutableServicesIndex.getServiceFileDescriptors().equals(serverFileDescriptors)
            || !mutableServicesIndex.getServiceNames().equals(serverServiceNames)) {
          serverReflectionIndex =
              new ServerReflectionIndex(server.getImmutableServices(), serverMutableServices);
        }
  
        return serverReflectionIndex;
      }
    }
docs: Checks for updates to the server's mutable services and updates the index if any changes are
  detected. A change is any addition or removal in the set of file descriptors attached to the
  mutable services or a change in the service names.
  
  @return The (potentially updated) index.