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

class Class extends core::Object {
  synthetic constructor •() → self::Class
    : super core::Object::•()
    ;
  method method() → self::Class
    return this;
}
extension Extension on self::Class {
  method extensionMethod = self::Extension|extensionMethod;
  tearoff extensionMethod = self::Extension|get#extensionMethod;
}
static method Extension|extensionMethod(lowered final self::Class #this) → self::Class
  return #this;
static method Extension|get#extensionMethod(lowered final self::Class #this) → () → self::Class
  return () → self::Class => self::Extension|extensionMethod(#this);
static method main() → dynamic {
  self::Class? c;
  let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::Class?} null : block {
    #t1{self::Class}.{self::Class::method}();
  } =>#t1;
  let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::Class?} null : block {
    #t2{self::Class}.{self::Class::method}();
    #t2{self::Class}.{self::Class::method}();
  } =>#t2;
  let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::Class?} null : block {
    self::Extension|extensionMethod(#t3{self::Class});
  } =>#t3;
  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{self::Class?} null : block {
    self::Extension|extensionMethod(#t4{self::Class});
    self::Extension|extensionMethod(#t4{self::Class});
  } =>#t4;
}
