blob: bfb938824d447c6a365c5e0e0a1e26b2aed0e4a6 [file] [log] [blame]
// 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
bool c = false;
// Test that the type produced from expression `x?.y` is nullable.
void main() {
int? x;
x?.bitLength + 1; //# 01: compile-time error
x?.round(2) + 1; //# 02: compile-time error
}
// Ensure it works correctly on type parameters
void f<T extends num>(Generic<T>? generic, Generic<T?> nullableGeneric) {
generic?.getter + 1; //# 03: compile-time error
generic?.method() + 1; //# 04: compile-time error
generic?.nullableGetter + 1; //# 05: compile-time error
generic?.nullableMethod() + 1; //# 06: compile-time error
nullableGeneric?.getter + 1; //# 07: compile-time error
nullableGeneric?.method() + 1; //# 08: compile-time error
nullableGeneric?.nullableGetter + 1; //# 09: compile-time error
nullableGeneric?.nullableMethod() + 1; //# 10: compile-time error
}
class Generic<T> {
T get getter => throw Exception('unreachable');
T method() => throw Exception('unreachable');
T? nullableGetter = null;
T? nullableMethod() => null;
}