diff --git a/lib/src/model/feature.dart b/lib/src/model/feature.dart index 864f7da44d..c899c09be1 100644 --- a/lib/src/model/feature.dart +++ b/lib/src/model/feature.dart @@ -47,6 +47,7 @@ class Feature implements Privacy { // TODO(jcollins-g): consider [Comparable]? final int sortGroup; + static const lateFeature = Feature('late', 1); static const readOnly = Feature('read-only', 1); static const finalFeature = Feature('final', 2); static const writeOnly = Feature('write-only', 2); @@ -56,7 +57,6 @@ class Feature implements Privacy { static const inherited = Feature('inherited', 3); static const inheritedGetter = Feature('inherited-getter', 3); static const inheritedSetter = Feature('inherited-setter', 3); - static const lateFeature = Feature('late', 3); static const overrideFeature = Feature('override', 3); static const overrideGetter = Feature('override-getter', 3); static const overrideSetter = Feature('override-setter', 3); diff --git a/lib/src/model/getter_setter_combo.dart b/lib/src/model/getter_setter_combo.dart index 2b29f7ae07..1250232b59 100644 --- a/lib/src/model/getter_setter_combo.dart +++ b/lib/src/model/getter_setter_combo.dart @@ -42,7 +42,7 @@ mixin GetterSetterCombo on ModelElement { if (hasExplicitSetter && hasPublicSetter) ...setter.features, if (readOnly && !isFinal && !isConst) Feature.readOnly, if (writeOnly) Feature.writeOnly, - if (readWrite) Feature.readWrite, + if (readWrite && !isLate) Feature.readWrite, }; @override diff --git a/test/end2end/model_test.dart b/test/end2end/model_test.dart index 2f25e90b84..b5008924b3 100644 --- a/test/end2end/model_test.dart +++ b/test/end2end/model_test.dart @@ -219,18 +219,22 @@ void main() { expect(a.modelType.name, equals('dynamic')); expect(a.isLate, isTrue); expect(a.features, contains(Feature.lateFeature)); + expect(a.features, isNot(contains(Feature.readWrite))); expect(b.modelType.name, equals('int')); expect(b.isLate, isTrue); expect(b.features, contains(Feature.lateFeature)); + expect(b.features, isNot(contains(Feature.readWrite))); expect(cField.modelType.name, equals('dynamic')); expect(cField.isLate, isTrue); expect(cField.features, contains(Feature.lateFeature)); + expect(cField.features, isNot(contains(Feature.readWrite))); expect(dField.modelType.name, equals('double')); expect(dField.isLate, isTrue); expect(dField.features, contains(Feature.lateFeature)); + expect(dField.features, isNot(contains(Feature.readWrite))); }); test('Late final top level variables', () { @@ -239,6 +243,7 @@ void main() { expect(initializeMe.modelType.name, equals('String')); expect(initializeMe.isLate, isTrue); expect(initializeMe.features, contains(Feature.lateFeature)); + expect(initializeMe.features, isNot(contains(Feature.readWrite))); }); test('Opt out of Null safety', () {