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

abstract class I extends core::Object {
  synthetic constructor •() → self::I*
    : super core::Object::•()
    ;
  abstract method interfaceMethod() → dynamic;
}
class C extends core::Object implements self::I {
  synthetic constructor •() → self::C*
    : super core::Object::•()
    ;
  method noSuchMethod(core::Invocation* _) → dynamic
    return "C";
  no-such-method-forwarder method interfaceMethod() → dynamic
    return this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C1, 0, #C2, #C3, core::Map::unmodifiable<core::Symbol*, dynamic>(#C4))) as{TypeError} dynamic;
}
class D extends self::C {
  synthetic constructor •() → self::D*
    : super self::C::•()
    ;
  method noSuchMethod(core::Invocation* _) → dynamic
    return "D";
  method dMethod() → dynamic
    return super.{self::C::interfaceMethod}();
}
static method main() → dynamic {
  dynamic result = new self::D::•().{self::D::dMethod}();
  if(!result.{core::Object::==}("D"))
    throw "Expected 'D' but got: '${result}'";
}

constants  {
  #C1 = #interfaceMethod
  #C2 = <core::Type*>[]
  #C3 = <dynamic>[]
  #C4 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C3}
}
