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

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