| // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| class Class { |
| int nonNullableField = 0; |
| int? nullableField; |
| int operator [](int key) => key; |
| void operator []=(int key, int value) {} |
| Class get nonNullableClass => this; |
| Class call() => this; |
| NullableIndexClass get nonNullableNullableIndexClass => NullableIndexClass(); |
| } |
| |
| class NullableIndexClass { |
| int? operator [](int key) => key; |
| void operator []=(int key, int value) {} |
| } |
| |
| main() {} |
| |
| errors(Class? nullableClass, Class nonNullableClass, int? nullableInt, |
| int nonNullableInt, NullableIndexClass? nullableNullableIndexClass) { |
| -nullableInt; // error |
| nullableInt + 2; // error |
| nullableClass[nonNullableInt]; // error |
| nullableClass[nonNullableInt] = nonNullableInt; // error |
| nullableClass[nonNullableInt] += nonNullableInt; // error |
| nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error |
| |
| nullableClass?.nonNullableClass[nonNullableInt]; // ok |
| nullableClass?.nonNullableClass[nonNullableInt] = nonNullableInt; // ok |
| nullableClass?.nonNullableClass[nonNullableInt] += nonNullableInt; // ok |
| nullableClass?.nonNullableNullableIndexClass[nonNullableInt] ??= |
| nonNullableInt; // ok |
| |
| nullableClass.nonNullableField; // error |
| nullableClass.nonNullableField = 2; // error |
| nullableClass.nonNullableField += 2; // error |
| |
| nullableClass?.nonNullableField; // ok |
| nullableClass?.nonNullableField = 2; // ok |
| nullableClass?.nonNullableField += 2; // ok |
| |
| nullableClass?.nonNullableClass.nonNullableField; // ok |
| nullableClass?.nonNullableClass.nonNullableField = 2; // ok |
| |
| nonNullableClass.nullableField += 2; // error |
| nullableClass?.nullableField += 2; // error |
| |
| nullableClass?.nonNullableField ??= 0; // ok |
| nullableClass?.nullableField ??= 0; // ok |
| |
| nullableClass?.nonNullableClass.nonNullableField ??= 0; // ok |
| nullableClass?.nonNullableClass.nullableField ??= 0; // ok |
| |
| nullableClass(); // error |
| nonNullableClass(); // ok |
| nonNullableClass?.nonNullableClass(); // ok |
| nonNullableClass?.nonNullableClass.nonNullableClass(); // ok |
| } |