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(generic-covariant-impl 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(generic-covariant-impl 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(generic-covariant-impl 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(generic-covariant-impl 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(generic-covariant-impl 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(generic-covariant-impl 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(generic-covariant-impl 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(generic-covariant-impl 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;
  generic-covariant-impl field mix::Mixin::T* t;
  synthetic constructor •() → mix::Mixin<mix::Mixin::T*>*
    ;
  method foo() → dynamic
    ;
  method g(generic-covariant-impl 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
  ;
