// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

var result;

int topLevelMethod() => 1;
int topLevelMethod() => 2;

int get topLevelGetter => 1;
int get topLevelGetter => 2;

void set topLevelSetter(value) {
  result = 1;
}

void set topLevelSetter(value) {
  result = 2;
}

int topLevelField = 1;
int topLevelField = 2;

int topLevelFieldAndSetter1 = 1;
void set topLevelFieldAndSetter1(int value) {
  result = 2;
}

void set topLevelFieldAndSetter2(int value) {
  result = 2;
}

int topLevelFieldAndSetter2 = 1;

late final int topLevelLateFinalFieldAndSetter1;
void set topLevelLateFinalFieldAndSetter1(int value) {
  result = 2;
}

void set topLevelLateFinalFieldAndSetter2(int value) {
  result = 2;
}

late final int topLevelLateFinalFieldAndSetter2;

final int topLevelDuplicateFieldAndSetter = 1;
final int topLevelDuplicateFieldAndSetter = 2;
void set topLevelDuplicateFieldAndSetter(int value) {
  result = 3;
}

final int topLevelFieldAndDuplicateSetter = 1;
void set topLevelFieldAndDuplicateSetter(int value) {
  result = 2;
}

void set topLevelFieldAndDuplicateSetter(int value) {
  result = 3;
}

final int topLevelDuplicateFieldAndDuplicateSetter = 1;
final int topLevelDuplicateFieldAndDuplicateSetter = 2;
void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
  result = 3;
}

void set topLevelDuplicateFieldAndDuplicateSetter(int value) {
  result = 4;
}

int topLevelMethodAndSetter1() => 1;
void set topLevelMethodAndSetter1(int value) {
  result = 2;
}

void set topLevelMethodAndSetter2(int value) {
  result = 2;
}

int topLevelMethodAndSetter2() => 1;

test() {
  topLevelMethod();
  (topLevelMethod)();
  topLevelGetter;
  topLevelSetter = 0;
  topLevelField;
  topLevelField = 0;
  topLevelDuplicateFieldAndSetter;
  topLevelDuplicateFieldAndSetter = 0;
  topLevelFieldAndDuplicateSetter;
  topLevelFieldAndDuplicateSetter = 0;
  topLevelDuplicateFieldAndDuplicateSetter;
  topLevelDuplicateFieldAndDuplicateSetter = 0;
  topLevelMethodAndSetter1 = 0;
  topLevelMethodAndSetter2 = 0;
}

main() {
  result = null;
  topLevelFieldAndSetter1 = 0;
  expect(null, result);
  expect(0, topLevelFieldAndSetter1);

  result = null;
  topLevelFieldAndSetter2 = 0;
  expect(null, result);
  expect(0, topLevelFieldAndSetter2);

  result = null;
  topLevelLateFinalFieldAndSetter1 = 0;
  expect(2, result);
  throws(() => topLevelLateFinalFieldAndSetter1);

  result = null;
  topLevelLateFinalFieldAndSetter2 = 0;
  expect(null, result);
  expect(0, topLevelLateFinalFieldAndSetter2);

  expect(1, topLevelMethodAndSetter1());

  expect(1, topLevelMethodAndSetter2());
}

expect(expected, actual) {
  if (expected != actual) throw 'Expected $expected, actual $actual';
}

throws(dynamic Function() f) {
  try {
    f();
  } catch (e) {
    print(e);
    return;
  }
  throw 'Expected exception.';
}
