| // Copyright (c) 2019, 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. |
| |
| // SharedOptions=--enable-experiment=non-nullable |
| |
| // Test that it is an error to use nullable types in unsound ways. |
| void main() async { |
| int? x; |
| bool? cond; |
| List? list; |
| Function? func; |
| List<Function?> funcList = []; |
| Stream? stream; |
| x.isEven; //# 00: compile-time error |
| x.round(); //# 01: compile-time error |
| x.toString(); //# 02: ok |
| x.hashCode; //# 03: ok |
| x.runtimeType; //# 04: ok |
| x.noSuchMethod(Invocation.method(#toString, [])); //# 05: ok |
| x + 1; //# 06: compile-time error |
| -x; //# 06: compile-time error |
| x++; //# 07: compile-time error |
| ++x; //# 08: compile-time error |
| x..isEven; //# 09: compile-time error |
| list[0]; //# 10: compile-time error |
| list[0] = 0; //# 10: compile-time error |
| x += 1; //# 11: compile-time error |
| x ??= 1; //# 12: ok |
| x.round; //# 13: compile-time error |
| x.toString; //# 14: ok |
| x.noSuchMethod; //# 15: ok |
| func(); //# 16: compile-time error |
| funcList[0](); //# 17: compile-time error |
| funcList.single(); //# 18: compile-time error |
| throw x; //# 19: compile-time error |
| cond || true; //# 20: compile-time error |
| true || cond; //# 21: compile-time error |
| cond && true; //# 22: compile-time error |
| true && cond; //# 23: compile-time error |
| !cond; //# 24: compile-time error |
| cond ? null : null; //# 25: compile-time error |
| if (cond) {} //# 26: compile-time error |
| while (cond) {} //# 27: compile-time error |
| for (;cond;) {} //# 28: compile-time error |
| do {} while (cond); //# 29: compile-time error |
| cond!; //# 30: runtime error |
| cond ?? null; //# 31: ok |
| cond == null; //# 32: ok |
| cond != null; //# 33: ok |
| x?.isEven; //# 34: ok |
| x?.round(); //# 35: ok |
| for(var i in list) {}; //# 36: compile-time error |
| await for(var i in stream) {}; //# 37: compile-time error |
| assert(cond); //# 38: compile-time error |
| [...list]; //# 39: compile-time error |
| [...?list]; //# 40: ok |
| } |
| |
| generator() sync* { |
| Iterable? iter; |
| yield* iter; //# 41: compile-time error |
| } |
| |
| void typeParametersNullableBounds<IQ extends int?, BQ extends bool?, LQ extends List?, FQ extends Function?, SQ extends Stream?>( |
| IQ x, |
| BQ cond, |
| LQ list, |
| FQ func, |
| List<FQ> funcList, |
| SQ stream, |
| ) async { |
| x.isEven; //# 42: compile-time error |
| x.round(); //# 43: compile-time error |
| x.toString(); //# 44: ok |
| x.hashCode; //# 45: ok |
| x.runtimeType; //# 46: ok |
| x.noSuchMethod(Invocation.method(#toString, [])); //# 47: ok |
| x + 1; //# 48: compile-time error |
| -x; //# 49: compile-time error |
| x++; //# 50: compile-time error |
| ++x; //# 51: compile-time error |
| x..isEven; //# 52: compile-time error |
| list[0]; //# 53: compile-time error |
| list[0] = 0; //# 54: compile-time error |
| x += 1; //# 55: compile-time error |
| x ??= x; //# 56: ok |
| x.round; //# 57: compile-time error |
| x.toString; //# 58: ok |
| x.noSuchMethod; //# 59: ok |
| func(); //# 60: compile-time error |
| funcList[0](); //# 61: compile-time error |
| funcList.single(); //# 62: compile-time error |
| throw x; //# 63: compile-time error |
| cond || true; //# 64: compile-time error |
| true || cond; //# 65: compile-time error |
| cond && true; //# 66: compile-time error |
| true && cond; //# 67: compile-time error |
| !cond; //# 68: compile-time error |
| cond ? null : null; //# 69: compile-time error |
| if (cond) {} //# 70: compile-time error |
| while (cond) {} //# 71: compile-time error |
| for (;cond;){} //# 72: compile-time error |
| do {} while (cond); //# 73: compile-time error |
| cond!; //# 74: ok |
| cond ?? null; //# 75: ok |
| cond == null; //# 76: ok |
| cond != null; //# 77: ok |
| x?.isEven; //# 78: ok |
| x?.round(); //# 79: ok |
| for(var i in list) {}; //# 80: compile-time error |
| await for(var i in stream) {}; //# 81: compile-time error |
| assert(cond); //# 41: compile-time error |
| } |
| |
| void typeParametersNullableUses<I extends int, B extends bool, L extends List, F extends Function, S extends Stream>( |
| I? x, |
| B? cond, |
| L? list, |
| F? func, |
| List<F?> funcList, |
| S? stream, |
| ) async { |
| x.isEven; //# 82: compile-time error |
| x.round(); //# 83: compile-time error |
| x.toString(); //# 84: ok |
| x.hashCode; //# 85: ok |
| x.runtimeType; //# 86: ok |
| x.noSuchMethod(Invocation.method(#toString, [])); //# 87: ok |
| x + 1; //# 88: compile-time error |
| -x; //# 89: compile-time error |
| x++; //# 90: compile-time error |
| ++x; //# 91: compile-time error |
| x..isEven; //# 92: compile-time error |
| list[0]; //# 93: compile-time error |
| list[0] = 0; //# 94: compile-time error |
| x += 1; //# 95: compile-time error |
| x ??= null; //# 96: ok |
| x.round; //# 97: compile-time error |
| x.toString; //# 98: ok |
| x.noSuchMethod; //# 99: ok |
| func(); //# 100: compile-time error |
| funcList[0](); //# 101: compile-time error |
| funcList.single(); //# 102: compile-time error |
| throw x; //# 103: compile-time error |
| cond || true; //# 104: compile-time error |
| true || cond; //# 105: compile-time error |
| cond && true; //# 106: compile-time error |
| true && cond; //# 107: compile-time error |
| !cond; //# 108: compile-time error |
| cond ? null : null; //# 109: compile-time error |
| if (cond) {} //# 110: compile-time error |
| while (cond) {} //# 111: compile-time error |
| for (;cond;) {} //# 112: compile-time error |
| do {} while (cond); //# 113: compile-time error |
| cond!; //# 114: ok |
| cond ?? null; //# 115: ok |
| cond == null; //# 116: ok |
| cond != null; //# 117: ok |
| x?.isEven; //# 118: ok |
| x?.round(); //# 119: ok |
| for(var i in list) {}; //# 120: compile-time error |
| await for(var i in stream) {}; //# 121: compile-time error |
| } |
| |
| void dynamicUses() async { |
| dynamic dyn; |
| dyn.isEven; //# 122: ok |
| dyn.round(); //# 123: ok |
| dyn.toString(); //# 124: ok |
| dyn.hashCode; //# 125: ok |
| dyn.runtimeType; //# 126: ok |
| dyn.noSuchMethod(Invocation.method(#toString, [])); //# 127: ok |
| dyn + 1; //# 128: ok |
| -dyn; //# 129: ok |
| dyn++; //# 130: ok |
| ++dyn; //# 131: ok |
| dyn..isEven; //# 132: ok |
| dyn[0]; //# 133: ok |
| dyn[0] = 0; //# 134: ok |
| dyn += 1; //# 135: ok |
| dyn ??= null; //# 136: ok |
| dyn.round; //# 137: ok |
| dyn.toString; //# 138: ok |
| dyn.noSuchMethod; //# 139: ok |
| dyn(); //# 140: ok |
| dyn[0](); //# 141: ok |
| dyn.single(); //# 142: ok |
| throw dyn; //# 143: ok |
| dyn || true; //# 144: ok |
| true || dyn; //# 145: ok |
| dyn && true; //# 146: ok |
| true && dyn; //# 147: ok |
| !dyn; //# 148: ok |
| dyn ? null : null; //# 149: ok |
| if (dyn) {} //# 150: ok |
| while (dyn) {} //# 151: ok |
| for (;dyn;) {} //# 152: ok |
| do {} while (dyn); //# 153: ok |
| dyn!; //# 154: ok |
| dyn ?? null; //# 155: ok |
| dyn == null; //# 156: ok |
| dyn != null; //# 157: ok |
| dyn?.isEven; //# 158: ok |
| dyn?.round(); //# 159: ok |
| for(var i in dyn) {}; //# 160: ok |
| await for(var i in dyn) {}; //# 161: ok |
| } |
| |
| void nullUses() async { |
| List<Null> nullList; |
| Null _null; |
| _null.isEven; //# 162: compile-time error |
| _null.round(); //# 163: compile-time error |
| _null.toString(); //# 164: ok |
| _null.hashCode; //# 165: ok |
| _null.runtimeType; //# 166: ok |
| _null.noSuchMethod(Invocation.method(#toString, [])); //# 167: ok |
| _null + 4; //# 165: compile-time error |
| -_null; //# 169: compile-time error |
| _null++; //# 170: compile-time error |
| ++_null; //# 171: compile-time error |
| _null..isEven; //# 172: compile-time error |
| _null[3]; //# 170: compile-time error |
| _null[3] = 0; //# 171: compile-time error |
| _null += 4; //# 172: compile-time error |
| _null ??= _null; //# 176: ok |
| _null.round; //# 177: compile-time error |
| _null.toString; //# 178: ok |
| _null.noSuchMethod; //# 179: ok |
| _null(); //# 180: compile-time error |
| nullList[3](); //# 178: compile-time error |
| nullList.single(); //# 182: compile-time error |
| throw _null; //# 183: compile-time error |
| _null || true; //# 184: compile-time error |
| true || _null; //# 185: compile-time error |
| _null && true; //# 186: compile-time error |
| true && _null; //# 187: compile-time error |
| !_null; //# 188: compile-time error |
| _null ? _null : _null; //# 189: compile-time error |
| if (_null) {} //# 190: compile-time error |
| while (_null) {} //# 191: compile-time error |
| for (;_null;) {} //# 192: compile-time error |
| do {} while (_null); //# 193: compile-time error |
| _null!; //# 194: ok |
| _null ?? _null; //# 195: ok |
| _null == _null; //# 196: ok |
| _null != _null; //# 197: ok |
| _null?.toString(); //# 198: ok |
| for(var i in _null) {}; //# 199: compile-time error |
| await for(var i in _null) {}; //# 200: compile-time error |
| } |