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

abstract class B extends core::Object {
  synthetic constructor •() → self::B*
    : super core::Object::•()
    ;
  abstract method foo() → void;
}
abstract class C extends self::B {
  synthetic constructor •() → self::C*
    : super self::B::•()
    ;
  abstract method bar() → void;
}
static method f<T extends self::B* = self::B*>(self::f::T* a) → void {
  if(a is core::String*) {
    a.{self::B::foo}();
  }
  if(a is self::C*) {
    a{self::f::T* extends self::C*}.{self::C::bar}();
  }
}
static method main() → dynamic {}
