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(final self::Class #this) → self::Class
  return #this;
static method Extension|get#extensionMethod(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;
}
