late final int lateTopLevelField;

class Class {
  static late final int lateStaticField1;
  static late final int lateStaticField2;
  static staticMethod() {}
  late final int lateInstanceField;
  instanceMethod() {}
}

extension Extension on Class {
  static late final int lateExtensionField1;
  static late final int lateExtensionField2;
  static staticMethod() {}
}

main() {}
expect(expected, actual) {}
throws(f(), String message) {}
