Skip to content

Commit 9313fba

Browse files
authored
Make a few more nullable fields late final (#2883)
1 parent 7009fb8 commit 9313fba

7 files changed

+129
-173
lines changed

lib/src/generator/templates.runtime_renderers.dart

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1699,11 +1699,11 @@ class _Renderer_Class extends RendererBase<Class> {
16991699
List<String> remainingNames) =>
17001700
self.renderSimpleVariable(
17011701
c, remainingNames, 'List<ModelElement>'),
1702-
isNullValue: (CT_ c) => c.allModelElements == null,
1703-
renderValue: (CT_ c, RendererBase<CT_> r,
1702+
renderIterable: (CT_ c, RendererBase<CT_> r,
17041703
List<MustachioNode> ast, StringSink sink) {
1705-
renderSimple(c.allModelElements, ast, r.template, sink,
1706-
parent: r, getters: _invisibleGetters['List']!);
1704+
return c.allModelElements.map((e) => _render_ModelElement(
1705+
e, ast, r.template, sink,
1706+
parent: r));
17071707
},
17081708
),
17091709
'constantFields': Property(
@@ -3688,11 +3688,11 @@ class _Renderer_ContainerMember extends RendererBase<ContainerMember> {
36883688
nextProperty,
36893689
[...remainingNames.skip(1)]);
36903690
},
3691-
isNullValue: (CT_ c) => c.definingEnclosingContainer == null,
3691+
isNullValue: (CT_ c) => false,
36923692
renderValue: (CT_ c, RendererBase<CT_> r,
36933693
List<MustachioNode> ast, StringSink sink) {
36943694
_render_Container(
3695-
c.definingEnclosingContainer!, ast, r.template, sink,
3695+
c.definingEnclosingContainer, ast, r.template, sink,
36963696
parent: r);
36973697
},
36983698
),
@@ -4741,11 +4741,11 @@ class _Renderer_Extension extends RendererBase<Extension> {
47414741
List<String> remainingNames) =>
47424742
self.renderSimpleVariable(
47434743
c, remainingNames, 'List<ModelElement>'),
4744-
isNullValue: (CT_ c) => c.allModelElements == null,
4745-
renderValue: (CT_ c, RendererBase<CT_> r,
4744+
renderIterable: (CT_ c, RendererBase<CT_> r,
47464745
List<MustachioNode> ast, StringSink sink) {
4747-
renderSimple(c.allModelElements, ast, r.template, sink,
4748-
parent: r, getters: _invisibleGetters['List']!);
4746+
return c.allModelElements.map((e) => _render_ModelElement(
4747+
e, ast, r.template, sink,
4748+
parent: r));
47494749
},
47504750
),
47514751
'alwaysApplies': Property(
@@ -6908,11 +6908,10 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
69086908
List<String> remainingNames) =>
69096909
self.renderSimpleVariable(
69106910
c, remainingNames, 'List<Field>'),
6911-
isNullValue: (CT_ c) => c.allFields == null,
6912-
renderValue: (CT_ c, RendererBase<CT_> r,
6911+
renderIterable: (CT_ c, RendererBase<CT_> r,
69136912
List<MustachioNode> ast, StringSink sink) {
6914-
renderSimple(c.allFields, ast, r.template, sink,
6915-
parent: r, getters: _invisibleGetters['List']!);
6913+
return c.allFields.map((e) =>
6914+
_render_Field(e, ast, r.template, sink, parent: r));
69166915
},
69176916
),
69186917
'allModelElements': Property(
@@ -6921,11 +6920,11 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
69216920
List<String> remainingNames) =>
69226921
self.renderSimpleVariable(
69236922
c, remainingNames, 'List<ModelElement>'),
6924-
isNullValue: (CT_ c) => c.allModelElements == null,
6925-
renderValue: (CT_ c, RendererBase<CT_> r,
6923+
renderIterable: (CT_ c, RendererBase<CT_> r,
69266924
List<MustachioNode> ast, StringSink sink) {
6927-
renderSimple(c.allModelElements, ast, r.template, sink,
6928-
parent: r, getters: _invisibleGetters['List']!);
6925+
return c.allModelElements.map((e) => _render_ModelElement(
6926+
e, ast, r.template, sink,
6927+
parent: r));
69296928
},
69306929
),
69316930
'constantFields': Property(
@@ -7120,24 +7119,22 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
71207119
List<String> remainingNames) =>
71217120
self.renderSimpleVariable(
71227121
c, remainingNames, 'Iterable<Method>'),
7123-
isNullValue: (CT_ c) => c.inheritedMethods == null,
7124-
renderValue: (CT_ c, RendererBase<CT_> r,
7122+
renderIterable: (CT_ c, RendererBase<CT_> r,
71257123
List<MustachioNode> ast, StringSink sink) {
7126-
renderSimple(c.inheritedMethods, ast, r.template, sink,
7127-
parent: r, getters: _invisibleGetters['Iterable']!);
7124+
return c.inheritedMethods.map((e) =>
7125+
_render_Method(e, ast, r.template, sink, parent: r));
71287126
},
71297127
),
71307128
'inheritedOperators': Property(
71317129
getValue: (CT_ c) => c.inheritedOperators,
71327130
renderVariable: (CT_ c, Property<CT_> self,
71337131
List<String> remainingNames) =>
71347132
self.renderSimpleVariable(
7135-
c, remainingNames, 'Iterable<Operator>'),
7136-
isNullValue: (CT_ c) => c.inheritedOperators == null,
7137-
renderValue: (CT_ c, RendererBase<CT_> r,
7133+
c, remainingNames, 'List<Operator>'),
7134+
renderIterable: (CT_ c, RendererBase<CT_> r,
71387135
List<MustachioNode> ast, StringSink sink) {
7139-
renderSimple(c.inheritedOperators, ast, r.template, sink,
7140-
parent: r, getters: _invisibleGetters['Iterable']!);
7136+
return c.inheritedOperators.map((e) =>
7137+
_render_Operator(e, ast, r.template, sink, parent: r));
71417138
},
71427139
),
71437140
'instanceFields': Property(

lib/src/model/class.dart

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,13 @@ class Class extends InheritingContainer
2121
packageGraph.specialClasses.addSpecial(this);
2222
}
2323

24-
List<ModelElement>? _allModelElements;
25-
2624
@override
27-
List<ModelElement>? get allModelElements {
28-
_allModelElements ??= <ModelElement>[
29-
...super.allModelElements!,
30-
...constructors,
31-
];
32-
return _allModelElements;
33-
}
25+
// TODO(srawlins): Figure out what we elsewhere in dartdoc.
26+
// ignore: overridden_fields
27+
late final List<ModelElement> allModelElements = [
28+
...super.allModelElements,
29+
...constructors,
30+
];
3431

3532
/// Returns the library that encloses this element.
3633
@override
@@ -118,14 +115,14 @@ class Class extends InheritingContainer
118115

119116
@override
120117
Iterable<Field> get instanceFields =>
121-
_instanceFields ??= allFields!.where((f) => !f.isStatic);
118+
_instanceFields ??= allFields.where((f) => !f.isStatic);
122119

123120
@override
124121
bool get publicInheritedInstanceFields =>
125122
publicInstanceFields.every((f) => f.isInherited);
126123

127124
@override
128-
Iterable<Field> get constantFields => allFields!.where((f) => f.isConst);
125+
Iterable<Field> get constantFields => allFields.where((f) => f.isConst);
129126

130127
static Iterable<MapEntry<String, CommentReferable>> _constructorGenerator(
131128
Iterable<Constructor> source) sync* {

lib/src/model/container_member.dart

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,8 @@ mixin ContainerMember on ModelElement implements EnclosedElement {
1818
// implemented.
1919
bool get isExtended => false;
2020

21-
Container? _definingEnclosingContainer;
22-
23-
Container? get definingEnclosingContainer {
24-
_definingEnclosingContainer ??=
25-
modelBuilder.fromElement(element!.enclosingElement!) as Container?;
26-
return _definingEnclosingContainer;
27-
}
21+
late final Container definingEnclosingContainer =
22+
modelBuilder.fromElement(element!.enclosingElement!) as Container;
2823

2924
@override
3025
Set<Feature> get features => {

lib/src/model/extension.dart

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,13 @@ class Extension extends Container implements EnclosedElement {
9292
return _typeParameters!;
9393
}
9494

95-
List<ModelElement>? _allModelElements;
9695
@override
97-
List<ModelElement>? get allModelElements {
98-
_allModelElements ??= List.from(
99-
quiver.concat<ModelElement>([
100-
super.allModelElements!,
101-
typeParameters,
102-
]),
103-
growable: false);
104-
return _allModelElements;
105-
}
96+
late final List<ModelElement> allModelElements = List.of(
97+
quiver.concat<ModelElement>([
98+
super.allModelElements!,
99+
typeParameters,
100+
]),
101+
growable: false);
106102

107103
@override
108104
String get filePath => '${library.dirName}/$fileName';

lib/src/model/inheritable.dart

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ mixin Inheritable on ContainerMember {
9696
}
9797
// This is still OK because we're never supposed to cloak public
9898
// classes.
99-
if (definingEnclosingContainer!.isCanonical &&
100-
definingEnclosingContainer!.isPublic) {
99+
if (definingEnclosingContainer.isCanonical &&
100+
definingEnclosingContainer.isPublic) {
101101
assert(definingEnclosingContainer == found);
102102
}
103103
if (found != null) {
@@ -116,8 +116,7 @@ mixin Inheritable on ContainerMember {
116116
inheritance
117117
.addAll((enclosingElement as InheritingContainer).inheritanceChain);
118118
var object = packageGraph.specialClasses[SpecialClass.object];
119-
if (!inheritance.contains(definingEnclosingContainer) &&
120-
definingEnclosingContainer != null) {
119+
if (!inheritance.contains(definingEnclosingContainer)) {
121120
assert(definingEnclosingContainer == object);
122121
}
123122
// Unless the code explicitly extends dart-core's Object, we won't get
@@ -150,7 +149,7 @@ mixin Inheritable on ContainerMember {
150149
enclosingElement!.canonicalModelElement as InheritingContainer?;
151150
// The container in which this element was defined, canonical if available.
152151
Container? definingCanonical =
153-
definingEnclosingContainer!.canonicalModelElement as Container? ??
152+
definingEnclosingContainer.canonicalModelElement as Container? ??
154153
definingEnclosingContainer;
155154
// The canonical version of the element we're overriding, if available.
156155
var overriddenCanonical =

0 commit comments

Comments
 (0)