5662ce3813
The CFE implementation of "why not promoted" functionality for
non-promotion of `this` doesn't associate the context message with any
location information, because there is no relevant location to cite.
For example, the output can look like this:
tests/language/why_not_promoted/this_error_test.dart:16:10: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
Try accessing using ?. instead.
this.isEven;
^^^^^^
Context: 'this' can't be promoted.
See http://dart.dev/go/non-promo-this
The test runner assumes that all messages have a location, so it
wasn't picking up on this context message at all. This CL avoids the
problem by having the test runner associate any location-less context
message with the error above it.
(Note that the analyzer doesn't have this problem; all of its context
messages have locations).
Change-Id: Ied52daa8b0090f28617e7d3784233aa44dcc897a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/195301
Reviewed-by: Bob Nystrom <rnystrom@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
33 lines
1.2 KiB
Dart
33 lines
1.2 KiB
Dart
// 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 validates integration of "why not promoted" when the user tries to
|
|
// promote `this`.
|
|
|
|
// TODO(paulberry): once we support adding "why not promoted" information to
|
|
// errors that aren't related to null safety, test references to `this` in
|
|
// classes and mixins.
|
|
|
|
extension on int? {
|
|
extension_explicit_this() {
|
|
if (this == null) return;
|
|
this.isEven;
|
|
// ^^^^^^
|
|
// [analyzer 1] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
|
|
// [context 1] 'this' can't be promoted. See http://dart.dev/go/non-promo-this
|
|
// [cfe 3] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
|
|
// [context 3] 'this' can't be promoted.
|
|
}
|
|
|
|
extension_implicit_this() {
|
|
if (this == null) return;
|
|
isEven;
|
|
// ^^^^^^
|
|
// [analyzer 2] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
|
|
// [context 2] 'this' can't be promoted. See http://dart.dev/go/non-promo-this
|
|
// [cfe 4] Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
|
|
// [context 4] 'this' can't be promoted.
|
|
}
|
|
}
|