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

class Class extends core::Object {
  synthetic constructor •() → self::Class
    ;
}
class GenericClass<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::GenericClass<self::GenericClass::T%>
    ;
}
extension Extension on self::Class {
  method method = self::Extension|method;
  tearoff method = self::Extension|get#method;
}
extension GenericExtension<T extends core::Object? = dynamic> on self::GenericClass<T%> {
  method method = self::GenericExtension|method;
  tearoff method = self::GenericExtension|get#method;
}
static method Extension|method(lowered final self::Class #this, dynamic a) → dynamic
  ;
static method Extension|get#method(lowered final self::Class #this) → (dynamic) → dynamic
  return (dynamic a) → dynamic => self::Extension|method(#this, a);
static method GenericExtension|method<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericExtension|method::T%> #this) → dynamic
  ;
static method GenericExtension|get#method<T extends core::Object? = dynamic>(lowered final self::GenericClass<self::GenericExtension|get#method::T%> #this) → () → dynamic
  return () → dynamic => self::GenericExtension|method<self::GenericExtension|get#method::T%>(#this);
static method main() → dynamic
  ;
