// Test case for Issue 1708
// https://github.com/typetools/checker-framework/issues/1708

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@SuppressWarnings("unchecked")
public class Issue1708 {

  static class A<T extends B> {}

  static class B<T1, T2> {}

  static class C {}

  static class D<T1 extends E, T2 extends F> {}

  static class E<T1, T2 extends D> {}

  static class F {}

  static class B1 extends B<C, D> {}

  static class B2 extends B<C, D> {}

  static class B3 extends B<C, D> {}

  public static class Example extends A<B<C, D>> {
    private final List<B<C, D>> f;

    public Example(B1 b1, B2 b2, B3 b3) {
      f = ListUtil.of(b1, b2, b3);
    }
  }

  public static class ListUtil {
    public static <T> List<T> of(T... elems) {
      return new ArrayList<>(Arrays.asList(elems));
    }
  }
}
