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

/// @assertion An abstract instance variable declaration D is treated as an
/// abstract getter declaration and possibly an abstract setter declaration. The
/// setter is included if and only if D is non-final. The return type of the
/// getter and the parameter type of the setter, if present, is the type of D
/// (which may be declared explicitly, obtained by override inference, or
/// defaulted to dynamic). The parameter of the setter, if present, has the
/// modifier covariant if and only if D has the modifier covariant
///
/// @description Checks that declaration
///   abstract covariant num cn;
/// desugared as
///   num get cn;
///   void set cn(covariant num _);
/// @author sgrekhov@unipro.ru

import "../../Utils/expect.dart";

abstract class A {
  abstract covariant num cn;
}

class C1 extends A {
  num get cn => 3.14;
  void set cn(num _) {}
}

class C2 extends C1 {
  // Without covariant keyword in class A overrides below are not valid
  int get cn => 42;
  void set cn(int _) {}
}

main() {
  C2 c2 = new C2();
  Expect.equals(42, c2.cn);
}
