class SoftThrowableTypeAssert<T extends Throwable> extends ThrowableTypeAssert<T> {

  private final SoftAssertionsProvider softAssertionsProvider;

  /**
   * Default constructor.
   *
   * @param throwableType class representing the target (expected) exception
   * @param softAssertionsProvider the soft assertion instance used later on to proxy {@link ThrowableAssert}
   */
  public SoftThrowableTypeAssert(final Class<? extends T> throwableType, SoftAssertionsProvider softAssertionsProvider) {
    super(throwableType);
    this.softAssertionsProvider = softAssertionsProvider;
  }

  @Override
  protected ThrowableAssertAlternative<T> buildThrowableTypeAssert(T throwable) {
    return new SoftThrowableAssertAlternative<>(throwable, softAssertionsProvider);
  }

  @Override
  protected void checkThrowableType(Throwable throwable) {<FILL_FUNCTION_BODY>}

  @Override
  @CheckReturnValue
  public SoftThrowableTypeAssert<T> describedAs(Description description) {
    this.description = description;
    return this;
  }
}

    try {
      super.checkThrowableType(throwable);
    } catch (AssertionError error) {
      this.softAssertionsProvider.collectAssertionError(error);
    }
  
<methods>public void <init>(Class<? extends T>) ,public ThrowableTypeAssert<T> describedAs(org.assertj.core.description.Description) ,public ThrowableAssertAlternative<T> isThrownBy(org.assertj.core.api.ThrowableAssert.ThrowingCallable) <variables>protected org.assertj.core.description.Description description,protected final non-sealed Class<? extends T> expectedThrowableType