11790fe024
Closes #40094. Bug: http://dartbug.com/40094 Change-Id: I3af5258bf0845257915eb090889fde0fdcb96bf9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134339 Commit-Queue: Dmitry Stefantsov <dmitryas@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com>
62 lines
2.2 KiB
Dart
62 lines
2.2 KiB
Dart
// 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
|
|
}
|