library test.mixin_library;
import self as self;
import "dart:core" as core;

class Mixin<T extends core::Object> extends core::Object {
  field dynamic x = self::f();
  field dynamic y = null;
  field dynamic z = null;
  generic-covariant-impl generic-covariant-interface 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 generic-covariant-interface 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 const field dynamic #errors = const <dynamic>["pkg/front_end/testcases/rasta/mixin_library.dart:16:18: Error: Superclass has no method named 'foo'.
  foo() => super.foo() + f();
                 ^^^"]/* from null */;
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();
