// Copyright (c) 2019, 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.

import "package:expect/expect.dart";
import "class_no_shadow.dart";

const double otherExtensionValue = 1.234;

void checkOtherExtensionValue(double other) {
  Expect.equals(other, otherExtensionValue);
}

// An extension which defines only global, instance and its own symbols
extension ExtraExt on A {
  double get fieldInGlobalScope => otherExtensionValue;
  double get getterInGlobalScope => otherExtensionValue;
  set setterInGlobalScope(double x) {
    checkOtherExtensionValue(x);
  }

  double methodInGlobalScope() => otherExtensionValue;

  double get fieldInInstanceScope => otherExtensionValue;
  double get getterInInstanceScope => otherExtensionValue;
  set setterInInstanceScope(double x) {
    checkOtherExtensionValue(x);
  }

  double methodInInstanceScope() => otherExtensionValue;

  double get fieldInOtherExtensionScope => otherExtensionValue;
  double get getterInOtherExtensionScope => otherExtensionValue;
  set setterInOtherExtensionScope(double x) {
    checkOtherExtensionValue(x);
  }

  double methodInOtherExtensionScope() => otherExtensionValue;
}
