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

Unified Diff: sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart

Issue 258753004: Use UnmodifiableMapView in compiler (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: a few more nits Created 6 years, 8 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
Index: sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart
index a4f88c2f31249cf227cd1a0d8a895d12189de20e..5ae18d7c68b2cd7aff3f4e5b3cbc3287757f41f9 100644
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirrors.dart
@@ -4,7 +4,7 @@
library dart2js.mirrors;
-import 'dart:collection' show UnmodifiableListView;
+import 'dart:collection' show UnmodifiableListView, UnmodifiableMapView;
import '../elements/elements.dart';
import '../scanner/scannerlib.dart';
@@ -13,15 +13,12 @@ import '../dart2jslib.dart';
import '../dart_types.dart';
import '../tree/tree.dart';
import '../util/util.dart'
- show Spannable,
- Link,
- LinkBuilder,
- NO_LOCATION_SPANNABLE;
+ show Link,
+ LinkBuilder;
import '../util/characters.dart' show $CR, $LF;
import 'source_mirrors.dart';
import 'mirrors_util.dart';
-import 'util.dart';
part 'dart2js_library_mirror.dart';
part 'dart2js_type_mirrors.dart';
@@ -32,6 +29,11 @@ part 'dart2js_instance_mirrors.dart';
// Utility types and functions for the dart2js mirror system
//------------------------------------------------------------------------------
+bool _includeLibrary(Dart2JsLibraryMirror mirror) {
+ return const bool.fromEnvironment("list_all_libraries") ||
+ !mirror._element.isInternalLibrary;
+}
+
bool _isPrivate(String name) {
return name.startsWith('_');
}
@@ -282,30 +284,33 @@ abstract class Dart2JsElementMirror extends Dart2JsDeclarationMirror {
class Dart2JsMirrorSystem extends MirrorSystem {
final Compiler compiler;
- Map<Uri, Dart2JsLibraryMirror> _libraries;
Map<LibraryElement, Dart2JsLibraryMirror> _libraryMap;
+ UnmodifiableMapView<Uri, LibraryMirror> _filteredLibraries;
- Dart2JsMirrorSystem(this.compiler)
- : _libraryMap = new Map<LibraryElement, Dart2JsLibraryMirror>();
+ Dart2JsMirrorSystem(this.compiler);
IsolateMirror get isolate => null;
void _ensureLibraries() {
- if (_libraries == null) {
- _libraries = new Map<Uri, Dart2JsLibraryMirror>();
+ if (_filteredLibraries == null) {
+ var filteredLibs = new Map<Uri, LibraryMirror>();
+ _libraryMap = new Map<LibraryElement, Dart2JsLibraryMirror>();
compiler.libraries.forEach((_, LibraryElement v) {
var mirror = new Dart2JsLibraryMirror(mirrorSystem, v);
- _libraries[mirror.uri] = mirror;
+ if (_includeLibrary(mirror)) {
+ filteredLibs[mirror.uri] = mirror;
+ }
_libraryMap[v] = mirror;
});
+
+ _filteredLibraries =
+ new UnmodifiableMapView<Uri, LibraryMirror>(filteredLibs);
}
}
Map<Uri, LibraryMirror> get libraries {
_ensureLibraries();
- return new FilteredImmutableMap<Uri, LibraryMirror>(_libraries,
- (library) => const bool.fromEnvironment("list_all_libraries") ||
- !library._element.isInternalLibrary);
+ return _filteredLibraries;
}
Dart2JsLibraryMirror _getLibrary(LibraryElement element) =>
@@ -360,20 +365,22 @@ class Dart2JsMirrorSystem extends MirrorSystem {
}
abstract class ContainerMixin {
- Map<Symbol, DeclarationMirror> _declarations;
+ UnmodifiableMapView<Symbol, DeclarationMirror> _declarations;
void _ensureDeclarations() {
if (_declarations == null) {
- _declarations = <Symbol, DeclarationMirror>{};
+ var declarations = <Symbol, DeclarationMirror>{};
_forEachElement((Element element) {
for (DeclarationMirror mirror in _getDeclarationMirrors(element)) {
assert(invariant(_element,
- !_declarations.containsKey(mirror.simpleName),
+ !declarations.containsKey(mirror.simpleName),
message: "Declaration name '${nameOf(mirror)}' "
"is not unique in $_element."));
- _declarations[mirror.simpleName] = mirror;
+ declarations[mirror.simpleName] = mirror;
}
});
+ _declarations =
+ new UnmodifiableMapView<Symbol, DeclarationMirror>(declarations);
}
}
@@ -385,7 +392,7 @@ abstract class ContainerMixin {
Map<Symbol, DeclarationMirror> get declarations {
_ensureDeclarations();
- return new ImmutableMapWrapper<Symbol, DeclarationMirror>(_declarations);
+ return _declarations;
}
}
@@ -433,8 +440,7 @@ DeclarationMirror _convertElementToDeclarationMirror(Dart2JsMirrorSystem system,
* library.
*/
// TODO(ahe): Superclasses? Is this really a mirror?
-class Dart2JsCompilationUnitMirror extends Dart2JsMirror
- with ContainerMixin {
+class Dart2JsCompilationUnitMirror extends Dart2JsMirror with ContainerMixin {
final Dart2JsLibraryMirror _library;
final CompilationUnitElement _element;

Powered by Google App Engine
This is Rietveld 408576698