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;
  field self::Mixin::T t = null;
  constructor •() → void
    : super core::Object::•()
    ;
  method foo() → dynamic
    return this.{=core::Object::noSuchMethod}(new core::_InvocationMirror::•("foo", <dynamic>[1, 1].toList(growable: false), <dynamic>[this].toList(growable: false), true)).+(self::f());
  method g(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._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();
