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

import "org-dartlang-testcase:///mixin_library.dart" show Mixin;

class Super<S extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Super<self::Super::S*>*
    ;
  method foo() → dynamic
    ;
  method f() → dynamic
    ;
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
abstract class _C&Super&Mixin<V extends core::Object* = dynamic> = self::Super<self::_C&Super&Mixin::V*> with mix::Mixin<self::_C&Super&Mixin::V*> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V*>*
    : super self::Super::•()
    ;
  mixin-super-stub get x() → dynamic
    return super.{mix::Mixin::x};
  mixin-super-stub set x(dynamic value) → void
    return super.{mix::Mixin::x} = value;
  mixin-super-stub get y() → dynamic
    return super.{mix::Mixin::y};
  mixin-super-stub set y(dynamic value) → void
    return super.{mix::Mixin::y} = value;
  mixin-super-stub get z() → dynamic
    return super.{mix::Mixin::z};
  mixin-super-stub set z(dynamic value) → void
    return super.{mix::Mixin::z} = value;
  mixin-super-stub get t() → self::_C&Super&Mixin::V*
    return super.{mix::Mixin::t};
  mixin-super-stub set t(covariant-by-class self::_C&Super&Mixin::V* value) → void
    return super.{mix::Mixin::t} = value;
  mixin-super-stub method foo() → dynamic
    return super.{mix::Mixin::foo}();
  mixin-super-stub method g(covariant-by-class self::_C&Super&Mixin::V* a) → self::_C&Super&Mixin::V*
    return super.{mix::Mixin::g}(a);
  mixin-super-stub method h() → dynamic
    return super.{mix::Mixin::h}();
  mixin-super-stub method l() → dynamic
    return super.{mix::Mixin::l}();
  mixin-super-stub method _privateMethod() → dynamic
    return super.{mix::Mixin::_privateMethod}();
  mixin-super-stub method publicMethod() → dynamic
    return super.{mix::Mixin::publicMethod}();
}
class C<V extends core::Object* = dynamic> extends self::_C&Super&Mixin<self::C::V*> {
  synthetic constructor •() → self::C<self::C::V*>*
    ;
}
abstract class _D&Super&Mixin = self::Super<dynamic> with mix::Mixin<dynamic> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_D&Super&Mixin*
    : super self::Super::•()
    ;
  mixin-super-stub get x() → dynamic
    return super.{mix::Mixin::x};
  mixin-super-stub set x(dynamic value) → void
    return super.{mix::Mixin::x} = value;
  mixin-super-stub get y() → dynamic
    return super.{mix::Mixin::y};
  mixin-super-stub set y(dynamic value) → void
    return super.{mix::Mixin::y} = value;
  mixin-super-stub get z() → dynamic
    return super.{mix::Mixin::z};
  mixin-super-stub set z(dynamic value) → void
    return super.{mix::Mixin::z} = value;
  mixin-super-stub get t() → dynamic
    return super.{mix::Mixin::t};
  mixin-super-stub set t(covariant-by-class dynamic value) → void
    return super.{mix::Mixin::t} = value;
  mixin-super-stub method foo() → dynamic
    return super.{mix::Mixin::foo}();
  mixin-super-stub method g(covariant-by-class dynamic a) → dynamic
    return super.{mix::Mixin::g}(a);
  mixin-super-stub method h() → dynamic
    return super.{mix::Mixin::h}();
  mixin-super-stub method l() → dynamic
    return super.{mix::Mixin::l}();
  mixin-super-stub method _privateMethod() → dynamic
    return super.{mix::Mixin::_privateMethod}();
  mixin-super-stub method publicMethod() → dynamic
    return super.{mix::Mixin::publicMethod}();
}
class D extends self::_D&Super&Mixin {
  synthetic constructor •() → self::D*
    ;
}
class C2<V extends core::Object* = dynamic> = self::Super<self::C2::V*> with mix::Mixin<self::C2::V*> {
  synthetic constructor •() → self::C2<self::C2::V*>*
    : super self::Super::•()
    ;
  mixin-super-stub get x() → dynamic
    return super.{mix::Mixin::x};
  mixin-super-stub set x(dynamic value) → void
    return super.{mix::Mixin::x} = value;
  mixin-super-stub get y() → dynamic
    return super.{mix::Mixin::y};
  mixin-super-stub set y(dynamic value) → void
    return super.{mix::Mixin::y} = value;
  mixin-super-stub get z() → dynamic
    return super.{mix::Mixin::z};
  mixin-super-stub set z(dynamic value) → void
    return super.{mix::Mixin::z} = value;
  mixin-super-stub get t() → self::C2::V*
    return super.{mix::Mixin::t};
  mixin-super-stub set t(covariant-by-class self::C2::V* value) → void
    return super.{mix::Mixin::t} = value;
  mixin-super-stub method foo() → dynamic
    return super.{mix::Mixin::foo}();
  mixin-super-stub method g(covariant-by-class self::C2::V* a) → self::C2::V*
    return super.{mix::Mixin::g}(a);
  mixin-super-stub method h() → dynamic
    return super.{mix::Mixin::h}();
  mixin-super-stub method l() → dynamic
    return super.{mix::Mixin::l}();
  mixin-super-stub method _privateMethod() → dynamic
    return super.{mix::Mixin::_privateMethod}();
  mixin-super-stub method publicMethod() → dynamic
    return super.{mix::Mixin::publicMethod}();
}
class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
  synthetic constructor •() → self::D2*
    : super self::Super::•()
    ;
  mixin-super-stub get x() → dynamic
    return super.{mix::Mixin::x};
  mixin-super-stub set x(dynamic value) → void
    return super.{mix::Mixin::x} = value;
  mixin-super-stub get y() → dynamic
    return super.{mix::Mixin::y};
  mixin-super-stub set y(dynamic value) → void
    return super.{mix::Mixin::y} = value;
  mixin-super-stub get z() → dynamic
    return super.{mix::Mixin::z};
  mixin-super-stub set z(dynamic value) → void
    return super.{mix::Mixin::z} = value;
  mixin-super-stub get t() → dynamic
    return super.{mix::Mixin::t};
  mixin-super-stub set t(covariant-by-class dynamic value) → void
    return super.{mix::Mixin::t} = value;
  mixin-super-stub method foo() → dynamic
    return super.{mix::Mixin::foo}();
  mixin-super-stub method g(covariant-by-class dynamic a) → dynamic
    return super.{mix::Mixin::g}(a);
  mixin-super-stub method h() → dynamic
    return super.{mix::Mixin::h}();
  mixin-super-stub method l() → dynamic
    return super.{mix::Mixin::l}();
  mixin-super-stub method _privateMethod() → dynamic
    return super.{mix::Mixin::_privateMethod}();
  mixin-super-stub method publicMethod() → dynamic
    return super.{mix::Mixin::publicMethod}();
}
static method main() → dynamic
  ;

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

class Mixin<T extends core::Object* = dynamic> extends core::Object {
  field dynamic x;
  field dynamic y;
  field dynamic z;
  covariant-by-class field mix::Mixin::T* t;
  synthetic constructor •() → mix::Mixin<mix::Mixin::T*>*
    ;
  method foo() → dynamic
    ;
  method g(covariant-by-class mix::Mixin::T* a) → mix::Mixin::T*
    ;
  method h() → dynamic
    ;
  method l() → dynamic
    ;
  method _privateMethod() → dynamic
    ;
  method publicMethod() → dynamic
    ;
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method f() → dynamic
  ;
static method V() → dynamic
  ;
static method _private() → dynamic
  ;
static method foo(dynamic m) → dynamic
  ;
