// Copyright (c) 2018, 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 If more than one super-constraint interface declares a member
/// with  the same name, at least one of those members is more specific than the
/// rest,  and this is the unique signature that super-invocations are allowed
/// to invoke.
///
/// @description Checks that if more than one super-constraint interface declares
/// a member with the same name and there is no member that is more specific
/// than the rest, then this is a compile error. Test type parameters
/// @author sgrekhov@unipro.ru


class S {}
class T {}
class X extends S {}
class Y extends T {}

class I {}
class J {}

abstract class B<T1> {
  T1 get b1;
}
abstract class C<T1> {
  T1 get b1;
}

mixin M<X extends S, Y extends T> on B<X>, C<Y> implements I, J {
//    ^
// [analyzer] unspecified
// [cfe] unspecified
}

class A implements B<S>, C<T> {
  T get b1 => new T();
//      ^^
// [analyzer] unspecified
// [cfe] unspecified
}

class MA extends A with M<S, T> {
//    ^
// [cfe] unspecified
}

main() {
  new MA();
}
