class FactoryBasedNavigableListAssert<SELF extends FactoryBasedNavigableListAssert<SELF, ACTUAL, ELEMENT, ELEMENT_ASSERT>, 
                                             ACTUAL extends List<? extends ELEMENT>, 
                                             ELEMENT, 
                                             ELEMENT_ASSERT extends AbstractAssert<ELEMENT_ASSERT, ELEMENT>>
       extends AbstractListAssert<SELF, ACTUAL, ELEMENT, ELEMENT_ASSERT> {
         
  private AssertFactory<ELEMENT, ELEMENT_ASSERT> assertFactory;

  @SuppressWarnings({ "unchecked", "rawtypes" })
  public static <ACTUAL extends List<? extends ELEMENT>, ELEMENT, ELEMENT_ASSERT extends AbstractAssert<ELEMENT_ASSERT, ELEMENT>>
         FactoryBasedNavigableListAssert<?, ACTUAL, ELEMENT, ELEMENT_ASSERT> assertThat(List<? extends ELEMENT> actual,
                                                                                        AssertFactory<ELEMENT, ELEMENT_ASSERT> assertFactory) {
    return new FactoryBasedNavigableListAssert(actual, FactoryBasedNavigableListAssert.class, assertFactory);
  }
  
// @format:on

  public FactoryBasedNavigableListAssert(ACTUAL actual, Class<?> selfType,
                                         AssertFactory<ELEMENT, ELEMENT_ASSERT> assertFactory) {
    super(actual, selfType);
    this.assertFactory = assertFactory;
  }

  @Override
  public ELEMENT_ASSERT toAssert(ELEMENT value, String description) {
    return assertFactory.createAssert(value).as(description);
  }

  @SuppressWarnings("unchecked")
  @Override
  protected SELF newAbstractIterableAssert(Iterable<? extends ELEMENT> iterable) {<FILL_FUNCTION_BODY>}

}

    checkArgument(iterable instanceof List, "Expecting %s to be a List", iterable);
    return (SELF) new FactoryBasedNavigableListAssert<>((List<? extends ELEMENT>) iterable,
                                                        FactoryBasedNavigableListAssert.class,
                                                        assertFactory);
  
<methods>public transient SELF as(java.lang.String, java.lang.Object[]) ,public SELF as(org.assertj.core.description.Description) ,public SELF contains(ELEMENT, org.assertj.core.data.Index) ,public SELF describedAs(org.assertj.core.description.Description) ,public transient SELF describedAs(java.lang.String, java.lang.Object[]) ,public SELF doesNotContain(ELEMENT, org.assertj.core.data.Index) ,public SELF doesNotHave(Condition<? super ACTUAL>) ,public SELF doesNotHaveSameClassAs(java.lang.Object) ,public SELF has(Condition<? super ELEMENT>, org.assertj.core.data.Index) ,public SELF has(Condition<? super ACTUAL>) ,public SELF hasSameClassAs(java.lang.Object) ,public SELF hasToString(java.lang.String) ,public SELF is(Condition<? super ELEMENT>, org.assertj.core.data.Index) ,public SELF is(Condition<? super ACTUAL>) ,public SELF isEqualTo(java.lang.Object) ,public SELF isExactlyInstanceOf(Class<?>) ,public SELF isIn(Iterable<?>) ,public transient SELF isIn(java.lang.Object[]) ,public SELF isInstanceOf(Class<?>) ,public transient SELF isInstanceOfAny(Class<?>[]) ,public SELF isNot(Condition<? super ACTUAL>) ,public SELF isNotEqualTo(java.lang.Object) ,public SELF isNotExactlyInstanceOf(Class<?>) ,public SELF isNotIn(Iterable<?>) ,public transient SELF isNotIn(java.lang.Object[]) ,public SELF isNotInstanceOf(Class<?>) ,public transient SELF isNotInstanceOfAny(Class<?>[]) ,public SELF isNotNull() ,public transient SELF isNotOfAnyClassIn(Class<?>[]) ,public SELF isNotSameAs(java.lang.Object) ,public transient SELF isOfAnyClassIn(Class<?>[]) ,public SELF isSameAs(java.lang.Object) ,public SELF isSorted() ,public SELF isSortedAccordingTo(Comparator<? super ELEMENT>) ,public transient SELF overridingErrorMessage(java.lang.String, java.lang.Object[]) ,public SELF satisfies(Consumer<? super ELEMENT>, org.assertj.core.data.Index) ,public SELF usingComparator(Comparator<? super ACTUAL>) ,public SELF usingComparator(Comparator<? super ACTUAL>, java.lang.String) ,public SELF usingDefaultComparator() ,public SELF usingDefaultElementComparator() ,public SELF usingElementComparator(Comparator<? super ELEMENT>) ,public transient SELF withFailMessage(java.lang.String, java.lang.Object[]) ,public SELF withThreadDumpOnError() <variables>org.assertj.core.internal.Lists lists