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

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

class Super<S extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::Super<self::Super::S>
    ;
  method foo() → dynamic
    ;
  method f() → dynamic
    ;
}
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> {
  synthetic constructor •() → self::_C&Super&Mixin<self::_C&Super&Mixin::V>
    : super self::Super::•()
    ;
}
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> {
  synthetic constructor •() → self::_D&Super&Mixin
    : super self::Super::•()
    ;
}
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::•()
    ;
}
class D2 = self::Super<dynamic> with mix::Mixin<dynamic> {
  synthetic constructor •() → self::D2
    : super self::Super::•()
    ;
}
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
    ;
}
static method f() → dynamic
  ;
static method V() → dynamic
  ;
static method _private() → dynamic
  ;
static method foo(dynamic m) → dynamic
  ;
