// 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.

// SharedOptions=--enable-experiment=extension-methods

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;
}
