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

class Foo extends core::Object {
  constructor •() → void
    : super core::Object::•()
    ;
}
class Bar extends self::Foo {
  constructor •() → void
    : super self::Foo::•()
    ;
}
class Base extends core::Object {
  constructor •() → void
    : super core::Object::•()
    ;
  method method() → self::Foo {
    return new self::Foo::•();
  }
}
class Sub extends self::Base {
  constructor •() → void
    : 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) ? new self::Base::•() : new self::Sub::•();
  self::Foo a = object.{self::Base::method}();
  core::print(a);
}
