| Index: pkg/analyzer/test/src/task/strong/non_null_checker_test.dart
|
| diff --git a/pkg/analyzer/test/src/task/strong/non_null_checker_test.dart b/pkg/analyzer/test/src/task/strong/non_null_checker_test.dart
|
| index e5fa7c662a856384501a5d0512af768d75f9e3b5..2be380ff76fc3038f302800af8f03c5b40c2cdbf 100644
|
| --- a/pkg/analyzer/test/src/task/strong/non_null_checker_test.dart
|
| +++ b/pkg/analyzer/test/src/task/strong/non_null_checker_test.dart
|
| @@ -180,6 +180,109 @@ void main() {
|
| addFile(_withError(defaultNnbdExampleMod2, "error:INVALID_ASSIGNMENT"));
|
| check(nonnullableTypes: <String>['dart:core,int']);
|
| }
|
| +
|
| + void test_method_call() {
|
| + addFile('''
|
| +int s(int x) {
|
| + return x + 1;
|
| +}
|
| +
|
| +void main() {
|
| + s(10);
|
| + s(/*error:INVALID_ASSIGNMENT*/null);
|
| +}
|
| +''');
|
| + check(nonnullableTypes: <String>['dart:core,int']);
|
| + }
|
| +
|
| + void test_generics() {
|
| + addFile('''
|
| +class Foo<T> {
|
| + T x;
|
| +
|
| + Foo(this.x);
|
| +}
|
| +
|
| +void main() {
|
| + var f = new Foo<String>("hello");
|
| + var g = new Foo<int>(10);
|
| + var h = new Foo<String>(null);
|
| + var i = new Foo<int>(/*error:INVALID_ASSIGNMENT*/null);
|
| +
|
| + print(f.x);
|
| + print(g.x);
|
| + print(h.x);
|
| + print(i.x);
|
| +}
|
| +''');
|
| + addFile('''
|
| +class Foo<T> {
|
| + T x; // Should be annotated for a runtime check: x = (null as T)
|
| +
|
| + Foo();
|
| +}
|
| +
|
| +void main() {
|
| + var f = new Foo<String>();
|
| + var g = new Foo<int>(); // Should fail at runtime.
|
| +}
|
| +''');
|
| + check(nonnullableTypes: <String>['dart:core,int']);
|
| + }
|
| +
|
| + void test_map() {
|
| + addFile('''
|
| +class Pair<K, V> {
|
| + K first;
|
| + V second;
|
| +
|
| + Pair(this.first, this.second);
|
| +}
|
| +
|
| +class SlowMap<K, V> {
|
| + List<Pair<K, V>> array;
|
| + int arrayLength = 0;
|
| +
|
| + SlowMap() : array = <Pair<K, V>>[];
|
| +
|
| + void insert(K key, V value) {
|
| + array.add(new Pair<K, V>(key, value));
|
| + ++arrayLength;
|
| + }
|
| +
|
| + bool has(K key) {
|
| + for (int i = 0; i < arrayLength; ++i) {
|
| + if (array[i].first == key) {
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + V get(K key) {
|
| + for (int i = 0; i < arrayLength; ++i) {
|
| + if (array[i].first == key) {
|
| + return array[i].second;
|
| + }
|
| + }
|
| + return null;
|
| + // TODO(stanm): generate explicit cast to V which will produce a runtime
|
| + // error if V is non-nullable. Optionally, generate a static warning too.
|
| + }
|
| +}
|
| +
|
| +void main() {
|
| + var legs = new SlowMap<String, int>();
|
| + legs.insert("spider", 8);
|
| + legs.insert("goat", 4);
|
| + legs.insert("chicken", 2);
|
| +
|
| + int x = legs.get("goat"); // This should not produce an error.
|
| + int y = legs.get("sheep"); // TODO(stanm): Runtime error here.
|
| +}
|
| +''');
|
| + check(nonnullableTypes: <String>['dart:core,int']);
|
| + }
|
| }
|
|
|
| String _withError(String file, String error) {
|
|
|