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

class Foo extends core::Object {
  synthetic constructor •() → self::Foo*
    ;
  method instanceMethod() → dynamic
    ;
}
abstract class ExternalValue extends core::Object {
  synthetic constructor •() → self::ExternalValue*
    ;
}
abstract class Bar extends core::Object {
  synthetic constructor •() → self::Bar*
    ;
  abstract method externalInstanceMethod() → self::ExternalValue*;
}
class Box extends core::Object {
  field dynamic field;
  synthetic constructor •() → self::Box*
    ;
}
class FinalBox extends core::Object {
  final field dynamic finalField;
  constructor •(dynamic finalField) → self::FinalBox*
    ;
}
class SubFinalBox extends self::FinalBox {
  constructor •(dynamic value) → self::SubFinalBox*
    ;
}
class DynamicReceiver1 extends core::Object {
  synthetic constructor •() → self::DynamicReceiver1*
    ;
  method dynamicallyCalled(dynamic x) → dynamic
    ;
}
class DynamicReceiver2 extends core::Object {
  synthetic constructor •() → self::DynamicReceiver2*
    ;
  method dynamicallyCalled(dynamic x) → dynamic
    ;
}
static method staticMethod() → dynamic
  ;
external static abstract method externalStatic() → core::bool*;
external static abstract method createBar() → self::Bar*;
static method stringArgument(dynamic x) → dynamic
  ;
static method intArgument(dynamic x) → dynamic
  ;
static method makeDynamicCall(dynamic receiver) → void
  ;
static method main() → dynamic
  ;
