code: @SuppressWarnings("unchecked")
      protected final <E extends Event> EventHandler<E> getHandler(final EventType<E> eventType) throws CoreException {
  
          EventType<?> temp = eventType;
  
          EventHandler<E> handler = null;
  
          while (temp != null && handler == null) {
              handler = (EventHandler<E>) this.eventHandlerMap.get(temp);
              temp = temp.getSuperType();
          }
  
          // // Check supertype (ANY)
          // if (handler == null) {
          //
          // handler = (EventHandler<E>) this.eventHandlerMap.get();
          // }
  
          // Check if the handler has been created or not
          if (handler == null) {
  
              for (final EventAdapter.Linker linker : EventAdapter.Linker.values()) {
                  if (isEventType(eventType, linker.eventType())) {
                      handler = buildEventHandler(linker.adapterClass(), (Class<? extends EventHandler<E>>) linker.handlerClass());
                  }
              }
  
              if (handler != null) {
                  // store the handler
                  this.eventHandlerMap.put(eventType, handler);
              }
          }
          return handler;
      }
docs: Return an {@link EventHandler}.
  
  @param eventType the event type of the handler we want to return
  
  @return the right event handler
  
  @param <E> the Event type to manage
  
  @throws CoreException an exception if the current class doesn't implement the right EventAdapter interface.