@@ -33,55 +33,42 @@ abstract class NameSpace {
33
33
LookupResult ? lookupLocalMember (String name);
34
34
35
35
void forEachLocalExtension (void Function (ExtensionBuilder member) f);
36
+ }
36
37
37
- /// Returns an iterator of all members and setters mapped in this name space,
38
- /// including duplicate members mapped to the same name.
39
- Iterator <NamedBuilder > get unfilteredIterator;
38
+ abstract class MutableNameSpace implements NameSpace {
39
+ void addLocalMember (String name, NamedBuilder member, {required bool setter});
40
40
41
+ /// Adds [builder] to the extensions in this name space.
42
+ void addExtension (ExtensionBuilder builder);
43
+ }
44
+
45
+ abstract class ComputedNameSpace implements NameSpace {
41
46
/// Returns a filtered iterator of members and setters mapped in this name
42
47
/// space.
43
48
///
44
49
/// Only members of type [T] are included. If [parent] is provided, on members
45
- /// declared in [parent] are included. If [includeDuplicates] is `true` , all
46
- /// duplicates of the same name are included, otherwise, only the first
47
- /// declared member is included.
48
- Iterator <T > filteredIterator <T extends NamedBuilder >(
49
- {required bool includeDuplicates});
50
+ /// declared in [parent] are included. Duplicates are not included.
51
+ Iterator <T > filteredIterator <T extends NamedBuilder >();
50
52
}
51
53
52
- abstract class MutableNameSpace implements NameSpace {
53
- factory MutableNameSpace () = NameSpaceImpl ._;
54
-
55
- void addLocalMember (String name, NamedBuilder member,
56
- {required bool setter, bool allowReplace = false });
54
+ abstract class ComputedMutableNameSpace
55
+ implements MutableNameSpace , ComputedNameSpace {
56
+ factory ComputedMutableNameSpace () = NameSpaceImpl ._;
57
57
58
- /// Adds [builder] to the extensions in this name space.
59
- void addExtension ( ExtensionBuilder builder );
58
+ void replaceLocalMember ( String name, NamedBuilder member,
59
+ { required bool setter} );
60
60
}
61
61
62
62
abstract class DeclarationNameSpace implements NameSpace {
63
63
MemberBuilder ? lookupConstructor (String name);
64
-
65
- /// Returns an iterator of all constructors mapped in this scope,
66
- /// including duplicate constructors mapped to the same name.
67
- Iterator <MemberBuilder > get unfilteredConstructorIterator;
68
-
69
- /// Returns a filtered iterator of constructors mapped in this scope.
70
- ///
71
- /// Only members of type [T] are included. If [parent] is provided, on members
72
- /// declared in [parent] are included. If [includeDuplicates] is `true` , all
73
- /// duplicates of the same name are included, otherwise, only the first
74
- /// declared member is included.
75
- Iterator <T > filteredConstructorIterator <T extends MemberBuilder >(
76
- {required bool includeDuplicates});
77
64
}
78
65
79
66
abstract class MutableDeclarationNameSpace
80
67
implements DeclarationNameSpace , MutableNameSpace {
81
68
void addConstructor (String name, MemberBuilder builder);
82
69
}
83
70
84
- base class NameSpaceImpl implements NameSpace , MutableNameSpace {
71
+ base class NameSpaceImpl implements NameSpace , ComputedMutableNameSpace {
85
72
Map <String , NamedBuilder >? _getables;
86
73
Map <String , NamedBuilder >? _setables;
87
74
Set <ExtensionBuilder >? _extensions;
@@ -96,7 +83,12 @@ base class NameSpaceImpl implements NameSpace, MutableNameSpace {
96
83
97
84
@override
98
85
void addLocalMember (String name, NamedBuilder member,
99
- {required bool setter, bool allowReplace = false }) {
86
+ {required bool setter}) {
87
+ _addLocalMember (name, member, setter: setter, allowReplace: false );
88
+ }
89
+
90
+ void _addLocalMember (String name, NamedBuilder member,
91
+ {required bool setter, required bool allowReplace}) {
100
92
if (setter) {
101
93
assert (
102
94
_setables == null ||
@@ -118,16 +110,27 @@ base class NameSpaceImpl implements NameSpace, MutableNameSpace {
118
110
}
119
111
}
120
112
113
+ @override
114
+ void replaceLocalMember (String name, NamedBuilder member,
115
+ {required bool setter}) {
116
+ _addLocalMember (name, member, setter: setter, allowReplace: true );
117
+ }
118
+
121
119
@override
122
120
void addExtension (ExtensionBuilder builder) {
123
121
(_extensions ?? = {}).add (builder);
124
122
}
125
123
126
124
@override
127
- Iterator <T > filteredIterator <T extends NamedBuilder >(
128
- {required bool includeDuplicates}) {
129
- return new FilteredIterator <T >(unfilteredIterator,
130
- includeDuplicates: includeDuplicates);
125
+ Iterator <T > filteredIterator <T extends NamedBuilder >() {
126
+ return new FilteredIterator <T >(
127
+ new ScopeIterator (
128
+ _getables? .values.iterator,
129
+ _setables? .values.iterator,
130
+ _extensions
131
+ // Coverage-ignore(suite): Not run.
132
+ ? .iterator),
133
+ includeDuplicates: false );
131
134
}
132
135
133
136
@override
@@ -153,12 +156,6 @@ base class NameSpaceImpl implements NameSpace, MutableNameSpace {
153
156
LookupResult ? lookupLocalMember (String name) {
154
157
return LookupResult .createResult (_getables? [name], _setables? [name]);
155
158
}
156
-
157
- @override
158
- Iterator <NamedBuilder > get unfilteredIterator => new ScopeIterator (
159
- _getables? .values.iterator,
160
- _setables? .values.iterator,
161
- _extensions? .iterator);
162
159
}
163
160
164
161
final class SourceLibraryNameSpace extends NameSpaceImpl {
@@ -267,19 +264,6 @@ abstract base class DeclarationNameSpaceBase extends NameSpaceImpl
267
264
268
265
@override
269
266
MemberBuilder ? lookupConstructor (String name) => _constructors? [name];
270
-
271
- /// Returns an iterator of all constructors mapped in this scope,
272
- /// including duplicate constructors mapped to the same name.
273
- @override
274
- Iterator <MemberBuilder > get unfilteredConstructorIterator =>
275
- new ConstructorNameSpaceIterator (_constructors? .values.iterator);
276
-
277
- @override
278
- Iterator <T > filteredConstructorIterator <T extends MemberBuilder >(
279
- {required bool includeDuplicates}) {
280
- return new FilteredIterator <T >(unfilteredConstructorIterator,
281
- includeDuplicates: includeDuplicates);
282
- }
283
267
}
284
268
285
269
final class SourceDeclarationNameSpace extends DeclarationNameSpaceBase {
0 commit comments