library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/late_lowering/covariant_late_field.dart:19:31: Error: The parameter 'value' of the method 'C.invariantField' has type 'int', which does not match the corresponding type, 'num', in the overridden method, 'A.invariantField'.
// Change to a supertype of 'num', or, for a covariant parameter, a subtype.
//   void set invariantField(int value) {} // error
//                               ^
// pkg/front_end/testcases/late_lowering/covariant_late_field.dart:6:12: Context: This is the overridden method ('invariantField').
//   late num invariantField;
//            ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

class A extends core::Object {
  field core::num? _#A#invariantField = null;
  field core::bool _#A#invariantField#isSet = false;
  field core::num? _#A#covariantField = null;
  field core::bool _#A#covariantField#isSet = false;
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
  get invariantField() → core::num
    return this.{self::A::_#A#invariantField#isSet} ?{core::num} let final core::num? #t1 = this.{self::A::_#A#invariantField} in #t1{core::num} : throw new _in::LateError::fieldNI("invariantField");
  set invariantField(core::num #t2) → void {
    this.{self::A::_#A#invariantField#isSet} = true;
    this.{self::A::_#A#invariantField} = #t2;
  }
  get covariantField() → core::num
    return this.{self::A::_#A#covariantField#isSet} ?{core::num} let final core::num? #t3 = this.{self::A::_#A#covariantField} in #t3{core::num} : throw new _in::LateError::fieldNI("covariantField");
  set covariantField(covariant core::num #t4) → void {
    this.{self::A::_#A#covariantField#isSet} = true;
    this.{self::A::_#A#covariantField} = #t4;
  }
}
abstract class B extends core::Object implements self::A {
  synthetic constructor •() → self::B
    : super core::Object::•()
    ;
  abstract get invariantField() → core::num;
  abstract set invariantField(core::num value) → void;
  abstract get covariantField() → core::num;
  abstract set covariantField(covariant core::num value) → void;
}
abstract class C extends core::Object implements self::A {
  synthetic constructor •() → self::C
    : super core::Object::•()
    ;
  abstract get invariantField() → core::int;
  set invariantField(core::int value) → void {}
  abstract get covariantField() → core::int;
  set covariantField(covariant core::int value) → void {}
}
abstract class D extends core::Object implements self::A {
  synthetic constructor •() → self::D
    : super core::Object::•()
    ;
  abstract get invariantField() → core::int;
  set invariantField(covariant core::int value) → void {}
  abstract get covariantField() → core::int;
  set covariantField(covariant core::int value) → void {}
}
static method main() → dynamic {}
