class Class1 {
  Class1? get property => null;
  void set property(Class1? value) {}
  Class1 get property1 => new Class1();
  Class2 get property2 => new Class2();
}

extension Extension1 on Class1 {
  Class1? get nullable1 => property1;
  void set nullable1(Class1? value) {}
  Class1 nonNullable1Method() => nonNullable1;
  Class1? operator [](Class1? key) => nullable1;
  void operator []=(Class1? key, Class1? value) {}
  Class1? operator +(int value) => nullable1;
  Class1? operator -() => nullable1;
  Class1 get nonNullable1 => property1;
  Class2 get nonNullable2 => property2;
}

class Class2 {
  Class2 get property => this;
  void set property(Class2 value) {}
}

extension Extension2 on Class2 {
  Class2 nonNullable2Method() => nonNullable2;
  Class2 operator [](Class2? key) => property;
  void operator []=(Class2? key, Class2? value) => property;
  Class2 operator +(int value) => property;
  Class2 operator -() => property;
  Class2 get nonNullable2 => property;
  void set nonNullable2(Class2 value) {}
}

class Class3 {
  Class2? get property => null;
}

extension Extension3 on Class3 {
  Class2? operator [](Class3? key) => property;
}

main() {}
void propertyAccess(Class1? n1) {}
void indexAccess(Class1? n1, Class2? n2, Class3? n3) {}
void operatorAccess(Class1? n1, Class2? n2) {}
void ifNull(Class1? n1) {}
void throws(void Function() f) {}
