class NotificationBus {

    protected boolean isNotificationRegistered(Class<?> notification) {
        Lock lock = rwLock.readLock();
        try {
            lock.lock();

            if (registeredNotifications.containsKey(notification)) {
                return true;
            }

            Boolean result = cacheOfImpliedNotifications.get(notification);
            if (result != null) {
                return result;
            }
        } finally {
            lock.unlock();
        }

        // Has to be done outside readLock as can't upgrade read to write
        return isParentOfNotificationRegistered(notification);
    }

    protected  NotificationBus(Class<N> notificationClass);

}