public function add_listener( $event_name, $listener, $priority = self::PRIORITY, $accepted_args = self::ACCEPTED ) {

		if ( ! is_callable( $listener, true ) ) {
			throw new InvalidListenerException( '$listener must be callable.' );
		}

		if ( ! is_int( $priority ) ) {
			throw new \InvalidArgumentException( '$priority must be an int.' );
		}

		if ( ! is_int( $accepted_args ) ) {
			throw new \InvalidArgumentException( '$accepted must be an int.' );
		}

		add_filter( $this->get_action_name_for_event( $event_name ), $listener, $priority, $accepted_args );

		return $this;
	}