staticMethod() {}

class Foo {
  instanceMethod() {}
}

external bool externalStatic();

abstract class ExternalValue {}

abstract class Bar {
  ExternalValue externalInstanceMethod();
}

external Bar createBar();

class Box {
  var field;
}

stringArgument(x) {}

intArgument(x) {}

class FinalBox {
  final finalField;
  FinalBox(this.finalField);
}

class SubFinalBox extends FinalBox {
  SubFinalBox(value) : super(value);
}

class DynamicReceiver1 {
  dynamicallyCalled(x) {}
}

class DynamicReceiver2 {
  dynamicallyCalled(x) {}
}

void makeDynamicCall(receiver) {}

main() {}
