docs: private void publishEvent(Collection<EventRegistration> registrations, Address caller, String mapName,
                                EntryEventType eventType, Data dataKey, Object oldValue, Object newValue,
                                Object mergingValue) {
          EntryEventDataCache eventDataCache = filteringStrategy.getEntryEventDataCache();
  
          int orderKey = pickOrderKey(dataKey);
  
          for (EventRegistration registration : registrations) {
              EventFilter filter = registration.getFilter();
              // a filtering strategy determines whether the event must be published on the specific
              // event registration and may alter the type of event to be published
              int eventTypeForPublishing = filteringStrategy.doFilter(filter, dataKey, oldValue, newValue, eventType, mapName);
              if (eventTypeForPublishing == FILTER_DOES_NOT_MATCH) {
                  continue;
              }
  
              EntryEventData eventDataToBePublished = eventDataCache.getOrCreateEventData(mapName, caller, dataKey,
                      newValue, oldValue, mergingValue, eventTypeForPublishing, isIncludeValue(filter));
              eventService.publishEvent(SERVICE_NAME, registration, eventDataToBePublished, orderKey);
          }
  
          // if events were generated, execute the post-publish hook on each one
          if (!eventDataCache.isEmpty()) {
              postPublishEvent(eventDataCache.eventDataIncludingValues(), eventDataCache.eventDataExcludingValues());
          }
      }