| Index: sdk/lib/_internal/pub/lib/src/source_registry.dart
|
| diff --git a/sdk/lib/_internal/pub/lib/src/source_registry.dart b/sdk/lib/_internal/pub/lib/src/source_registry.dart
|
| index 9d05e153274ccfd632fe851e510e0f5c0aef3a09..15c4bc12e0d8c7cd6862d85835d00a76533450bc 100644
|
| --- a/sdk/lib/_internal/pub/lib/src/source_registry.dart
|
| +++ b/sdk/lib/_internal/pub/lib/src/source_registry.dart
|
| @@ -7,21 +7,19 @@ library pub.source_registry;
|
| import 'dart:collection';
|
|
|
| import 'source.dart';
|
| +import 'source/unknown.dart';
|
|
|
| /// A class that keeps track of [Source]s used for getting packages.
|
| class SourceRegistry extends IterableBase<Source> {
|
| - final Map<String, Source> _map;
|
| + final _sources = new Map<String, Source>();
|
| Source _default;
|
|
|
| - /// Creates a new registry with no packages registered.
|
| - SourceRegistry() : _map = <String, Source>{};
|
| -
|
| /// Returns the default source, which is used when no source is specified.
|
| Source get defaultSource => _default;
|
|
|
| /// Iterates over the registered sources in name order.
|
| Iterator<Source> get iterator {
|
| - var sources = _map.values.toList();
|
| + var sources = _sources.values.toList();
|
| sources.sort((a, b) => a.name.compareTo(b.name));
|
| return sources.iterator;
|
| }
|
| @@ -29,37 +27,35 @@ class SourceRegistry extends IterableBase<Source> {
|
| /// Sets the default source. This takes a string, which must be the name of a
|
| /// registered source.
|
| void setDefault(String name) {
|
| - if (!_map.containsKey(name)) {
|
| + if (!_sources.containsKey(name)) {
|
| throw new StateError('Default source $name is not in the registry');
|
| }
|
|
|
| - _default = _map[name];
|
| + _default = _sources[name];
|
| }
|
|
|
| /// Registers a new source. This source may not have the same name as a source
|
| /// that's already been registered.
|
| void register(Source source) {
|
| - if (_map.containsKey(source.name)) {
|
| + if (_sources.containsKey(source.name)) {
|
| throw new StateError('Source registry already has a source named '
|
| '${source.name}');
|
| }
|
|
|
| - _map[source.name] = source;
|
| + _sources[source.name] = source;
|
| }
|
|
|
| - /// Returns `true` if there is a source named [name].
|
| - bool contains(String name) => _map.containsKey(name);
|
| -
|
| - /// Returns the source named [name]. Throws an error if no such source has
|
| - /// been registered. If [name] is null, returns the default source.
|
| - // TODO(rnystrom): Return a NullSource that does nothing safely so that
|
| - // calling code doesn't have to worry about it.
|
| + /// Returns the source named [name].
|
| + ///
|
| + /// Returns an [UnknownSource] if no source with that name has been
|
| + /// registered. If [name] is null, returns the default source.
|
| Source operator[](String name) {
|
| if (name == null) {
|
| if (defaultSource != null) return defaultSource;
|
| throw new StateError('No default source has been registered');
|
| }
|
| - if (_map.containsKey(name)) return _map[name];
|
| - throw new ArgumentError('No source named $name is registered');
|
| +
|
| + if (_sources.containsKey(name)) return _sources[name];
|
| + return new UnknownSource(name);
|
| }
|
| }
|
|
|