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

Unified Diff: pkg/kernel/lib/library_index.dart

Issue 2896423002: Make LibraryIndex lazy. (Closed)
Patch Set: 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/kernel/lib/library_index.dart
diff --git a/pkg/kernel/lib/library_index.dart b/pkg/kernel/lib/library_index.dart
index 8d7c041e6ee429b3335f0ded7b726921880f6090..0708af318fa9e6f5e93655c49a669eb5ee03df57 100644
--- a/pkg/kernel/lib/library_index.dart
+++ b/pkg/kernel/lib/library_index.dart
@@ -21,13 +21,11 @@ class LibraryIndex {
/// Indexes the libraries with the URIs given in [libraryUris].
LibraryIndex(Program program, Iterable<String> libraryUris) {
- for (var uri in libraryUris) {
- _libraries[uri] = new _ClassTable();
- }
+ var libraryUriSet = libraryUris.toSet();
for (var library in program.libraries) {
- var index = _libraries['${library.importUri}'];
- if (index != null) {
- index.build(library);
+ var uri = '${library.importUri}';
+ if (libraryUriSet.contains(uri)) {
+ _libraries[uri] = new _ClassTable(library);
}
}
}
@@ -36,11 +34,11 @@ class LibraryIndex {
LibraryIndex.byUri(Program program, Iterable<Uri> libraryUris)
: this(program, libraryUris.map((uri) => '$uri'));
- /// Indexes the libraries with the URIs given in [libraryUris].
+ /// Indexes `dart:` libraries.
LibraryIndex.coreLibraries(Program program) {
for (var library in program.libraries) {
if (library.importUri.scheme == 'dart') {
- _libraries['${library.importUri}'] = new _ClassTable()..build(library);
+ _libraries['${library.importUri}'] = new _ClassTable(library);
}
}
}
@@ -51,7 +49,7 @@ class LibraryIndex {
/// are needed.
LibraryIndex.all(Program program) {
for (var library in program.libraries) {
- _libraries['${library.importUri}'] = new _ClassTable()..build(library);
+ _libraries['${library.importUri}'] = new _ClassTable(library);
}
}
@@ -130,15 +128,21 @@ class LibraryIndex {
}
class _ClassTable {
- Library library;
- final Map<String, _MemberTable> classes = <String, _MemberTable>{};
-
- void build(Library library) {
- this.library = library;
- classes[LibraryIndex.topLevel] = new _MemberTable.topLevel(this);
- for (var class_ in library.classes) {
- classes[class_.name] = new _MemberTable(this, class_);
+ final Library library;
+
+ Map<String, _MemberTable> _classes;
+
+ _ClassTable(this.library);
+
+ Map<String, _MemberTable> get classes {
+ if (_classes == null) {
+ _classes = <String, _MemberTable>{};
+ _classes[LibraryIndex.topLevel] = new _MemberTable.topLevel(this);
+ for (var class_ in library.classes) {
+ _classes[class_.name] = new _MemberTable(this, class_);
+ }
}
+ return _classes;
}
String get containerName {
@@ -179,19 +183,27 @@ class _ClassTable {
class _MemberTable {
final _ClassTable parent;
final Class class_; // Null for top-level.
- final Map<String, Member> members = <String, Member>{};
+ Map<String, Member> _members;
Library get library => parent.library;
- _MemberTable(this.parent, this.class_) {
- class_.procedures.forEach(addMember);
- class_.fields.forEach(addMember);
- class_.constructors.forEach(addMember);
- }
+ _MemberTable(this.parent, this.class_);
+
+ _MemberTable.topLevel(this.parent) : class_ = null;
- _MemberTable.topLevel(this.parent) : class_ = null {
- library.procedures.forEach(addMember);
- library.fields.forEach(addMember);
+ Map<String, Member> get members {
+ if (_members == null) {
+ _members = <String, Member>{};
+ if (class_ != null) {
+ class_.procedures.forEach(addMember);
+ class_.fields.forEach(addMember);
+ class_.constructors.forEach(addMember);
+ } else {
+ library.procedures.forEach(addMember);
+ library.fields.forEach(addMember);
+ }
+ }
+ return _members;
}
String getDisambiguatedName(Member member) {
@@ -208,7 +220,7 @@ class _MemberTable {
// be found with the LibraryIndex class.
return;
}
- members[getDisambiguatedName(member)] = member;
+ _members[getDisambiguatedName(member)] = member;
}
String get containerName {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698