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

abstract class A {
  abstract covariant num cn;
}

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

class C2 extends C1 {
  int get cn => 42;
  @override
  void set cn(int _) {}
}
test(A a, C1 c1, C2 c2) {
  a.cn;
  a.cn = 42;
  a.cn = 3.14;

  c1.cn;
  c1.cn = 42;
  c1.cn = 3.14;

  c2.cn;
  c2.cn = 42;
}

main() {
}
