library;
import self as self;
import "dart:core" as core;

abstract class FooBase<Tf extends core::Object> extends core::Object {
  abstract get x() → core::int;
}
abstract class Foo<T extends core::Object> extends core::Object implements self::FooBase<dynamic> {
}
class Bar<Sb extends core::Object, Tb extends core::Object> extends core::Object implements self::Foo<self::Bar::Tb> {
  field core::int x;
  constructor •(core::int x) → void
    : self::Bar::x = x, super core::Object::•() {
    core::print("Bar<${self::Bar::Sb},${self::Bar::Tb}>");
  }
}
abstract class SimpleCase<A extends core::Object, B extends core::Object> extends core::Object {
}
abstract class SimpleCaseImpl<Ai extends core::Object, Bi extends core::Object> extends core::Object implements self::SimpleCase<self::SimpleCaseImpl::Ai, self::SimpleCaseImpl::Bi> {
}
class SimpleCaseImpl2<Ai2 extends core::Object, Bi2 extends core::Object> extends core::Object implements self::SimpleCaseImpl<self::SimpleCaseImpl2::Ai2, self::SimpleCaseImpl2::Bi2> {
  constructor •() → void
    : super core::Object::•()
    ;
}
abstract class Base<M extends core::Object> extends core::Object {
  constructor •() → void
    : super core::Object::•()
    ;
}
abstract class Mixin<M extends core::Object> extends core::Object {
}
class Mix<M extends core::Object> extends self::Base<self::Mix::M> implements self::Mixin<self::Mix::M> {
  constructor •() → void
    : super self::Base::•()
    ;
}
static method main() → dynamic {
  core::print(new self::Bar::•<core::String, core::double>(4).{self::FooBase::x});
  new self::SimpleCaseImpl2::•<core::int, core::double>();
  new self::Mix::•<core::double>();
}
