@@ -33,55 +33,42 @@ abstract class NameSpace {
3333 LookupResult ? lookupLocalMember (String name);
3434
3535 void forEachLocalExtension (void Function (ExtensionBuilder member) f);
36+ }
3637
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});
4040
41+ /// Adds [builder] to the extensions in this name space.
42+ void addExtension (ExtensionBuilder builder);
43+ }
44+
45+ abstract class ComputedNameSpace implements NameSpace {
4146 /// Returns a filtered iterator of members and setters mapped in this name
4247 /// space.
4348 ///
4449 /// 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 >();
5052}
5153
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 ._;
5757
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} );
6060}
6161
6262abstract class DeclarationNameSpace implements NameSpace {
6363 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});
7764}
7865
7966abstract class MutableDeclarationNameSpace
8067 implements DeclarationNameSpace , MutableNameSpace {
8168 void addConstructor (String name, MemberBuilder builder);
8269}
8370
84- base class NameSpaceImpl implements NameSpace , MutableNameSpace {
71+ base class NameSpaceImpl implements NameSpace , ComputedMutableNameSpace {
8572 Map <String , NamedBuilder >? _getables;
8673 Map <String , NamedBuilder >? _setables;
8774 Set <ExtensionBuilder >? _extensions;
@@ -96,7 +83,12 @@ base class NameSpaceImpl implements NameSpace, MutableNameSpace {
9683
9784 @override
9885 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}) {
10092 if (setter) {
10193 assert (
10294 _setables == null ||
@@ -118,16 +110,27 @@ base class NameSpaceImpl implements NameSpace, MutableNameSpace {
118110 }
119111 }
120112
113+ @override
114+ void replaceLocalMember (String name, NamedBuilder member,
115+ {required bool setter}) {
116+ _addLocalMember (name, member, setter: setter, allowReplace: true );
117+ }
118+
121119 @override
122120 void addExtension (ExtensionBuilder builder) {
123121 (_extensions ?? = {}).add (builder);
124122 }
125123
126124 @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 );
131134 }
132135
133136 @override
@@ -153,12 +156,6 @@ base class NameSpaceImpl implements NameSpace, MutableNameSpace {
153156 LookupResult ? lookupLocalMember (String name) {
154157 return LookupResult .createResult (_getables? [name], _setables? [name]);
155158 }
156-
157- @override
158- Iterator <NamedBuilder > get unfilteredIterator => new ScopeIterator (
159- _getables? .values.iterator,
160- _setables? .values.iterator,
161- _extensions? .iterator);
162159}
163160
164161final class SourceLibraryNameSpace extends NameSpaceImpl {
@@ -267,19 +264,6 @@ abstract base class DeclarationNameSpaceBase extends NameSpaceImpl
267264
268265 @override
269266 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- }
283267}
284268
285269final class SourceDeclarationNameSpace extends DeclarationNameSpaceBase {
0 commit comments