// Copyright (c) 2013, 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.

// @dart = 2.9

class S0 {}

class S1 extends Object {}

class S2 extends S0 {}

class M0 {}

class M1 extends Object {}

mixin M2 on M0 {}

class C00 = S0 with M0;
class C01 = S0 with M1;
class C02 = S0 with M2;
//    ^
// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
//                  ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
class C03 = S0 with M0, M1;
class C04 = S0 with M0, M2;
class C05 = S0 with M2, M0;
//    ^
// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
//                  ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
class C06 = S0 with M1, M2;
//    ^
// [cfe] '_C06&S0&M1' doesn't implement 'M0' so it can't be used with 'M2'.
//                      ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
class C07 = S0 with M2, M1;
//    ^
// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
//                  ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class C10 = S1 with M0;
class C11 = S1 with M1;
class C12 = S1 with M2;
//    ^
// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
//                  ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
class C13 = S1 with M0, M1;
class C14 = S1 with M0, M2;
class C15 = S1 with M2, M0;
//    ^
// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
//                  ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
class C16 = S1 with M1, M2;
//    ^
// [cfe] '_C16&S1&M1' doesn't implement 'M0' so it can't be used with 'M2'.
//                      ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
class C17 = S1 with M2, M1;
//    ^
// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
//                  ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class C20 = S2 with M0;
class C21 = S2 with M1;
class C22 = S2 with M2;
//    ^
// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
//                  ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
class C23 = S2 with M0, M1;
class C24 = S2 with M0, M2;
class C25 = S2 with M2, M0;
//    ^
// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
//                  ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
class C26 = S2 with M1, M2;
//    ^
// [cfe] '_C26&S2&M1' doesn't implement 'M0' so it can't be used with 'M2'.
//                      ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE
class C27 = S2 with M2, M1;
//    ^
// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
//                  ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D00 extends S0 with M0 {}

class D01 extends S0 with M1 {}

class D02 extends S0 with M2 {}
//    ^
// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
//                        ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D03 extends S0 with M0, M1 {}

class D04 extends S0 with M0, M2 {}

class D05 extends S0 with M2, M0 {}
//    ^
// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
//                        ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D06 extends S0 with M1, M2 {}
//    ^
// [cfe] '_D06&S0&M1' doesn't implement 'M0' so it can't be used with 'M2'.
//                            ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D07 extends S0 with M2, M1 {}
//    ^
// [cfe] 'S0' doesn't implement 'M0' so it can't be used with 'M2'.
//                        ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D10 extends S1 with M0 {}

class D11 extends S1 with M1 {}

class D12 extends S1 with M2 {}
//    ^
// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
//                        ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D13 extends S1 with M0, M1 {}

class D14 extends S1 with M0, M2 {}

class D15 extends S1 with M2, M0 {}
//    ^
// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
//                        ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D16 extends S1 with M1, M2 {}
//    ^
// [cfe] '_D16&S1&M1' doesn't implement 'M0' so it can't be used with 'M2'.
//                            ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D17 extends S1 with M2, M1 {}
//    ^
// [cfe] 'S1' doesn't implement 'M0' so it can't be used with 'M2'.
//                        ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D20 extends S2 with M0 {}

class D21 extends S2 with M1 {}

class D22 extends S2 with M2 {}
//    ^
// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
//                        ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D23 extends S2 with M0, M1 {}

class D24 extends S2 with M0, M2 {}

class D25 extends S2 with M2, M0 {}
//    ^
// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
//                        ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D26 extends S2 with M1, M2 {}
//    ^
// [cfe] '_D26&S2&M1' doesn't implement 'M0' so it can't be used with 'M2'.
//                            ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

class D27 extends S2 with M2, M1 {}
//    ^
// [cfe] 'S2' doesn't implement 'M0' so it can't be used with 'M2'.
//                        ^^
// [analyzer] COMPILE_TIME_ERROR.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE

main() {
  new C00();
  new C01();
  new C03();
  new C04();

  new C10();
  new C11();
  new C13();
  new C14();

  new C20();
  new C21();
  new C23();
  new C24();

  new D00();
  new D01();
  new D03();
  new D04();

  new D10();
  new D11();
  new D13();
  new D14();

  new D20();
  new D21();
  new D23();
  new D24();
}
