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

Side by Side Diff: sdk/lib/_internal/pub/lib/src/pubspec.dart

Issue 344673002: Load instances of the same transformer from the same isolate. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library pub.pubspec; 5 library pub.pubspec;
6 6
7 import 'package:yaml/yaml.dart'; 7 import 'package:yaml/yaml.dart';
8 import 'package:path/path.dart' as path; 8 import 'package:path/path.dart' as path;
9 9
10 import 'barback.dart'; 10 import 'barback/transformer_config.dart';
11 import 'io.dart'; 11 import 'io.dart';
12 import 'package.dart'; 12 import 'package.dart';
13 import 'source_registry.dart'; 13 import 'source_registry.dart';
14 import 'utils.dart'; 14 import 'utils.dart';
15 import 'version.dart'; 15 import 'version.dart';
16 16
17 /// The parsed contents of a pubspec file. 17 /// The parsed contents of a pubspec file.
18 /// 18 ///
19 /// The fields of a pubspec are, for the most part, validated when they're first 19 /// The fields of a pubspec are, for the most part, validated when they're first
20 /// accessed. This allows a partially-invalid pubspec to be used if only the 20 /// accessed. This allows a partially-invalid pubspec to be used if only the
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 /// 107 ///
108 /// Dependencies here will replace any dependency on a package with the same 108 /// Dependencies here will replace any dependency on a package with the same
109 /// name anywhere in the dependency graph. 109 /// name anywhere in the dependency graph.
110 List<PackageDep> get dependencyOverrides { 110 List<PackageDep> get dependencyOverrides {
111 if (_dependencyOverrides != null) return _dependencyOverrides; 111 if (_dependencyOverrides != null) return _dependencyOverrides;
112 _dependencyOverrides = _parseDependencies('dependency_overrides'); 112 _dependencyOverrides = _parseDependencies('dependency_overrides');
113 return _dependencyOverrides; 113 return _dependencyOverrides;
114 } 114 }
115 List<PackageDep> _dependencyOverrides; 115 List<PackageDep> _dependencyOverrides;
116 116
117 /// The ids of the transformers to use for this package. 117 /// The configurations of the transformers to use for this package.
118 List<Set<TransformerId>> get transformers { 118 List<Set<TransformerConfig>> get transformers {
119 if (_transformers != null) return _transformers; 119 if (_transformers != null) return _transformers;
120 120
121 var transformers = fields['transformers']; 121 var transformers = fields['transformers'];
122 if (transformers == null) { 122 if (transformers == null) {
123 _transformers = []; 123 _transformers = [];
124 return _transformers; 124 return _transformers;
125 } 125 }
126 126
127 if (transformers is! List) { 127 if (transformers is! List) {
128 _error('"transformers" field must be a list, but was "$transformers".'); 128 _error('"transformers" field must be a list, but was "$transformers".');
(...skipping 28 matching lines...) Expand all
157 } 157 }
158 158
159 library = transformer.keys.single; 159 library = transformer.keys.single;
160 configuration = transformer.values.single; 160 configuration = transformer.values.single;
161 if (configuration is! Map) { 161 if (configuration is! Map) {
162 _error('"$field.$library" field must be a map, but was ' 162 _error('"$field.$library" field must be a map, but was '
163 '"$configuration".'); 163 '"$configuration".');
164 } 164 }
165 } 165 }
166 166
167 var id = _wrapFormatException("transformer configuration", 167 var config = _wrapFormatException("transformer configuration",
168 "$field.$library", 168 "$field.$library",
169 () => new TransformerId.parse(library, configuration)); 169 () => new TransformerConfig.parse(library, configuration));
170 170
171 if (id.package != name && 171 var package = config.id.package;
172 !id.isBuiltInTransformer && 172 if (package != name &&
173 !dependencies.any((ref) => ref.name == id.package) && 173 !config.id.isBuiltInTransformer &&
174 !devDependencies.any((ref) => ref.name == id.package) && 174 !dependencies.any((ref) => ref.name == package) &&
175 !dependencyOverrides.any((ref) => ref.name == id.package)) { 175 !devDependencies.any((ref) => ref.name == package) &&
176 !dependencyOverrides.any((ref) => ref.name == package)) {
176 _error('"$field.$library" refers to a package that\'s not a ' 177 _error('"$field.$library" refers to a package that\'s not a '
177 'dependency.'); 178 'dependency.');
178 } 179 }
179 180
180 return id; 181 return config;
181 }).toSet(); 182 }).toSet();
182 }).toList(); 183 }).toList();
183 184
184 return _transformers; 185 return _transformers;
185 } 186 }
186 List<Set<TransformerId>> _transformers; 187 List<Set<TransformerConfig>> _transformers;
187 188
188 /// The environment-related metadata. 189 /// The environment-related metadata.
189 PubspecEnvironment get environment { 190 PubspecEnvironment get environment {
190 if (_environment != null) return _environment; 191 if (_environment != null) return _environment;
191 192
192 var yaml = fields['environment']; 193 var yaml = fields['environment'];
193 if (yaml == null) { 194 if (yaml == null) {
194 _environment = new PubspecEnvironment(VersionConstraint.any); 195 _environment = new PubspecEnvironment(VersionConstraint.any);
195 return _environment; 196 return _environment;
196 } 197 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 _location = null; 239 _location = null;
239 240
240 Pubspec.empty() 241 Pubspec.empty()
241 : _sources = null, 242 : _sources = null,
242 _location = null, 243 _location = null,
243 _name = null, 244 _name = null,
244 _version = Version.none, 245 _version = Version.none,
245 _dependencies = <PackageDep>[], 246 _dependencies = <PackageDep>[],
246 _devDependencies = <PackageDep>[], 247 _devDependencies = <PackageDep>[],
247 _environment = new PubspecEnvironment(), 248 _environment = new PubspecEnvironment(),
248 _transformers = <Set<TransformerId>>[], 249 _transformers = <Set<TransformerConfig>>[],
249 fields = {}; 250 fields = {};
250 251
251 /// Returns a Pubspec object for an already-parsed map representing its 252 /// Returns a Pubspec object for an already-parsed map representing its
252 /// contents. 253 /// contents.
253 /// 254 ///
254 /// If [expectedName] is passed and the pubspec doesn't have a matching name 255 /// If [expectedName] is passed and the pubspec doesn't have a matching name
255 /// field, this will throw a [PubspecError]. 256 /// field, this will throw a [PubspecError].
256 /// 257 ///
257 /// [location] is the location from which this pubspec was loaded. 258 /// [location] is the location from which this pubspec was loaded.
258 Pubspec.fromMap(this.fields, this._sources, {String expectedName, 259 Pubspec.fromMap(this.fields, this._sources, {String expectedName,
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 513
513 return "$str:\n$subMessage"; 514 return "$str:\n$subMessage";
514 } 515 }
515 } 516 }
516 517
517 /// Returns whether [uri] is a file URI. 518 /// Returns whether [uri] is a file URI.
518 /// 519 ///
519 /// This is slightly more complicated than just checking if the scheme is 520 /// This is slightly more complicated than just checking if the scheme is
520 /// 'file', since relative URIs also refer to the filesystem on the VM. 521 /// 'file', since relative URIs also refer to the filesystem on the VM.
521 bool _isFileUri(Uri uri) => uri.scheme == 'file' || uri.scheme == ''; 522 bool _isFileUri(Uri uri) => uri.scheme == 'file' || uri.scheme == '';
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698