class AssumptionExceptionFactory {

  private static PreferredAssumptionException preferredAssumptionException = Configuration.PREFERRED_ASSUMPTION_EXCEPTION;

  static RuntimeException assumptionNotMet(AssertionError assertionError) throws ReflectiveOperationException {
    Class<?> assumptionExceptionClass = preferredAssumptionException.getAssumptionExceptionClass();
    return buildAssumptionException(assumptionExceptionClass, assertionError);
  }

  @VisibleForTesting
  public static PreferredAssumptionException getPreferredAssumptionException() {
    return preferredAssumptionException;
  }

  static void setPreferredAssumptionException(PreferredAssumptionException preferredAssumptionException) {
    ConfigurationProvider.loadRegisteredConfiguration();
    Objects.requireNonNull(preferredAssumptionException, "preferredAssumptionException must not be null");
    AssumptionExceptionFactory.preferredAssumptionException = preferredAssumptionException;
  }

  private static RuntimeException buildAssumptionException(Class<?> assumptionExceptionClass,
                                                           AssertionError assertionError) throws ReflectiveOperationException {<FILL_FUNCTION_BODY>}

}

    return (RuntimeException) assumptionExceptionClass.getConstructor(String.class, Throwable.class)
                                                      .newInstance("assumption was not met due to: "
                                                                   + assertionError.getMessage(), assertionError);
  
<no_super_class>