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

class Class<T extends self::Class<self::Class::T> = self::Class<dynamic>> extends core::Object {
  synthetic constructor •() → self::Class<self::Class::T>
    : super core::Object::•()
    ;
}
class Subclass extends self::Class<self::Subclass> {
  synthetic constructor •() → self::Subclass
    : super self::Class::•()
    ;
}
extension _extension#0<R extends core::Object? = dynamic, T extends core::Object? = dynamic> on (T%) → R% {
  get returnType = self::_extension#0|get#returnType;
  get parameterType = self::_extension#0|get#parameterType;
}
extension _extension#1<T extends self::Class<T> = self::Class<dynamic>> on <S extends T = dynamic>(T, S) → dynamic {
  get parameterType = self::_extension#1|get#parameterType;
}
static method _extension#0|get#returnType<R extends core::Object? = dynamic, T extends core::Object? = dynamic>(lowered final (self::_extension#0|get#returnType::T%) → self::_extension#0|get#returnType::R% #this) → core::Type
  return self::_extension#0|get#returnType::R%;
static method _extension#0|get#parameterType<R extends core::Object? = dynamic, T extends core::Object? = dynamic>(lowered final (self::_extension#0|get#parameterType::T%) → self::_extension#0|get#parameterType::R% #this) → core::Type
  return self::_extension#0|get#parameterType::T%;
static method _extension#1|get#parameterType<T extends self::Class<self::_extension#1|get#parameterType::T> = self::Class<dynamic>>(lowered final <S extends self::_extension#1|get#parameterType::T = dynamic>(self::_extension#1|get#parameterType::T, S) → dynamic #this) → core::Type
  return self::_extension#1|get#parameterType::T;
static method main() → dynamic {
  function local1(core::int i) → core::int
    return i;
  core::print(self::_extension#0|get#returnType<core::int, core::int>(local1));
  core::print(self::_extension#0|get#parameterType<core::int, core::int>(local1));
  function local2<S extends self::Subclass>(self::Subclass a, S b) → self::Subclass
    return a;
  core::print(self::_extension#1|get#parameterType<self::Subclass>(local2));
}
