| // Copyright (c) 2021, 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. |
| |
| // This test contains a test case for each condition that can lead to the front |
| // end's `NullableMethodCallError`, for which we wish to report "why not |
| // promoted" context information. |
| |
| class C { |
| int? i; |
| // ^ |
| // [context 2] 'i' refers to a property so it couldn't be promoted. See http://dart.dev/go/non-promo-property |
| // [context 3] 'i' refers to a property so it couldn't be promoted. See http://dart.dev/go/non-promo-property |
| // [context 4] 'i' refers to a property so it couldn't be promoted. See http://dart.dev/go/non-promo-property |
| // [context 5] 'i' refers to a property so it couldn't be promoted. See http://dart.dev/go/non-promo-property |
| // [context 10] 'i' refers to a property so it couldn't be promoted. |
| // [context 11] 'i' refers to a property so it couldn't be promoted. |
| // [context 12] 'i' refers to a property so it couldn't be promoted. |
| // [context 13] 'i' refers to a property so it couldn't be promoted. |
| void Function()? f; |
| // ^ |
| // [context 7] 'f' refers to a property so it couldn't be promoted. See http://dart.dev/go/non-promo-property |
| // [context 14] 'f' refers to a property so it couldn't be promoted. |
| } |
| |
| extension on int { |
| get propertyOnNonNullInt => null; |
| void methodOnNonNullInt() {} |
| } |
| |
| extension on int? { |
| get propertyOnNullableInt => null; |
| void methodOnNullableInt() {} |
| } |
| |
| property_get_of_variable(int? i, int? j) { |
| if (i == null) return; |
| i = j; |
| //^^^^^ |
| // [context 6] Variable 'i' could not be promoted due to an assignment. See http://dart.dev/go/non-promo-write |
| // [context 8] Variable 'i' could not be promoted due to an assignment. |
| i.isEven; |
| // ^^^^^^ |
| // [analyzer 6] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE |
| // [cfe 8] Property 'isEven' cannot be accessed on 'int?' because it is potentially null. |
| } |
| |
| extension_property_get_of_variable(int? i, int? j) { |
| if (i == null) return; |
| i = j; |
| //^^^^^ |
| // [context 1] Variable 'i' could not be promoted due to an assignment. See http://dart.dev/go/non-promo-write |
| // [context 9] Variable 'i' could not be promoted due to an assignment. |
| i.propertyOnNullableInt; |
| i.propertyOnNonNullInt; |
| // ^^^^^^^^^^^^^^^^^^^^ |
| // [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE |
| // [cfe 9] Property 'propertyOnNonNullInt' cannot be accessed on 'int?' because it is potentially null. |
| } |
| |
| property_get_of_expression(C c) { |
| if (c.i == null) return; |
| c.i.isEven; |
| // ^^^^^^ |
| // [analyzer 3] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE |
| // [cfe 10] Property 'isEven' cannot be accessed on 'int?' because it is potentially null. |
| } |
| |
| extension_property_get_of_expression(C c) { |
| if (c.i == null) return; |
| c.i.propertyOnNullableInt; |
| c.i.propertyOnNonNullInt; |
| // ^^^^^^^^^^^^^^^^^^^^ |
| // [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE |
| // [cfe 11] Property 'propertyOnNonNullInt' cannot be accessed on 'int?' because it is potentially null. |
| } |
| |
| method_invocation(C c) { |
| if (c.i == null) return; |
| c.i.abs(); |
| // ^^^ |
| // [analyzer 4] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE |
| // [cfe 12] Method 'abs' cannot be called on 'int?' because it is potentially null. |
| } |
| |
| extension_method_invocation(C c) { |
| if (c.i == null) return; |
| c.i.methodOnNullableInt(); |
| c.i.methodOnNonNullInt(); |
| // ^^^^^^^^^^^^^^^^^^ |
| // [analyzer 5] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE |
| // [cfe 13] Method 'methodOnNonNullInt' cannot be called on 'int?' because it is potentially null. |
| } |
| |
| call_invocation(C c) { |
| if (c.f == null) return; |
| c.f.call(); |
| // ^^^^ |
| // [analyzer 7] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE |
| // [cfe 14] Method 'call' cannot be called on 'void Function()?' because it is potentially null. |
| } |