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

abstract class A extends core::Object {
  static factory •() → self::A /* redirection-target: self::B::• */
    return self::B::•();
  static method _#new#tearOff() → self::A
    return new self::C::•<core::int>();
}
abstract class B extends core::Object implements self::A {
  static factory •() → self::B /* redirection-target: self::C::•<core::int>*/
    return new self::C::•<core::int>();
  static method _#new#tearOff() → self::B
    return new self::C::•<core::int>();
}
class C<T extends core::Object? = dynamic> extends core::Object implements self::B /*hasConstConstructor*/  {
  const constructor •() → self::C<self::C::T%>
    : super core::Object::•()
    ;
  static method _#new#tearOff<T extends core::Object? = dynamic>() → self::C<self::C::_#new#tearOff::T%>
    return new self::C::•<self::C::_#new#tearOff::T%>();
}
static method main() → dynamic {
  #C1;
  #C2;
  #C4;
}

constants  {
  #C1 = static-tearoff self::A::_#new#tearOff
  #C2 = static-tearoff self::B::_#new#tearOff
  #C3 = static-tearoff self::C::_#new#tearOff
  #C4 = instantiation #C3 <core::String>
}
