/*
 * Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 * for details. All rights reserved. Use of this source code is governed by a
 * BSD-style license that can be found in the LICENSE file.
 */
/**
 * @assertion An interface has a set of direct superinterfaces.
 * An interface J is a superinterface of an interface I iff either J is a
 * direct superinterface of I or J is a superinterface of a direct
 * superinterface of I.
 * @description Checks that an interface can declare generic and non-generic
 * direct superinterfaces or not declare any.
 * @author vasya
 */

abstract class J {}
abstract class I implements J {}

abstract class J1 {}
abstract class J2 implements J1 {}
abstract class J3 implements J2 {}
abstract class I1 implements J1, J2, J3 {}
abstract class I2 implements J3, J2, J1 {}

abstract class K<S> {}
abstract class L<S> implements K<S> {}

abstract class A<S, T> {}
abstract class B<S, T> implements A<T, S> {}
abstract class C<Q, R, S> implements A<Q, S> {}
abstract class D<Q> implements A<int, Q>, J, I {}

main() {
  I? i = null;
  I1? i1 = null;
  I2? i2 = null;
  B<String, int>? b = null;
  C<List, String, num>? c = null;
  D<String>? d = null;
}
