code: public Collection<Subscription> getSubscriptionsByMessageType(Class messageType) {
          Set<Subscription> subscriptions = new TreeSet<Subscription>(Subscription.SubscriptionByPriorityDesc);
          ReadLock readLock = readWriteLock.readLock();
          try {
              readLock.lock();
  
              Subscription subscription;
              ArrayList<Subscription> subsPerMessage = subscriptionsPerMessage.get(messageType);
  
              if (subsPerMessage != null) {
                  subscriptions.addAll(subsPerMessage);
              }
  
              Class[] types = ReflectionUtils.getSuperTypes(messageType);
              for (int i=0, n=types.length; i<n; i++) {
                  Class eventSuperType = types[i];
                  
                  ArrayList<Subscription> subs = subscriptionsPerMessage.get(eventSuperType);
                  if (subs != null) {
                      for (int j = 0,m=subs.size(); j<m; j++) {
                          subscription = subs.get(j);
  
                          if (subscription.handlesMessageType(messageType)) {
                              subscriptions.add(subscription);
                          }
                      }
                  }
              }
          }finally{
              readLock.unlock();
          }
          return subscriptions;
      }
docs: Note: never returns null!