library;
import self as self;
import "dart:core" as core;

class C<T extends core::Object* = dynamic> extends core::Object {
  generic-covariant-impl field self::C::T* field1;
  generic-covariant-impl field () →* self::C::T* field2;
  field (self::C::T*) →* void field3;
  generic-covariant-impl field (self::C::T*) →* self::C::T* field4;
  generic-covariant-impl field () →* () →* self::C::T* field5;
  field (() →* self::C::T*) →* void field6;
  generic-covariant-impl field (() →* self::C::T*) →* self::C::T* field7;
  generic-covariant-impl field ((self::C::T*) →* void) →* void field8;
  generic-covariant-impl field ((self::C::T*) →* void) →* self::C::T* field9;
  generic-covariant-impl field ((self::C::T*) →* self::C::T*) →* void field10;
  generic-covariant-impl field ((self::C::T*) →* self::C::T*) →* self::C::T* field11;
  generic-covariant-impl field <S extends self::C::T* = dynamic>() →* S* field12;
  generic-covariant-impl field <S extends self::C::T* = dynamic>(S*) →* void field13;
  generic-covariant-impl field <S extends self::C::T* = dynamic>(S*) →* S* field14;
  generic-covariant-impl field (<S extends self::C::T* = dynamic>() →* S*) →* void field15;
  constructor •(self::C::T* field1) → self::C<self::C::T*>*
    : self::C::field1 = field1, self::C::field2 = () → self::C::T* => field1, self::C::field3 = (self::C::T* t) → Null {}, self::C::field4 = (self::C::T* t) → self::C::T* => t, self::C::field5 = () → () →* self::C::T* => () → self::C::T* => field1, self::C::field6 = (() →* self::C::T* f) → Null {}, self::C::field7 = (() →* self::C::T* f) → self::C::T* => field1, self::C::field8 = ((self::C::T*) →* void f) → Null {}, self::C::field9 = ((self::C::T*) →* void f) → self::C::T* => field1, self::C::field10 = ((self::C::T*) →* self::C::T* f) → Null {}, self::C::field11 = ((self::C::T*) →* self::C::T* f) → self::C::T* => field1, self::C::field12 = <S extends self::C::T*>() → Null => null, self::C::field13 = <S extends self::C::T*>(S* s) → Null {}, self::C::field14 = <S extends self::C::T*>(S* s) → S* => s, self::C::field15 = (<S extends self::C::T*>() →* S* f) → Null {}, super core::Object::•()
    ;
  get getter1() → self::C::T*
    return this.{self::C::field1};
  get getter2() → () →* self::C::T*
    return this.{self::C::field2};
  get getter3() → (self::C::T*) →* void
    return this.{self::C::field3};
  get getter4() → (self::C::T*) →* self::C::T*
    return this.{self::C::field4};
  get getter5() → () →* () →* self::C::T*
    return this.{self::C::field5};
  get getter6() → (() →* self::C::T*) →* void
    return this.{self::C::field6};
  get getter7() → (() →* self::C::T*) →* self::C::T*
    return this.{self::C::field7};
  get getter8() → ((self::C::T*) →* void) →* void
    return this.{self::C::field8};
  get getter9() → ((self::C::T*) →* void) →* self::C::T*
    return this.{self::C::field9};
  get getter10() → ((self::C::T*) →* self::C::T*) →* void
    return this.{self::C::field10};
  get getter11() → ((self::C::T*) →* self::C::T*) →* self::C::T*
    return this.{self::C::field11};
  get getter12() → <S extends self::C::T* = dynamic>() →* S*
    return this.{self::C::field12};
  get getter13() → <S extends self::C::T* = dynamic>(S*) →* void
    return this.{self::C::field13};
  get getter14() → <S extends self::C::T* = dynamic>(S*) →* S*
    return this.{self::C::field14};
  get getter15() → (<S extends self::C::T* = dynamic>() →* S*) →* void
    return this.{self::C::field15};
  set setter1(generic-covariant-impl self::C::T* value) → void {
    this.{self::C::field1} = value;
  }
  set setter2(generic-covariant-impl () →* self::C::T* value) → void {
    this.{self::C::field2} = value;
  }
  set setter3((self::C::T*) →* void value) → void {
    this.{self::C::field3} = value;
  }
  set setter4(generic-covariant-impl (self::C::T*) →* self::C::T* value) → void {
    this.{self::C::field4} = value;
  }
  set setter5(generic-covariant-impl () →* () →* self::C::T* value) → void {
    this.{self::C::field5} = value;
  }
  set setter6((() →* self::C::T*) →* void value) → void {
    this.{self::C::field6} = value;
  }
  set setter7(generic-covariant-impl (() →* self::C::T*) →* self::C::T* value) → void {
    this.{self::C::field7} = value;
  }
  set setter8(generic-covariant-impl ((self::C::T*) →* void) →* void value) → void {
    this.{self::C::field8} = value;
  }
  set setter9(generic-covariant-impl ((self::C::T*) →* void) →* self::C::T* value) → void {
    this.{self::C::field9} = value;
  }
  set setter10(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* void value) → void {
    this.{self::C::field10} = value;
  }
  set setter11(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
    this.{self::C::field11} = value;
  }
  set setter12(generic-covariant-impl <S extends self::C::T* = dynamic>() →* S* value) → void {
    this.{self::C::field12} = value;
  }
  set setter13(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* void value) → void {
    this.{self::C::field13} = value;
  }
  set setter14(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
    this.{self::C::field14} = value;
  }
  set setter15(generic-covariant-impl (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
    this.{self::C::field15} = value;
  }
  method method1(generic-covariant-impl self::C::T* value) → void {
    this.{self::C::field1} = value;
  }
  method method2(generic-covariant-impl () →* self::C::T* value) → void {
    this.{self::C::field2} = value;
  }
  method method3((self::C::T*) →* void value) → void {
    this.{self::C::field3} = value;
  }
  method method4(generic-covariant-impl (self::C::T*) →* self::C::T* value) → void {
    this.{self::C::field4} = value;
  }
  method method5(generic-covariant-impl () →* () →* self::C::T* value) → void {
    this.{self::C::field5} = value;
  }
  method method6((() →* self::C::T*) →* void value) → void {
    this.{self::C::field6} = value;
  }
  method method7(generic-covariant-impl (() →* self::C::T*) →* self::C::T* value) → void {
    this.{self::C::field7} = value;
  }
  method method8(generic-covariant-impl ((self::C::T*) →* void) →* void value) → void {
    this.{self::C::field8} = value;
  }
  method method9(generic-covariant-impl ((self::C::T*) →* void) →* self::C::T* value) → void {
    this.{self::C::field9} = value;
  }
  method method10(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* void value) → void {
    this.{self::C::field10} = value;
  }
  method method11(generic-covariant-impl ((self::C::T*) →* self::C::T*) →* self::C::T* value) → void {
    this.{self::C::field11} = value;
  }
  method method12(generic-covariant-impl <S extends self::C::T* = dynamic>() →* S* value) → void {
    this.{self::C::field12} = value;
  }
  method method13(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* void value) → void {
    this.{self::C::field13} = value;
  }
  method method14(generic-covariant-impl <S extends self::C::T* = dynamic>(S*) →* S* value) → void {
    this.{self::C::field14} = value;
  }
  method method15(generic-covariant-impl (<S extends self::C::T* = dynamic>() →* S*) →* void value) → void {
    this.{self::C::field15} = value;
  }
  abstract member-signature get _identityHashCode() → core::int*; -> core::Object::_identityHashCode
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*; -> core::Object::_instanceOf
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOf
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfTrue
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*; -> core::Object::_simpleInstanceOfFalse
  abstract member-signature operator ==(dynamic other) → core::bool*; -> core::Object::==
  abstract member-signature get hashCode() → core::int*; -> core::Object::hashCode
  abstract member-signature method toString() → core::String*; -> core::Object::toString
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic; -> core::Object::noSuchMethod
  abstract member-signature get runtimeType() → core::Type*; -> core::Object::runtimeType
}
static method main() → dynamic {
  self::C<core::num*>* c = new self::C::•<core::int*>(0);
  c.{self::C::field1};
  c.{self::C::field2};
  try {
    c.{self::C::field3} as{TypeError,CovarianceCheck} (core::num*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::field4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  c.{self::C::field5};
  try {
    c.{self::C::field6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::field7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  c.{self::C::field8};
  c.{self::C::field9};
  try {
    c.{self::C::field10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::field11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::field12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::field13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::field14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::field15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  c.{self::C::getter1};
  c.{self::C::getter2};
  try {
    c.{self::C::getter3} as{TypeError,CovarianceCheck} (core::num*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::getter4} as{TypeError,CovarianceCheck} (core::num*) →* core::num*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  c.{self::C::getter5};
  try {
    c.{self::C::getter6} as{TypeError,CovarianceCheck} (() →* core::num*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::getter7} as{TypeError,CovarianceCheck} (() →* core::num*) →* core::num*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  c.{self::C::getter8};
  c.{self::C::getter9};
  try {
    c.{self::C::getter10} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::getter11} as{TypeError,CovarianceCheck} ((core::num*) →* core::num*) →* core::num*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::getter12} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>() →* S*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::getter13} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::getter14} as{TypeError,CovarianceCheck} <S extends core::num* = dynamic>(S*) →* S*;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::getter15} as{TypeError,CovarianceCheck} (<S extends core::num* = dynamic>() →* S*) →* void;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter1} = 0.5;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter2} = () → core::double* => 0.5;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  c.{self::C::setter3} = (core::num* n) → Null {};
  try {
    c.{self::C::setter4} = (core::num* n) → core::double* => 0.5;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter5} = () → () →* core::double* => () → core::double* => 0.5;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  c.{self::C::setter6} = (() →* core::num* f) → Null {};
  try {
    c.{self::C::setter7} = (() →* core::num* f) → core::double* => 0.5;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter8} = ((core::double*) →* void f) → Null {};
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter9} = ((core::double*) →* void f) → core::double* => 0.5;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter10} = ((core::double*) →* core::num* f) → Null {};
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter11} = ((core::double*) →* core::num* f) → core::double* => 0.5;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter12} = <S extends core::num*>() → Null => null;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter13} = <S extends core::num*>(S* s) → Null {};
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter14} = <S extends core::num*>(S* s) → S* => s;
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::setter15} = (<S extends core::num*>() →* S* f) → Null {};
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method1}(0.5);
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method2}(() → core::double* => 0.5);
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  c.{self::C::method3}((core::num* n) → Null {});
  try {
    c.{self::C::method4}((core::num* n) → core::double* => 0.5);
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method5}(() → () →* core::double* => () → core::double* => 0.5);
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  c.{self::C::method6}((() →* core::num* f) → Null {});
  try {
    c.{self::C::method7}((() →* core::num* f) → core::double* => 0.5);
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method8}(((core::double*) →* void f) → Null {});
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method9}(((core::double*) →* void f) → core::double* => 0.5);
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method10}(((core::double*) →* core::num* f) → Null {});
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method11}(((core::double*) →* core::num* f) → core::double* => 0.5);
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method12}(<S extends core::num*>() → Null => null);
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method13}(<S extends core::num*>(S* s) → Null {});
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method14}(<S extends core::num*>(S* s) → S* => s);
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
  try {
    c.{self::C::method15}((<S extends core::num*>() →* S* f) → Null {});
    throw "TypeError expected";
  }
  on core::TypeError* catch(final core::TypeError* e) {
    core::print(e);
  }
}
