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

class Foo extends core::Object {
  synthetic constructor •() → self::Foo*
    : super core::Object::•()
    ;
}
class Bar extends self::Foo {
  synthetic constructor •() → self::Bar*
    : super self::Foo::•()
    ;
}
class Base extends core::Object {
  synthetic constructor •() → self::Base*
    : super core::Object::•()
    ;
  method method() → self::Foo* {
    return new self::Foo::•();
  }
}
class Sub extends self::Base {
  synthetic constructor •() → self::Sub*
    : super self::Base::•()
    ;
  method method() → self::Foo* {
    return new self::Bar::•();
  }
}
static method main(core::List<core::String*>* args) → dynamic {
  self::Base* object = args.{core::List::length}.{core::num::==}(0) ?{self::Base*} new self::Base::•() : new self::Sub::•();
  self::Foo* a = object.{self::Base::method}();
  core::print(a);
}
