topLevelMethodAndSetter() {}
void set topLevelMethodAndSetter(value) {}
typedef typedefAndSetter = Function();
void set topLevelMethodAndSetter(value) {}
class classAndSetter {}
void set classAndSetter(value) {}
class Class {
  instanceMethodAndSetter() {}
  void set instanceMethodAndSetter(value) {}
  static staticMethodAndSetter() {}
  static void set staticMethodAndSetter(value) {}
  instanceMethodAndStaticSetter() {}
  static void set instanceMethodAndStaticSetter(value) {}
  static staticMethodAndInstanceSetter() {}
  void set staticMethodAndInstanceSetter(value) {}
  Class() {}
  void set Class(value) {}
}
extension Extension on int? {
  extensionInstanceMethodAndSetter() {}
  void set extensionInstanceMethodAndSetter(value) {}
  static extensionStaticMethodAndSetter() {}
  static void set extensionStaticMethodAndSetter(value) {}
  extensionInstanceMethodAndStaticSetter() {}
  static void set extensionInstanceMethodAndStaticSetter(value) {}
  static extensionStaticMethodAndInstanceSetter() {}
  void set extensionStaticMethodAndInstanceSetter(value) {}
}
test() {}
main() {}
