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

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