mirror of
https://github.com/dart-lang/sdk
synced 2024-10-01 19:14:49 +00:00
Allow "field promotion" to apply to abstract getters.
A quirk of analyzer and CFE implementations is that they resolve property gets such as `foo.bar` to specific field or getter declarations that may be not be directly defined on the target type; for example if `foo` has type `B`, and `B` extends `A`, and `A` contains a field called `bar`, then `foo.bar` is considered to refer to `A.bar`, for example: class A { int? bar; } class B extends A {} f(B foo) { print(foo.bar); // Resolved to `A.bar`. } This is in contrast with the language specification, which makes a clean distinction between class _declarations_ and the _interfaces_ implied by those declarations. While a class declaration can contain (among other things) both getters and fields, which might be concrete or abstract, an interface doesn't distinguish between getters and fields, and is inherently abstract. The advantage of the analyzer/CFE approach is that it allows more intuitive error messages and "go to definition" behavior, which benefits users. But it has some ill-defined corner cases involving complex class hierarchies, because not every property access can be resolved to a unique declaration (sometimes a getter is multiply inherited from multiple interfaces, for example). The language spec approach has the advantage of being well-defined and consistent even in situations involving complex class hierarchies. When I initially implemented field promotion, I took advantage of this quirk of the analyzer and CFE implementations, so that I could make property gets that refer to field declarations promotable, while keeping property gets that refer to abstract getter declarations non-promotable. This caused unpredictable behaviors in the ill-defined corner cases. It also meant that in certain rare cases, a property access might not be promoted even when it would be sound to do so (e.g. a property access might refer to a private abstract getter declaration, but the only concrete _implementation_ of that abstract getter was a final field). This CL changes the rule for promotability so that any get of a private property is considered promotable, provided that the containing library doesn't contain any concrete getters, non-final fields, or external fields with the same name. It no longer matters whether the private property refers to a field or a getter. This rule is simpler than the old rule, restores the spec's clean distinction between class declarations and interfaces, and allows more promotions without sacrificing soundness. For additional details please see the breaking change announcement at https://github.com/dart-lang/sdk/issues/54056, as well as the original change proposal at https://github.com/dart-lang/language/issues/3328. Fixes https://github.com/dart-lang/sdk/issues/54056. Fixes https://github.com/dart-lang/language/issues/3328. Change-Id: I38ffcb9ecce8bccb93b1b2586a1222a0fb1005a7 Bug: https://github.com/dart-lang/sdk/issues/54056 Bug: https://github.com/dart-lang/language/issues/3328 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/337609 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
parent
7dda27b543
commit
004f564f40
44
CHANGELOG.md
44
CHANGELOG.md
|
@ -1,5 +1,49 @@
|
|||
## 3.3.0
|
||||
|
||||
### Language
|
||||
|
||||
- **Breaking Change** [#54056][]: The rules for private field promotion have
|
||||
been changed so that an abstract getter is considered promotable if there are
|
||||
no conflicting declarations (i.e., there are no non-final fields, external
|
||||
fields, concrete getters, or `noSuchMethod` forwarding getters with the same
|
||||
name in the same library). This makes the implementation more consistent and
|
||||
allows type promotion in a few rare scenarios where it wasn't prevoiusly
|
||||
allowed. It is unlikely, but this change could in principle cause a breakage
|
||||
by changing an inferred type in a way that breaks later code. For example:
|
||||
|
||||
```dart
|
||||
class A {
|
||||
int? get _field;
|
||||
}
|
||||
class B extends A {
|
||||
final int? _field;
|
||||
B(this._field);
|
||||
}
|
||||
test(A a) {
|
||||
if (a._field != null) {
|
||||
var x = a._field; // Previously had type `int?`; now has type `int`
|
||||
...
|
||||
x = null; // Previously allowed; now causes a compile-time error.
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Affected code can be fixed by adding an explicit type annotation (e.g., in the
|
||||
above example `var x` can be changed to `int? x`).
|
||||
|
||||
It's also possible that some continuous integration configurations might fail
|
||||
if they have been configured to treat warnings as errors, because the expanded
|
||||
type promotion could lead to one of the following warnings:
|
||||
|
||||
- unnecessary_non_null_assertion
|
||||
- unnecessary_cast
|
||||
- invalid_null_aware_operator
|
||||
|
||||
These warnings can be addressed in the usual way, by removing the unnecessary
|
||||
operation in the first two cases, or changing `?.` to `.` in the second case.
|
||||
|
||||
[#54056]: https://github.com/dart-lang/sdk/issues/54056
|
||||
|
||||
### Libraries
|
||||
|
||||
#### `dart:core`
|
||||
|
|
|
@ -222,16 +222,16 @@ abstract class FieldPromotability<Class extends Object, Field, Getter> {
|
|||
///
|
||||
/// [isAbstract] indicates whether the getter is abstract.
|
||||
///
|
||||
/// Note that unlike [addField], this method does not return a
|
||||
/// [PropertyNonPromotabilityReason]. The caller may safely assume that the
|
||||
/// reason that getters are not promotable is
|
||||
/// [PropertyNonPromotabilityReason.isNotField].
|
||||
void addGetter(ClassInfo<Class> classInfo, Getter getter, String name,
|
||||
/// A return value of `null` indicates that this getter *might* wind up being
|
||||
/// promotable; any other return value indicates the reason why it
|
||||
/// *definitely* isn't promotable.
|
||||
PropertyNonPromotabilityReason? addGetter(
|
||||
ClassInfo<Class> classInfo, Getter getter, String name,
|
||||
{required bool isAbstract}) {
|
||||
// Public fields are never promotable, so we may safely ignore getters with
|
||||
// public names.
|
||||
if (!name.startsWith('_')) {
|
||||
return;
|
||||
return PropertyNonPromotabilityReason.isNotPrivate;
|
||||
}
|
||||
|
||||
// Record the getter name for later use in computation of `noSuchMethod`
|
||||
|
@ -242,6 +242,10 @@ abstract class FieldPromotability<Class extends Object, Field, Getter> {
|
|||
|
||||
// The getter is concrete, so no fields with the same name are promotable.
|
||||
_fieldNonPromoInfo(name).conflictingGetters.add(getter);
|
||||
|
||||
return PropertyNonPromotabilityReason.isNotField;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5704,14 +5704,17 @@ Message _withArgumentsFieldNotPromotedBecauseNotFinal(
|
|||
}
|
||||
|
||||
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
|
||||
const Template<Message Function(String name, String string)>
|
||||
templateFieldNotPromotedBecauseNotPrivate =
|
||||
const Template<Message Function(String name, String string)>(
|
||||
"FieldNotPromotedBecauseNotPrivate",
|
||||
problemMessageTemplate:
|
||||
r"""'#name' refers to a public field so it couldn't be promoted.""",
|
||||
correctionMessageTemplate: r"""See #string""",
|
||||
withArguments: _withArgumentsFieldNotPromotedBecauseNotPrivate);
|
||||
const Template<
|
||||
Message Function(
|
||||
String name,
|
||||
String
|
||||
string)> templateFieldNotPromotedBecauseNotPrivate = const Template<
|
||||
Message Function(String name, String string)>(
|
||||
"FieldNotPromotedBecauseNotPrivate",
|
||||
problemMessageTemplate:
|
||||
r"""'#name' refers to a public property so it couldn't be promoted.""",
|
||||
correctionMessageTemplate: r"""See #string""",
|
||||
withArguments: _withArgumentsFieldNotPromotedBecauseNotPrivate);
|
||||
|
||||
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
|
||||
const Code<Message Function(String name, String string)>
|
||||
|
@ -5728,7 +5731,7 @@ Message _withArgumentsFieldNotPromotedBecauseNotPrivate(
|
|||
if (string.isEmpty) throw 'No string provided';
|
||||
return new Message(codeFieldNotPromotedBecauseNotPrivate,
|
||||
problemMessage:
|
||||
"""'${name}' refers to a public field so it couldn't be promoted.""",
|
||||
"""'${name}' refers to a public property so it couldn't be promoted.""",
|
||||
correctionMessage: """See ${string}""",
|
||||
arguments: {'name': name, 'string': string});
|
||||
}
|
||||
|
|
|
@ -88,6 +88,8 @@ main() {
|
|||
check(nonPromotabilityInfo.keys).unorderedEquals({'_f'});
|
||||
check(nonPromotabilityInfo['_f']!.conflictingGetters)
|
||||
.unorderedEquals([getter]);
|
||||
check(getter.nonPromotabilityReason)
|
||||
.equals(PropertyNonPromotabilityReason.isNotField);
|
||||
});
|
||||
|
||||
test('in an abstract class', () {
|
||||
|
@ -98,16 +100,20 @@ main() {
|
|||
check(nonPromotabilityInfo.keys).unorderedEquals({'_f'});
|
||||
check(nonPromotabilityInfo['_f']!.conflictingGetters)
|
||||
.unorderedEquals([getter]);
|
||||
check(getter.nonPromotabilityReason)
|
||||
.equals(PropertyNonPromotabilityReason.isNotField);
|
||||
});
|
||||
});
|
||||
|
||||
test('abstract getter does not render a private field non-promotable', () {
|
||||
var f = Field('_f', isFinal: true);
|
||||
var c = Class(fields: [f]);
|
||||
var d = Class(isAbstract: true, getters: [Getter('_f', isAbstract: true)]);
|
||||
var getter = Getter('_f', isAbstract: true);
|
||||
var d = Class(isAbstract: true, getters: [getter]);
|
||||
var nonPromotabilityInfo = _TestFieldPromotability().run([c, d]);
|
||||
check(nonPromotabilityInfo).isEmpty();
|
||||
check(f.nonPromotabilityReason).equals(null);
|
||||
check(getter.nonPromotabilityReason).equals(null);
|
||||
});
|
||||
|
||||
test('public concrete getter is ignored', () {
|
||||
|
@ -115,25 +121,29 @@ main() {
|
|||
// algorithm to keep track of public concrete getters.
|
||||
var f = Field('f', isFinal: true);
|
||||
var c = Class(fields: [f]);
|
||||
var d = Class(getters: [Getter('f')]);
|
||||
var getter = Getter('f');
|
||||
var d = Class(getters: [getter]);
|
||||
// Therefore the map returned by `_TestFieldPromotability.run` is empty.
|
||||
var nonPromotabilityInfo = _TestFieldPromotability().run([c, d]);
|
||||
check(nonPromotabilityInfo).isEmpty();
|
||||
check(f.nonPromotabilityReason)
|
||||
.equals(PropertyNonPromotabilityReason.isNotPrivate);
|
||||
check(getter.nonPromotabilityReason)
|
||||
.equals(PropertyNonPromotabilityReason.isNotPrivate);
|
||||
});
|
||||
|
||||
group('unimplemented getter renders a field non-promotable:', () {
|
||||
test('induced by getter', () {
|
||||
var f = Field('_f', isFinal: true);
|
||||
var c = Class(fields: [f]);
|
||||
var d =
|
||||
Class(isAbstract: true, getters: [Getter('_f', isAbstract: true)]);
|
||||
var getter = Getter('_f', isAbstract: true);
|
||||
var d = Class(isAbstract: true, getters: [getter]);
|
||||
var e = Class(implements: [d]);
|
||||
var nonPromotabilityInfo = _TestFieldPromotability().run([c, d, e]);
|
||||
check(nonPromotabilityInfo.keys).unorderedEquals({'_f'});
|
||||
check(nonPromotabilityInfo['_f']!.conflictingNsmClasses)
|
||||
.unorderedEquals([e]);
|
||||
check(getter.nonPromotabilityReason).equals(null);
|
||||
});
|
||||
|
||||
test('induced by field', () {
|
||||
|
@ -151,11 +161,13 @@ main() {
|
|||
test('unimplemented getter in an abstract class is ok', () {
|
||||
var f = Field('_f', isFinal: true);
|
||||
var c = Class(fields: [f]);
|
||||
var d = Class(isAbstract: true, getters: [Getter('_f', isAbstract: true)]);
|
||||
var getter = Getter('_f', isAbstract: true);
|
||||
var d = Class(isAbstract: true, getters: [getter]);
|
||||
var e = Class(isAbstract: true, implements: [d]);
|
||||
var nonPromotabilityInfo = _TestFieldPromotability().run([c, d, e]);
|
||||
check(nonPromotabilityInfo).isEmpty();
|
||||
check(f.nonPromotabilityReason).equals(null);
|
||||
check(getter.nonPromotabilityReason).equals(null);
|
||||
});
|
||||
|
||||
test('unimplemented abstract field renders a field non-promotable:', () {
|
||||
|
@ -237,6 +249,7 @@ class Field {
|
|||
class Getter {
|
||||
final String name;
|
||||
final bool isAbstract;
|
||||
late final PropertyNonPromotabilityReason? nonPromotabilityReason;
|
||||
|
||||
Getter(this.name, {this.isAbstract = false});
|
||||
}
|
||||
|
@ -265,7 +278,8 @@ class _TestFieldPromotability extends FieldPromotability<Class, Field, Getter> {
|
|||
isExternal: field.isExternal);
|
||||
}
|
||||
for (var getter in class_.getters) {
|
||||
addGetter(classInfo, getter, getter.name,
|
||||
getter.nonPromotabilityReason = addGetter(
|
||||
classInfo, getter, getter.name,
|
||||
isAbstract: getter.isAbstract);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -510,6 +510,7 @@ class TypeSystemOperations
|
|||
@override
|
||||
PropertyNonPromotabilityReason? whyPropertyIsNotPromotable(
|
||||
covariant ExecutableElement property) {
|
||||
if (property.isPublic) return PropertyNonPromotabilityReason.isNotPrivate;
|
||||
if (property is! PropertyAccessorElement) {
|
||||
return PropertyNonPromotabilityReason.isNotField;
|
||||
}
|
||||
|
@ -523,7 +524,6 @@ class TypeSystemOperations
|
|||
return PropertyNonPromotabilityReason.isNotField;
|
||||
}
|
||||
if (field.isPromotable) return null;
|
||||
if (field.isPublic) return PropertyNonPromotabilityReason.isNotPrivate;
|
||||
if (field.isExternal) return PropertyNonPromotabilityReason.isExternal;
|
||||
if (!field.isFinal) return PropertyNonPromotabilityReason.isNotFinal;
|
||||
// Non-promotion reason must be due to a conflict with some other
|
||||
|
|
|
@ -5279,7 +5279,7 @@ class _WhyNotPromotedVisitor
|
|||
PropertyNonPromotabilityReason.isNotField =>
|
||||
"'$propertyName' refers to a getter so it couldn't be promoted.",
|
||||
PropertyNonPromotabilityReason.isNotPrivate =>
|
||||
"'$propertyName' refers to a public field so it couldn't be "
|
||||
"'$propertyName' refers to a public property so it couldn't be "
|
||||
"promoted.",
|
||||
PropertyNonPromotabilityReason.isExternal =>
|
||||
"'$propertyName' refers to an external field so it couldn't be "
|
||||
|
|
|
@ -1301,8 +1301,11 @@ class _FieldPromotability extends FieldPromotability<InterfaceElement,
|
|||
continue;
|
||||
}
|
||||
|
||||
addGetter(classInfo, accessor, accessor.name,
|
||||
var nonPromotabilityReason = addGetter(classInfo, accessor, accessor.name,
|
||||
isAbstract: accessor.isAbstract);
|
||||
if (enabled && nonPromotabilityReason == null) {
|
||||
_potentiallyPromotableFields.add(accessor.variable as FieldElementImpl);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -654,9 +654,9 @@ PrefixedIdentifier
|
|||
identifier: SimpleIdentifier
|
||||
token: _foo
|
||||
staticElement: self::@class::C::@getter::_foo
|
||||
staticType: int?
|
||||
staticType: int
|
||||
staticElement: self::@class::C::@getter::_foo
|
||||
staticType: int?
|
||||
staticType: int
|
||||
''');
|
||||
}
|
||||
|
||||
|
|
|
@ -1654,10 +1654,12 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
}
|
||||
} else if (member is SourceProcedureBuilder && member.isGetter) {
|
||||
if (member.isSynthetic) continue;
|
||||
fieldPromotability.addGetter(classInfo, member, member.name,
|
||||
PropertyNonPromotabilityReason? reason = fieldPromotability.addGetter(
|
||||
classInfo, member, member.name,
|
||||
isAbstract: member.isAbstract);
|
||||
individualPropertyReasons[member.procedure] =
|
||||
PropertyNonPromotabilityReason.isNotField;
|
||||
if (reason != null) {
|
||||
individualPropertyReasons[member.procedure] = reason;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1673,7 +1675,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
!member.isStatic &&
|
||||
member.isGetter) {
|
||||
individualPropertyReasons[member.procedure] =
|
||||
PropertyNonPromotabilityReason.isNotField;
|
||||
member.memberName.isPrivate
|
||||
? PropertyNonPromotabilityReason.isNotField
|
||||
: PropertyNonPromotabilityReason.isNotPrivate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1694,7 +1698,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
|
|||
!member.isStatic &&
|
||||
member.isGetter) {
|
||||
individualPropertyReasons[member.procedure] =
|
||||
PropertyNonPromotabilityReason.isNotField;
|
||||
member.memberName.isPrivate
|
||||
? PropertyNonPromotabilityReason.isNotField
|
||||
: PropertyNonPromotabilityReason.isNotPrivate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -533,10 +533,6 @@ class OperationsCfe
|
|||
// We don't promote methods.
|
||||
return false;
|
||||
}
|
||||
if (property.isAbstract && !property.isAbstractFieldAccessor) {
|
||||
// We don't promote direct references to abstract getter declarations.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
String name = property.name.text;
|
||||
if (!name.startsWith('_')) return false;
|
||||
|
|
|
@ -5547,7 +5547,7 @@ FieldNotPromotedBecauseNotField:
|
|||
}
|
||||
|
||||
FieldNotPromotedBecauseNotPrivate:
|
||||
problemMessage: "'#name' refers to a public field so it couldn't be promoted."
|
||||
problemMessage: "'#name' refers to a public property so it couldn't be promoted."
|
||||
correctionMessage: "See #string"
|
||||
script: >
|
||||
class C {
|
||||
|
|
|
@ -54,8 +54,8 @@ void testPublicField(C c) {
|
|||
void testPrivateAbstractGetter(C c) {
|
||||
if (c._privateAbstractGetter != null) {
|
||||
var x = c._privateAbstractGetter;
|
||||
// `x` has type `int?` so this is ok
|
||||
x = null;
|
||||
// `x` has type `int` so this is ok
|
||||
acceptsInt(x);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -44,8 +44,8 @@ static method testPublicField(self::C c) → void {
|
|||
}
|
||||
static method testPrivateAbstractGetter(self::C c) → void {
|
||||
if(!(c.{self::C::_privateAbstractGetter}{core::int?} == null)) {
|
||||
core::int? x = c.{self::C::_privateAbstractGetter}{core::int?};
|
||||
x = null;
|
||||
core::int x = c.{self::C::_privateAbstractGetter}{core::int?} as{Unchecked} core::int;
|
||||
self::acceptsInt(x);
|
||||
}
|
||||
}
|
||||
static method testPublicAbstractGetter(self::C c) → void {
|
||||
|
|
|
@ -44,8 +44,8 @@ static method testPublicField(self::C c) → void {
|
|||
}
|
||||
static method testPrivateAbstractGetter(self::C c) → void {
|
||||
if(!(c.{self::C::_privateAbstractGetter}{core::int?} == null)) {
|
||||
core::int? x = c.{self::C::_privateAbstractGetter}{core::int?};
|
||||
x = null;
|
||||
core::int x = let core::int? #t2 = c.{self::C::_privateAbstractGetter}{core::int?} in #t2 == null ?{core::int} #t2 as{Unchecked} core::int : #t2{core::int};
|
||||
self::acceptsInt(x);
|
||||
}
|
||||
}
|
||||
static method testPublicAbstractGetter(self::C c) → void {
|
||||
|
|
|
@ -44,8 +44,8 @@ static method testPublicField(self::C c) → void {
|
|||
}
|
||||
static method testPrivateAbstractGetter(self::C c) → void {
|
||||
if(!(c.{self::C::_privateAbstractGetter}{core::int?} == null)) {
|
||||
core::int? x = c.{self::C::_privateAbstractGetter}{core::int?};
|
||||
x = null;
|
||||
core::int x = c.{self::C::_privateAbstractGetter}{core::int?} as{Unchecked} core::int;
|
||||
self::acceptsInt(x);
|
||||
}
|
||||
}
|
||||
static method testPublicAbstractGetter(self::C c) → void {
|
||||
|
|
|
@ -44,8 +44,8 @@ static method testPublicField(self::C c) → void {
|
|||
}
|
||||
static method testPrivateAbstractGetter(self::C c) → void {
|
||||
if(!(c.{self::C::_privateAbstractGetter}{core::int?} == null)) {
|
||||
core::int? x = c.{self::C::_privateAbstractGetter}{core::int?};
|
||||
x = null;
|
||||
core::int x = c.{self::C::_privateAbstractGetter}{core::int?} as{Unchecked} core::int;
|
||||
self::acceptsInt(x);
|
||||
}
|
||||
}
|
||||
static method testPublicAbstractGetter(self::C c) → void {
|
||||
|
|
|
@ -44,8 +44,8 @@ static method testPublicField(self::C c) → void {
|
|||
}
|
||||
static method testPrivateAbstractGetter(self::C c) → void {
|
||||
if(!(c.{self::C::_privateAbstractGetter}{core::int?} == null)) {
|
||||
core::int? x = c.{self::C::_privateAbstractGetter}{core::int?};
|
||||
x = null;
|
||||
core::int x = c.{self::C::_privateAbstractGetter}{core::int?};
|
||||
self::acceptsInt(x);
|
||||
}
|
||||
}
|
||||
static method testPublicAbstractGetter(self::C c) → void {
|
||||
|
|
|
@ -12,14 +12,14 @@
|
|||
extension type E(dynamic d) {
|
||||
int? get i1 => 0;
|
||||
// ^^
|
||||
// [context 1] 'i1' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 3] 'i1' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 5] 'i1' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 7] 'i1' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 9] 'i1' refers to a getter so it couldn't be promoted.
|
||||
// [context 11] 'i1' refers to a getter so it couldn't be promoted.
|
||||
// [context 13] 'i1' refers to a getter so it couldn't be promoted.
|
||||
// [context 15] 'i1' refers to a getter so it couldn't be promoted.
|
||||
// [context 1] 'i1' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'i1' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'i1' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'i1' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 9] 'i1' refers to a public property so it couldn't be promoted.
|
||||
// [context 11] 'i1' refers to a public property so it couldn't be promoted.
|
||||
// [context 13] 'i1' refers to a public property so it couldn't be promoted.
|
||||
// [context 15] 'i1' refers to a public property so it couldn't be promoted.
|
||||
int? get _i2 => 0;
|
||||
// ^^^
|
||||
// [context 2] '_i2' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
|
|
|
@ -22,14 +22,14 @@ class C1 {
|
|||
// [context 43] '_notField' refers to a getter so it couldn't be promoted.
|
||||
final int? notPrivate = 0;
|
||||
// ^^^^^^^^^^
|
||||
// [context 2] 'notPrivate' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'notPrivate' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 14] 'notPrivate' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 20] 'notPrivate' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 26] 'notPrivate' refers to a public field so it couldn't be promoted.
|
||||
// [context 32] 'notPrivate' refers to a public field so it couldn't be promoted.
|
||||
// [context 38] 'notPrivate' refers to a public field so it couldn't be promoted.
|
||||
// [context 44] 'notPrivate' refers to a public field so it couldn't be promoted.
|
||||
// [context 2] 'notPrivate' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'notPrivate' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 14] 'notPrivate' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 20] 'notPrivate' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 26] 'notPrivate' refers to a public property so it couldn't be promoted.
|
||||
// [context 32] 'notPrivate' refers to a public property so it couldn't be promoted.
|
||||
// [context 38] 'notPrivate' refers to a public property so it couldn't be promoted.
|
||||
// [context 44] 'notPrivate' refers to a public property so it couldn't be promoted.
|
||||
int? _notFinal = 0;
|
||||
// ^^^^^^^^^
|
||||
// [context 3] '_notFinal' refers to a non-final field so it couldn't be promoted. See http://dart.dev/go/non-promo-non-final-field
|
||||
|
|
|
@ -10,14 +10,14 @@
|
|||
|
||||
extension type E(int? i) {
|
||||
// ^
|
||||
// [context 1] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 6] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 7] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 8] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 1] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 6] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 7] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 8] 'i' refers to a public property so it couldn't be promoted.
|
||||
void viaImplicitThis() {
|
||||
if (i != null) {
|
||||
i.isEven;
|
||||
|
|
|
@ -86,8 +86,8 @@ void testPublicField(C c) {
|
|||
void testPrivateAbstractGetter(C c) {
|
||||
if (c._privateAbstractGetter != null) {
|
||||
var x = c._privateAbstractGetter;
|
||||
// `x` has type `int?` so this is ok
|
||||
x = null;
|
||||
// `x` has type `int` so this is ok
|
||||
acceptsInt(x);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,10 @@
|
|||
// 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.
|
||||
|
||||
// Tests that field promotion logic does not try to promote abstract getters.
|
||||
// Tests that field promotion logic allows promotion of abstract getters.
|
||||
//
|
||||
// See https://github.com/dart-lang/language/issues/3328 for the rationale for
|
||||
// allowing this.
|
||||
|
||||
// SharedOptions=--enable-experiment=inference-update-2
|
||||
|
||||
|
@ -21,8 +24,8 @@ void acceptsInt(int x) {}
|
|||
void testBaseClass(C c) {
|
||||
if (c._f != null) {
|
||||
var x = c._f;
|
||||
// `x` has type `int?` so this is ok
|
||||
x = null;
|
||||
// `x` has type `int` so this is ok
|
||||
acceptsInt(x);
|
||||
}
|
||||
}
|
||||
|
|
@ -265,8 +265,8 @@ void notPromotableInTry_promotedInFinally(E e) {
|
|||
try {
|
||||
e._c._o1!;
|
||||
e._o3!;
|
||||
e._c._o1.expectStaticType<Exactly<Object?>>();
|
||||
e._o3.expectStaticType<Exactly<Object?>>();
|
||||
e._c._o1.expectStaticType<Exactly<Object>>();
|
||||
e._o3.expectStaticType<Exactly<Object>>();
|
||||
} finally {
|
||||
e as F;
|
||||
e._c._o1!;
|
||||
|
@ -283,8 +283,8 @@ void assignedButNotPromotableInTry_promotedInFinally(E e, E e2) {
|
|||
e = e2;
|
||||
e._c._o1!;
|
||||
e._o3!;
|
||||
e._c._o1.expectStaticType<Exactly<Object?>>();
|
||||
e._o3.expectStaticType<Exactly<Object?>>();
|
||||
e._c._o1.expectStaticType<Exactly<Object>>();
|
||||
e._o3.expectStaticType<Exactly<Object>>();
|
||||
} finally {
|
||||
e as F;
|
||||
e._c._o1!;
|
||||
|
|
|
@ -29,9 +29,9 @@ class C1 {
|
|||
final int? notPrivate = 0;
|
||||
// ^^^^^^^^^^
|
||||
// [context 3] 'notPrivate' couldn't be promoted because field promotion is only available in Dart 3.2 and above. See http://dart.dev/go/non-promo-field-promotion-unavailable
|
||||
// [context 3] 'notPrivate' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'notPrivate' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 10] 'notPrivate' couldn't be promoted because field promotion is only available in Dart 3.2 and above.
|
||||
// [context 10] 'notPrivate' refers to a public field so it couldn't be promoted.
|
||||
// [context 10] 'notPrivate' refers to a public property so it couldn't be promoted.
|
||||
int? _notFinal = 0;
|
||||
// ^^^^^^^^^
|
||||
// [context 4] '_notFinal' couldn't be promoted because field promotion is only available in Dart 3.2 and above. See http://dart.dev/go/non-promo-field-promotion-unavailable
|
||||
|
|
|
@ -14,8 +14,8 @@ class C {
|
|||
// [context 4] '_privateGetter' refers to a getter so it couldn't be promoted.
|
||||
final int? publicField;
|
||||
// ^^^^^^^^^^^
|
||||
// [context 2] 'publicField' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'publicField' refers to a public field so it couldn't be promoted.
|
||||
// [context 2] 'publicField' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'publicField' refers to a public property so it couldn't be promoted.
|
||||
int? _nonFinalField;
|
||||
// ^^^^^^^^^^^^^^
|
||||
// [context 3] '_nonFinalField' refers to a non-final field so it couldn't be promoted. See http://dart.dev/go/non-promo-non-final-field
|
||||
|
|
|
@ -34,14 +34,14 @@ mixin M {
|
|||
// [context 43] '_notField' refers to a getter so it couldn't be promoted.
|
||||
final int? notPrivate = 0;
|
||||
// ^^^^^^^^^^
|
||||
// [context 2] 'notPrivate' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'notPrivate' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 14] 'notPrivate' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 20] 'notPrivate' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 26] 'notPrivate' refers to a public field so it couldn't be promoted.
|
||||
// [context 32] 'notPrivate' refers to a public field so it couldn't be promoted.
|
||||
// [context 38] 'notPrivate' refers to a public field so it couldn't be promoted.
|
||||
// [context 44] 'notPrivate' refers to a public field so it couldn't be promoted.
|
||||
// [context 2] 'notPrivate' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'notPrivate' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 14] 'notPrivate' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 20] 'notPrivate' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 26] 'notPrivate' refers to a public property so it couldn't be promoted.
|
||||
// [context 32] 'notPrivate' refers to a public property so it couldn't be promoted.
|
||||
// [context 38] 'notPrivate' refers to a public property so it couldn't be promoted.
|
||||
// [context 44] 'notPrivate' refers to a public property so it couldn't be promoted.
|
||||
int? _notFinal = 0;
|
||||
// ^^^^^^^^^
|
||||
// [context 3] '_notFinal' refers to a non-final field so it couldn't be promoted. See http://dart.dev/go/non-promo-non-final-field
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
class C1 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 1] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 50] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 1] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 50] 'bad' refers to a public property so it couldn't be promoted.
|
||||
f(int i) {}
|
||||
}
|
||||
|
||||
|
@ -26,8 +26,8 @@ required_unnamed(C1 c) {
|
|||
class C2 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 2] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 51] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 2] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 51] 'bad' refers to a public property so it couldn't be promoted.
|
||||
f([int i = 0]) {}
|
||||
}
|
||||
|
||||
|
@ -43,8 +43,8 @@ optional_unnamed(C2 c) {
|
|||
class C3 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 3] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 52] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 3] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 52] 'bad' refers to a public property so it couldn't be promoted.
|
||||
f({required int i}) {}
|
||||
}
|
||||
|
||||
|
@ -60,8 +60,8 @@ required_named(C3 c) {
|
|||
class C4 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 4] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 53] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 4] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 53] 'bad' refers to a public property so it couldn't be promoted.
|
||||
f({int i = 0}) {}
|
||||
}
|
||||
|
||||
|
@ -77,8 +77,8 @@ optional_named(C4 c) {
|
|||
class C5 {
|
||||
List<int>? bad;
|
||||
// ^^^
|
||||
// [context 5] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 54] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 5] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 54] 'bad' refers to a public property so it couldn't be promoted.
|
||||
f<T>(List<T> x) {}
|
||||
}
|
||||
|
||||
|
@ -94,8 +94,8 @@ type_inferred(C5 c) {
|
|||
class C6 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 6] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 55] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 6] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 55] 'bad' refers to a public property so it couldn't be promoted.
|
||||
C6(int i);
|
||||
}
|
||||
|
||||
|
@ -111,8 +111,8 @@ C6? constructor_with_implicit_new(C6 c) {
|
|||
class C7 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 7] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 56] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 7] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 56] 'bad' refers to a public property so it couldn't be promoted.
|
||||
C7(int i);
|
||||
}
|
||||
|
||||
|
@ -128,8 +128,8 @@ C7? constructor_with_explicit_new(C7 c) {
|
|||
class C8 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 8] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 57] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 8] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 57] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
userDefinableBinaryOpRhs(C8 c) {
|
||||
|
@ -180,10 +180,10 @@ equalRhs(C10 c, D10 d) {
|
|||
class C11 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 9] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 10] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 58] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 59] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 9] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 10] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 58] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 59] 'bad' refers to a public property so it couldn't be promoted.
|
||||
f(bool b) {}
|
||||
}
|
||||
|
||||
|
@ -204,10 +204,10 @@ andOperand(C11 c, bool b) {
|
|||
class C12 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 11] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 12] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 60] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 61] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 11] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 12] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 60] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 61] 'bad' refers to a public property so it couldn't be promoted.
|
||||
f(bool b) {}
|
||||
}
|
||||
|
||||
|
@ -228,8 +228,8 @@ orOperand(C12 c, bool b) {
|
|||
class C13 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 13] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 62] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 13] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 62] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
assertStatementCondition(C13 c) {
|
||||
|
@ -244,8 +244,8 @@ assertStatementCondition(C13 c) {
|
|||
class C14 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 14] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 63] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 14] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 63] 'bad' refers to a public property so it couldn't be promoted.
|
||||
C14.assertInitializerCondition(C14 c)
|
||||
: bad = c.bad!,
|
||||
assert(c.bad);
|
||||
|
@ -258,8 +258,8 @@ class C14 {
|
|||
class C15 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 15] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 64] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 15] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 64] 'bad' refers to a public property so it couldn't be promoted.
|
||||
f(bool b) {}
|
||||
}
|
||||
|
||||
|
@ -275,14 +275,14 @@ notOperand(C15 c) {
|
|||
class C16 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 16] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 17] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 18] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 19] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 65] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 66] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 67] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 68] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 16] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 17] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 18] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 19] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 65] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 66] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 67] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 68] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
forLoopCondition(C16 c) {
|
||||
|
@ -312,8 +312,8 @@ forLoopCondition(C16 c) {
|
|||
class C17 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 20] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 69] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 20] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 69] 'bad' refers to a public property so it couldn't be promoted.
|
||||
f(int i) {}
|
||||
}
|
||||
|
||||
|
@ -329,8 +329,8 @@ conditionalExpressionCondition(C17 c) {
|
|||
class C18 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 21] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 70] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 21] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 70] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
doLoopCondition(C18 c) {
|
||||
|
@ -345,14 +345,14 @@ doLoopCondition(C18 c) {
|
|||
class C19 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 22] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 23] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 24] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 25] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 71] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 72] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 73] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 74] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 22] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 23] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 24] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 25] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 71] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 72] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 73] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 74] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
ifCondition(C19 c) {
|
||||
|
@ -382,8 +382,8 @@ ifCondition(C19 c) {
|
|||
class C20 {
|
||||
bool? bad;
|
||||
// ^^^
|
||||
// [context 26] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 75] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 26] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 75] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
whileCondition(C20 c) {
|
||||
|
@ -398,8 +398,8 @@ whileCondition(C20 c) {
|
|||
class C21 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 27] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 76] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 27] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 76] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
assignmentRhs(C21 c, int i) {
|
||||
|
@ -414,8 +414,8 @@ assignmentRhs(C21 c, int i) {
|
|||
class C22 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 28] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 77] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 28] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 77] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
variableInitializer(C22 c) {
|
||||
|
@ -430,8 +430,8 @@ variableInitializer(C22 c) {
|
|||
class C23 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 29] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 78] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 29] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 78] 'bad' refers to a public property so it couldn't be promoted.
|
||||
final int x;
|
||||
final int y;
|
||||
C23.constructorInitializer(C23 c)
|
||||
|
@ -446,14 +446,14 @@ class C23 {
|
|||
class C24 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 30] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 31] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 32] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 33] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 79] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 80] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 81] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 82] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 30] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 31] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 32] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 33] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 79] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 80] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 81] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 82] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
forVariableInitializer(C24 c) {
|
||||
|
@ -483,14 +483,14 @@ forVariableInitializer(C24 c) {
|
|||
class C25 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 34] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 35] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 36] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 37] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 83] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 84] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 85] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 86] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 34] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 35] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 36] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 37] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 83] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 84] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 85] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 86] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
forAssignmentInitializer(C25 c, int i) {
|
||||
|
@ -520,8 +520,8 @@ forAssignmentInitializer(C25 c, int i) {
|
|||
class C26 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 38] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 87] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 38] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 87] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
compoundAssignmentRhs(C26 c) {
|
||||
|
@ -537,8 +537,8 @@ compoundAssignmentRhs(C26 c) {
|
|||
class C27 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 39] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 88] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 39] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 88] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
indexGet(C27 c, List<int> values) {
|
||||
|
@ -553,8 +553,8 @@ indexGet(C27 c, List<int> values) {
|
|||
class C28 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 40] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 89] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 40] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 89] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
indexSet(C28 c, List<int> values) {
|
||||
|
@ -569,8 +569,8 @@ indexSet(C28 c, List<int> values) {
|
|||
class C29 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 41] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 90] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 41] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 90] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
indexSetCompound(C29 c, List<int> values) {
|
||||
|
@ -585,8 +585,8 @@ indexSetCompound(C29 c, List<int> values) {
|
|||
class C30 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 42] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 91] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 42] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 91] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
indexSetIfNull(C30 c, List<int?> values) {
|
||||
|
@ -601,10 +601,10 @@ indexSetIfNull(C30 c, List<int?> values) {
|
|||
class C31 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 43] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 44] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 92] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 93] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 43] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 44] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 92] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 93] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
indexSetPreIncDec(C31 c, List<int> values) {
|
||||
|
@ -624,10 +624,10 @@ indexSetPreIncDec(C31 c, List<int> values) {
|
|||
class C32 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 45] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 46] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 94] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 95] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 45] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 46] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 94] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 95] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
indexSetPostIncDec(C32 c, List<int> values) {
|
||||
|
@ -651,8 +651,8 @@ extension E33 on int {
|
|||
class C33 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 47] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 96] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 47] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 96] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
explicitExtensionInvocation(C33 c) {
|
||||
|
@ -667,8 +667,8 @@ explicitExtensionInvocation(C33 c) {
|
|||
class C34 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 48] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 97] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 48] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 97] 'bad' refers to a public property so it couldn't be promoted.
|
||||
C34(int value);
|
||||
}
|
||||
|
||||
|
@ -686,8 +686,8 @@ class D34 extends C34 {
|
|||
class C35 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 49] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 98] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 49] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 98] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
indexSetRhs(C35 c, List<int> x) {
|
||||
|
|
|
@ -31,16 +31,16 @@ class C {
|
|||
extension E on C {
|
||||
int? get i => null;
|
||||
// ^
|
||||
// [context 1] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 2] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 3] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 4] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 5] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 6] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 7] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 8] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 9] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 10] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 1] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 7] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 8] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 9] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 10] 'i' refers to a public property so it couldn't be promoted.
|
||||
int? get j => null;
|
||||
}
|
||||
|
||||
|
|
|
@ -5,18 +5,18 @@
|
|||
class C {
|
||||
int? i;
|
||||
// ^
|
||||
// [context 1] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 8] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 9] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 10] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 11] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 12] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 1] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 8] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 9] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 10] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 11] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 12] 'i' refers to a public property so it couldn't be promoted.
|
||||
int? j;
|
||||
|
||||
get_field_via_explicit_this() {
|
||||
|
|
|
@ -10,22 +10,22 @@
|
|||
class C1 {
|
||||
List<int>? bad;
|
||||
// ^^^
|
||||
// [context 1] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 9] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 10] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 11] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 12] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 13] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 14] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 15] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 16] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 1] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 9] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 10] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 11] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 12] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 13] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 14] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 15] 'bad' refers to a public property so it couldn't be promoted.
|
||||
// [context 16] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
forStatement(C1 c) {
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
class C1 {
|
||||
List<int>? bad;
|
||||
// ^^^
|
||||
// [context 1] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 1] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
test(C1 c) sync* {
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
class C1 {
|
||||
C2? bad;
|
||||
// ^^^
|
||||
// [context 1] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 1] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
class C2 {
|
||||
|
@ -30,8 +30,8 @@ class C3 {
|
|||
C4? ok;
|
||||
C5? bad;
|
||||
// ^^^
|
||||
// [context 2] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 2] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
class C4 {}
|
||||
|
@ -60,8 +60,8 @@ extension_invocation_method(C3 c) {
|
|||
class C6 {
|
||||
C7? bad;
|
||||
// ^^^
|
||||
// [context 3] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 9] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 3] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 9] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
class C7 {
|
||||
|
@ -81,8 +81,8 @@ instance_getter_invocation(C6 c) {
|
|||
class C8 {
|
||||
C10? bad;
|
||||
// ^^^
|
||||
// [context 4] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 10] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 4] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 10] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
class C10 {}
|
||||
|
@ -103,8 +103,8 @@ extension_invocation_getter(C8 c) {
|
|||
class C11 {
|
||||
void Function()? bad;
|
||||
// ^^^
|
||||
// [context 5] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 11] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 5] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 11] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
function_invocation(C11 c) {
|
||||
|
@ -119,8 +119,8 @@ function_invocation(C11 c) {
|
|||
class C12 {
|
||||
C13? bad;
|
||||
// ^^^
|
||||
// [context 6] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 12] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 6] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 12] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
class C13 {
|
||||
|
|
|
@ -9,18 +9,18 @@
|
|||
class C {
|
||||
int? i;
|
||||
// ^
|
||||
// [context 3] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'i' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 10] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 11] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 12] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 13] 'i' refers to a public field so it couldn't be promoted.
|
||||
// [context 3] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 10] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 11] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 12] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 13] 'i' refers to a public property so it couldn't be promoted.
|
||||
void Function()? f;
|
||||
// ^
|
||||
// [context 7] 'f' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 14] 'f' refers to a public field so it couldn't be promoted.
|
||||
// [context 7] 'f' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 14] 'f' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
extension on int {
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
class C1 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 1] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 1] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
userDefinableBinaryOpLhs(C1 c) {
|
||||
|
@ -24,8 +24,8 @@ userDefinableBinaryOpLhs(C1 c) {
|
|||
class C2 {
|
||||
int? bad;
|
||||
// ^^^
|
||||
// [context 2] 'bad' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'bad' refers to a public field so it couldn't be promoted.
|
||||
// [context 2] 'bad' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'bad' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
userDefinableUnaryOp(C2 c) {
|
||||
|
|
|
@ -9,44 +9,44 @@
|
|||
class C {
|
||||
List<int>? listQuestion;
|
||||
// ^^^^^^^^^^^^
|
||||
// [context 1] 'listQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'listQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 11] 'listQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 17] 'listQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 21] 'listQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 27] 'listQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 1] 'listQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'listQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 11] 'listQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 17] 'listQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 21] 'listQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 27] 'listQuestion' refers to a public property so it couldn't be promoted.
|
||||
Object? objectQuestion;
|
||||
// ^^^^^^^^^^^^^^
|
||||
// [context 4] 'objectQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'objectQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 9] 'objectQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 10] 'objectQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 14] 'objectQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 15] 'objectQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 20] 'objectQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 24] 'objectQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 25] 'objectQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 26] 'objectQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 30] 'objectQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 31] 'objectQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 4] 'objectQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 8] 'objectQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 9] 'objectQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 10] 'objectQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 14] 'objectQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 15] 'objectQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 20] 'objectQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 24] 'objectQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 25] 'objectQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 26] 'objectQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 30] 'objectQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 31] 'objectQuestion' refers to a public property so it couldn't be promoted.
|
||||
Set<int>? setQuestion;
|
||||
// ^^^^^^^^^^^
|
||||
// [context 2] 'setQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'setQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 12] 'setQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 16] 'setQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 18] 'setQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 22] 'setQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 28] 'setQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 32] 'setQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 2] 'setQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'setQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 12] 'setQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 16] 'setQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 18] 'setQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 22] 'setQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 28] 'setQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 32] 'setQuestion' refers to a public property so it couldn't be promoted.
|
||||
Map<int, int>? mapQuestion;
|
||||
// ^^^^^^^^^^^
|
||||
// [context 3] 'mapQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'mapQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 13] 'mapQuestion' refers to a public field so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 19] 'mapQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 23] 'mapQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 29] 'mapQuestion' refers to a public field so it couldn't be promoted.
|
||||
// [context 3] 'mapQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'mapQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 13] 'mapQuestion' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 19] 'mapQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 23] 'mapQuestion' refers to a public property so it couldn't be promoted.
|
||||
// [context 29] 'mapQuestion' refers to a public property so it couldn't be promoted.
|
||||
}
|
||||
|
||||
list_from_list_question(C c) {
|
||||
|
|
|
@ -5,18 +5,18 @@
|
|||
class C {
|
||||
int? get i => null;
|
||||
// ^
|
||||
// [context 1] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 2] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 3] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 4] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 5] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 6] 'i' refers to a getter so it couldn't be promoted. See http://dart.dev/go/non-promo-non-field
|
||||
// [context 7] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 8] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 9] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 10] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 11] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 12] 'i' refers to a getter so it couldn't be promoted.
|
||||
// [context 1] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 2] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 3] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 4] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 5] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 6] 'i' refers to a public property so it couldn't be promoted. See http://dart.dev/go/non-promo-public-field
|
||||
// [context 7] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 8] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 9] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 10] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 11] 'i' refers to a public property so it couldn't be promoted.
|
||||
// [context 12] 'i' refers to a public property so it couldn't be promoted.
|
||||
int? get j => null;
|
||||
|
||||
get_property_via_explicit_this() {
|
||||
|
|
Loading…
Reference in a new issue