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

class A extends core::Object {
  synthetic constructor •() → self::A
    : super core::Object::•()
    ;
}
class B extends self::A {
  synthetic constructor •() → self::B
    : super self::A::•()
    ;
}
class C extends self::B {
  synthetic constructor •() → self::C
    : super self::B::•()
    ;
}
class GenericClass<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
    : super core::Object::•()
    ;
}
extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%>? {
  get property = self::GenericExtension|get#property;
  method method = self::GenericExtension|method;
  tearoff method = self::GenericExtension|get#method;
  method genericMethod1 = self::GenericExtension|genericMethod1;
  tearoff genericMethod1 = self::GenericExtension|get#genericMethod1;
}
static extension-member method GenericExtension|get#property<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#property::T%>? #this) → self::GenericExtension|get#property::T?
  return null;
static extension-member method GenericExtension|method<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T%>? #this, self::GenericExtension|method::T? t) → self::GenericExtension|method::T?
  return null;
static extension-member method GenericExtension|get#method<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T%>? #this) → (self::GenericExtension|get#method::T?) → self::GenericExtension|get#method::T?
  return (self::GenericExtension|get#method::T? t) → self::GenericExtension|get#method::T? => self::GenericExtension|method<self::GenericExtension|get#method::T%>(#this, t);
static extension-member method GenericExtension|genericMethod1<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericExtension|genericMethod1::T%>? #this, self::GenericExtension|genericMethod1::S? s) → self::GenericExtension|genericMethod1::S?
  return null;
static extension-member method GenericExtension|get#genericMethod1<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#genericMethod1::T%>? #this) → <S extends core::Object? = dynamic>(S?) → S?
  return <S extends core::Object? = dynamic>(S? s) → S? => self::GenericExtension|genericMethod1<self::GenericExtension|get#genericMethod1::T%, S%>(#this, s);
static method main() → dynamic {
  self::A? aVariable;
  self::B? bVariable;
  self::C? cVariable;
  self::GenericClass<self::A> aClass = new self::GenericClass::•<self::A>();
  self::GenericClass<self::B> bClass = new self::GenericClass::•<self::B>();
  self::GenericClass<self::C> cClass = new self::GenericClass::•<self::C>();
  aVariable = self::GenericExtension|get#property<self::A>(aClass);
  aVariable = self::GenericExtension|get#property<self::A>(aClass);
  bVariable = self::GenericExtension|get#property<self::B>(bClass);
  aVariable = self::GenericExtension|get#property<self::A>(bClass);
  bVariable = self::GenericExtension|get#property<self::B>(bClass);
  cVariable = self::GenericExtension|get#property<self::C>(cClass);
  aVariable = self::GenericExtension|get#property<self::A>(cClass);
  bVariable = self::GenericExtension|get#property<self::B>(cClass);
  cVariable = self::GenericExtension|get#property<self::C>(cClass);
  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
  aVariable = self::GenericExtension|method<self::A>(aClass, aVariable);
  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
  aVariable = self::GenericExtension|method<self::A>(bClass, aVariable);
  bVariable = self::GenericExtension|method<self::B>(bClass, bVariable);
  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
  aVariable = self::GenericExtension|method<self::A>(cClass, aVariable);
  bVariable = self::GenericExtension|method<self::B>(cClass, bVariable);
  cVariable = self::GenericExtension|method<self::C>(cClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, cVariable);
  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(aClass, cVariable);
  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(aClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(aClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(bClass, cVariable);
  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(bClass, cVariable);
  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(bClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(bClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(bClass, cVariable);
  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(bClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(bClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(cClass, cVariable);
  aVariable = self::GenericExtension|genericMethod1<self::A, self::A>(cClass, cVariable);
  bVariable = self::GenericExtension|genericMethod1<self::A, self::B>(cClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::A, self::C>(cClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(cClass, cVariable);
  aVariable = self::GenericExtension|genericMethod1<self::B, self::A>(cClass, cVariable);
  bVariable = self::GenericExtension|genericMethod1<self::B, self::B>(cClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::B, self::C>(cClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
  aVariable = self::GenericExtension|genericMethod1<self::C, self::A>(cClass, cVariable);
  bVariable = self::GenericExtension|genericMethod1<self::C, self::B>(cClass, cVariable);
  cVariable = self::GenericExtension|genericMethod1<self::C, self::C>(cClass, cVariable);
}
