library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;

abstract class A<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::A<self::A::T%>
    : super core::Object::•()
    ;
  abstract method baz() → self::A::T%;
  method bar(covariant-by-class self::A::T% value) → dynamic {}
  method foo() → dynamic {
    lowered self::A::T? #value;
    lowered core::bool #value#isSet = false;
    function #value#get() → self::A::T%
      return #value#isSet ?{self::A::T%} #value{self::A::T%} : throw new _in::LateError::localNI("value");
    function #value#set(self::A::T% value#param) → dynamic {
      #value#isSet = true;
      return #value = value#param;
    }
    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get(){() → self::A::T%}){(self::A::T%) → dynamic};
    (() → Null {
      #value#set(this.{self::A::baz}(){() → self::A::T%}){(self::A::T%) → dynamic};
    })(){() → Null};
    return result;
  }
}
static method main() → dynamic {}
