// Errors:
//
// pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
//   foo() => super.foo() + f();
//                  ^^^

library test.mixin_library;
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;
  generic-covariant-impl field self::Mixin::T t = null;
  synthetic constructor •() → void
    : super core::Object::•()
    ;
  method foo() → dynamic
    return super.foo().+(self::f());
  method g(generic-covariant-impl 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}();
}
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._privateMethod();
