library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
//   new NamedMixin1(0);
//                   ^
//
// pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
//   new NamedMixin2(0);
//                   ^
//
import self as self;
import "dart:core" as core;

abstract class SuperClass1 extends core::Object {
  final field core::String value;
  constructor •(core::String value) → self::SuperClass1
    : self::SuperClass1::value = value, super core::Object::•()
    ;
}
abstract class SuperClass2 extends core::Object {
  final field core::String value;
  constructor •(core::String i) → self::SuperClass2
    : self::SuperClass2::value = i, super core::Object::•()
    ;
}
class Mixin extends core::Object {
  synthetic constructor •() → self::Mixin
    : super core::Object::•()
    ;
}
class NamedMixin1 extends self::SuperClass1 implements self::Mixin /*isEliminatedMixin*/  {
  synthetic constructor •(core::String value) → self::NamedMixin1
    : super self::SuperClass1::•(value)
    ;
}
class NamedMixin2 extends self::SuperClass2 implements self::Mixin /*isEliminatedMixin*/  {
  synthetic constructor •(core::String i) → self::NamedMixin2
    : super self::SuperClass2::•(i)
    ;
}
static method main() → void {
  new self::NamedMixin1::•("");
  new self::NamedMixin2::•("");
}
static method errors() → dynamic {
  new self::NamedMixin1::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:28:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
  new NamedMixin1(0);
                  ^" in 0 as{TypeError,ForNonNullableByDefault} core::String);
  new self::NamedMixin2::•(invalid-expression "pkg/front_end/testcases/general/issue40428.dart:29:19: Error: The argument type 'int' can't be assigned to the parameter type 'String'.
  new NamedMixin2(0);
                  ^" in 0 as{TypeError,ForNonNullableByDefault} core::String);
}
