library test.mixin_library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
//   foo() => super.foo() + f();
//                  ^^^
//
import self as self;
import "dart:core" as core;

class Mixin<T extends core::Object? = dynamic> extends core::Object {
  field dynamic x = self::f();
  field dynamic y = null;
  field dynamic z = null;
  covariant-by-class field self::Mixin::T? t = null;
  synthetic constructor •() → self::Mixin<self::Mixin::T%>
    : super core::Object::•()
    ;
  method foo() → dynamic
    return invalid-expression "pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
  foo() => super.foo() + f();
                 ^^^"{<invalid>}.+(self::f());
  method g(covariant-by-class self::Mixin::T% a) → self::Mixin::T?
    return null;
  method h() → dynamic
    return self::V();
  method l() → dynamic
    return self::_private();
  method _privateMethod() → dynamic
    return 49;
  method publicMethod() → dynamic
    return this.{self::Mixin::_privateMethod}(){() → dynamic};
}
static method f() → dynamic
  return 2;
static method V() → dynamic
  return 87;
static method _private() → dynamic
  return 117;
static method foo(dynamic m) → dynamic
  return m{dynamic}._privateMethod();
