| class Class1 { |
| Class1? get property => null; |
| void set property(Class1? value) {} |
| Class1 get property1 => new Class1(); |
| Class2 get property2 => new Class2(); |
| 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) {} |
| 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; |
| 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) {} |