class Class {
  static final int staticDuplicateFieldAndDuplicateSetter = 1;
  static final int staticDuplicateFieldAndDuplicateSetter = 2;
  static final int staticDuplicateFieldAndSetter = 1;
  static final int staticDuplicateFieldAndSetter = 2;
  static final int staticFieldAndDuplicateSetter = 1;
  static int get staticGetter => 1;
  static int get staticGetter => 2;
  static int staticField = 1;
  static int staticField = 2;
  static int staticFieldAndSetter1 = 1;
  static int staticFieldAndSetter2 = 1;
  static int staticMethod() => 1;
  static int staticMethod() => 2;
  static int staticMethodAndSetter1() => 1;
  static int staticMethodAndSetter2() => 1;
  static late final int staticLateFinalFieldAndSetter1;
  static late final int staticLateFinalFieldAndSetter2;
  static void set staticDuplicateFieldAndDuplicateSetter(int value) {}
  static void set staticDuplicateFieldAndDuplicateSetter(int value) {}
  static void set staticDuplicateFieldAndSetter(int value) {}
  static void set staticFieldAndDuplicateSetter(int value) {}
  static void set staticFieldAndDuplicateSetter(int value) {}
  static void set staticFieldAndSetter1(int value) {}
  static void set staticFieldAndSetter2(int value) {}
  static void set staticLateFinalFieldAndSetter1(int value) {}
  static void set staticLateFinalFieldAndSetter2(int value) {}
  static void set staticMethodAndSetter1(int value) {}
  static void set staticMethodAndSetter2(int value) {}
  static void set staticSetter(value) {}
  static void set staticSetter(value) {}
}

expect(expected, actual) {}
main() {}
test() {}
throws(dynamic Function() f) {}
var result;
