docs: private boolean parametersMatch(Type observedParameter, Type eventParameter) {
          if (Types.isActualType(observedParameter) && Types.isActualType(eventParameter)) {
              /*
               * the observed event type parameter is an actual type with identical raw type to the event type
               * parameter, and, if the type is parameterized, the event type parameter is assignable to the
               * observed event type parameter according to these rules, or
               */
              return matches(observedParameter, eventParameter);
          }
          if (observedParameter instanceof WildcardType && eventParameter instanceof WildcardType) {
              /*
               * both the observed event type parameter and the event type parameter are wildcards, and the event type parameter is assignable to the observed event
               * type
               */
              return CovariantTypes.isAssignableFrom(observedParameter, eventParameter);
          }
          if (observedParameter instanceof WildcardType) {
              /*
               * the observed event type parameter is a wildcard and the event type parameter is assignable
               * to the upper bound, if any, of the wildcard and assignable from the lower bound, if any, of the
               * wildcard, or
               */
              return parametersMatch((WildcardType) observedParameter, eventParameter);
          }
          if (observedParameter instanceof TypeVariable<?>) {
              /*
               * the observed event type parameter is a type variable and the event type parameter is assignable
               * to the upper bound, if any, of the type variable.
               */
              return parametersMatch((TypeVariable<?>) observedParameter, eventParameter);
          }
          return false;
      }