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% {
    self::Class::E? result;
    core::bool #result#isSet = false;
    function #result#get() → self::Class::E% {
      if(!#result#isSet) {
        result = this.{self::Class::field};
        #result#isSet = true;
      }
      return result{self::Class::E%};
    }
    function #result#set(self::Class::E% #t1) → dynamic {
      #result#isSet = true;
      return result = #t1;
    }
    return #result#get.call();
  }
}
static method returnNonNullable(core::int value) → core::int {
  core::int? result;
  core::bool #result#isSet = false;
  function #result#get() → core::int {
    if(!#result#isSet) {
      result = value;
      #result#isSet = true;
    }
    return result{core::int};
  }
  function #result#set(core::int #t2) → dynamic {
    #result#isSet = true;
    return result = #t2;
  }
  return #result#get.call();
}
static method returnNullable(core::int? value) → core::int? {
  core::int? result;
  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? #t3) → dynamic {
    #result#isSet = true;
    return result = #t3;
  }
  return #result#get.call();
}
static method main() → dynamic {
  self::expect(42, new self::Class::•<core::int>(42).{self::Class::returnTypeVariable}());
  self::expect(87, new self::Class::•<core::int?>(87).{self::Class::returnTypeVariable}());
  self::expect(null, new self::Class::•<core::int?>(null).{self::Class::returnTypeVariable}());
  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::==}(actual))
    throw "Expected ${expected}, actual ${actual}";
}
