Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(410)

Unified Diff: pkg/compiler/lib/src/kernel/element_map_impl.dart

Issue 2882523003: Add forEachLibraryMember and forEachConstructor to ElementEnvironment (Closed)
Patch Set: Updated cf. comments. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/common_elements.dart ('k') | pkg/compiler/lib/src/resolution/resolution_strategy.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/kernel/element_map_impl.dart
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index ad516675999c968a8cc0c279e90c951da1569749..5ca213c6512e5b7f57a80556edbc61f8c6d1a9e3 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -159,6 +159,13 @@ class KernelToElementMapImpl extends KernelToElementMapMixin {
return member != null ? getMember(member) : null;
}
+ void _forEachLibraryMember(KLibrary library, void f(MemberEntity member)) {
+ _KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
+ libraryEnv.forEachMember((ir.Member node) {
+ f(getMember(node));
+ });
+ }
+
ClassEntity lookupClass(KLibrary library, String name) {
_KLibraryEnv libraryEnv = _libraryEnvs[library.libraryIndex];
_KClassEnv classEnv = libraryEnv.lookupClass(name);
@@ -530,6 +537,13 @@ class KernelToElementMapImpl extends KernelToElementMapMixin {
}
}
+ void _forEachConstructor(KClass cls, void f(ConstructorEntity member)) {
+ _KClassEnv env = _classEnvs[cls.classIndex];
+ env.forEachConstructor((ir.Member member) {
+ f(getConstructor(member));
+ });
+ }
+
void _forEachClassMember(
KClass cls, void f(ClassEntity cls, MemberEntity member)) {
_KClassEnv env = _classEnvs[cls.classIndex];
@@ -709,8 +723,7 @@ class _KLibraryEnv {
_classMap.values.forEach(f);
}
- /// Return the [ir.Member] for the member [name] in [library].
- ir.Member lookupMember(String name, {bool setter: false}) {
+ void _ensureMemberMaps() {
if (_memberMap == null) {
_memberMap = <String, ir.Member>{};
_setterMap = <String, ir.Member>{};
@@ -732,7 +745,24 @@ class _KLibraryEnv {
}
}
}
- return _memberMap[name];
+ }
+
+ /// Return the [ir.Member] for the member [name] in [library].
+ ir.Member lookupMember(String name, {bool setter: false}) {
+ _ensureMemberMaps();
+ return setter ? _setterMap[name] : _memberMap[name];
+ }
+
+ void forEachMember(void f(ir.Member member)) {
+ _ensureMemberMaps();
+ _memberMap.values.forEach(f);
+ for (ir.Member member in _setterMap.values) {
+ if (member is ir.Procedure) {
+ f(member);
+ } else {
+ // Skip fields; these are also in _memberMap.
+ }
+ }
}
}
@@ -811,7 +841,7 @@ class _KClassEnv {
return _constructorMap[name];
}
- void forEachMember(f(ir.Member member)) {
+ void forEachMember(void f(ir.Member member)) {
_ensureMaps();
_memberMap.values.forEach(f);
for (ir.Member member in _setterMap.values) {
@@ -823,6 +853,11 @@ class _KClassEnv {
}
}
+ void forEachConstructor(void f(ir.Member member)) {
+ _ensureMaps();
+ _constructorMap.values.forEach(f);
+ }
+
Iterable<ConstantValue> getMetadata(KernelToElementMapImpl elementMap) {
return _metadata ??= elementMap.getMetadata(cls.annotations);
}
@@ -1020,6 +1055,18 @@ class KernelElementEnvironment implements ElementEnvironment {
}
@override
+ void forEachConstructor(
+ ClassEntity cls, void f(ConstructorEntity constructor)) {
+ elementMap._forEachConstructor(cls, f);
+ }
+
+ @override
+ void forEachLibraryMember(
+ LibraryEntity library, void f(MemberEntity member)) {
+ elementMap._forEachLibraryMember(library, f);
+ }
+
+ @override
MemberEntity lookupLibraryMember(LibraryEntity library, String name,
{bool setter: false, bool required: false}) {
MemberEntity member =
« no previous file with comments | « pkg/compiler/lib/src/common_elements.dart ('k') | pkg/compiler/lib/src/resolution/resolution_strategy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698