library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;

class Foo extends core::Object {
  synthetic constructor •() → self::Foo
    : super core::Object::•()
    ;
  method instanceMethod() → dynamic {
    return 123;
  }
}
abstract class ExternalValue extends core::Object {
  synthetic constructor •() → self::ExternalValue
    : super core::Object::•()
    ;
}
abstract class Bar extends core::Object {
  synthetic constructor •() → self::Bar
    : super core::Object::•()
    ;
  abstract method externalInstanceMethod() → self::ExternalValue;
}
class Box extends core::Object {
  field dynamic field = null;
  synthetic constructor •() → self::Box
    : super core::Object::•()
    ;
}
class FinalBox extends core::Object {
  final field dynamic finalField;
  constructor •(dynamic finalField) → self::FinalBox
    : self::FinalBox::finalField = finalField, super core::Object::•()
    ;
}
class SubFinalBox extends self::FinalBox {
  constructor •(dynamic value) → self::SubFinalBox
    : super self::FinalBox::•(value)
    ;
}
class DynamicReceiver1 extends core::Object {
  synthetic constructor •() → self::DynamicReceiver1
    : super core::Object::•()
    ;
  method dynamicallyCalled(dynamic x) → dynamic {}
}
class DynamicReceiver2 extends core::Object {
  synthetic constructor •() → self::DynamicReceiver2
    : super core::Object::•()
    ;
  method dynamicallyCalled(dynamic x) → dynamic {}
}
static method staticMethod() → dynamic {
  return "sdfg";
}
external static method externalStatic() → core::bool;
external static method createBar() → self::Bar;
static method stringArgument(dynamic x) → dynamic {}
static method intArgument(dynamic x) → dynamic {}
static method makeDynamicCall(dynamic receiver) → void {
  receiver{dynamic}.dynamicallyCalled("sdfg");
}
static method main() → dynamic {
  dynamic x = self::staticMethod();
  dynamic y = new self::Foo::•().{self::Foo::instanceMethod}(){() → dynamic};
  core::bool z = self::externalStatic();
  self::ExternalValue w = self::createBar().{self::Bar::externalInstanceMethod}(){() → self::ExternalValue};
  self::stringArgument("sdfg");
  self::intArgument(42);
  self::Box box = new self::Box::•();
  box.{self::Box::field} = "sdfg";
  dynamic a = box.{self::Box::field}{dynamic};
  self::FinalBox finalBox = new self::FinalBox::•("dfg");
  dynamic b = finalBox.{self::FinalBox::finalField}{dynamic};
  self::SubFinalBox subBox = new self::SubFinalBox::•("dfg");
  dynamic c = subBox.{self::FinalBox::finalField}{dynamic};
  self::makeDynamicCall(new self::DynamicReceiver1::•());
  self::makeDynamicCall(new self::DynamicReceiver2::•());
  core::List<core::String> list = core::_GrowableList::_literal1<core::String>("string");
  core::String d = list.{core::List::[]}(0){(core::int) → core::String};
}
