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

class Class<E extends core::Object? = dynamic> extends core::Object {
  final field self::Class::E% field;
  constructor •(self::Class::E% field) → self::Class<self::Class::E%>
    : self::Class::field = field, super core::Object::•()
    ;
  method returnTypeVariable() → self::Class::E% {
    lowered self::Class::E? #result;
    lowered core::bool #result#isSet = false;
    function #result#get() → self::Class::E% {
      if(!#result#isSet) {
        #result = this.{self::Class::field}{self::Class::E%};
        #result#isSet = true;
      }
      return #result{self::Class::E%};
    }
    function #result#set(self::Class::E% result#param) → dynamic {
      #result#isSet = true;
      return #result = result#param;
    }
    return #result#get(){() → self::Class::E%};
  }
}
static method returnNonNullable(core::int value) → core::int {
  lowered core::int? #result;
  function #result#get() → core::int
    return let final core::int? #t1 = #result in #t1 == null ?{core::int} #result = value : #t1{core::int};
  function #result#set(core::int result#param) → dynamic
    return #result = result#param;
  return #result#get(){() → core::int};
}
static method returnNullable(core::int? value) → core::int? {
  lowered core::int? #result;
  lowered core::bool #result#isSet = false;
  function #result#get() → core::int? {
    if(!#result#isSet) {
      #result = value;
      #result#isSet = true;
    }
    return #result;
  }
  function #result#set(core::int? result#param) → dynamic {
    #result#isSet = true;
    return #result = result#param;
  }
  return #result#get(){() → core::int?};
}
static method main() → dynamic {
  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}(){() → core::int});
  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}(){() → core::int?});
  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}(){() → core::int?});
  self::expect(42, self::returnNonNullable(42));
  self::expect(87, self::returnNullable(87));
  self::expect(null, self::returnNullable(null));
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
