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

Side by Side Diff: pkg/analyzer/lib/src/summary/incremental_cache.dart

Issue 1890973003: pkg/analyzer: support latest pkg/crypto version (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: nits Created 4 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 unified diff | Download patch
« no previous file with comments | « DEPS ('k') | pkg/analyzer/lib/src/summary/summarize_elements.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 import 'dart:convert' show UTF8; 5 import 'dart:convert' show ChunkedConversionSink, UTF8;
6 import 'dart:core' hide Resource; 6 import 'dart:core' hide Resource;
7 7
8 import 'package:analyzer/dart/element/element.dart'; 8 import 'package:analyzer/dart/element/element.dart';
9 import 'package:analyzer/file_system/file_system.dart'; 9 import 'package:analyzer/file_system/file_system.dart';
10 import 'package:analyzer/src/generated/engine.dart'; 10 import 'package:analyzer/src/generated/engine.dart';
11 import 'package:analyzer/src/generated/source.dart'; 11 import 'package:analyzer/src/generated/source.dart';
12 import 'package:analyzer/src/summary/format.dart'; 12 import 'package:analyzer/src/summary/format.dart';
13 import 'package:analyzer/src/summary/idl.dart'; 13 import 'package:analyzer/src/summary/idl.dart';
14 import 'package:analyzer/src/summary/summarize_elements.dart'; 14 import 'package:analyzer/src/summary/summarize_elements.dart';
15 import 'package:convert/convert.dart';
15 import 'package:crypto/crypto.dart'; 16 import 'package:crypto/crypto.dart';
16 17
17 /** 18 /**
18 * Storage for cache data. 19 * Storage for cache data.
19 */ 20 */
20 abstract class CacheStorage { 21 abstract class CacheStorage {
21 /** 22 /**
22 * Return bytes for the given [key], `null` if [key] is not in the storage. 23 * Return bytes for the given [key], `null` if [key] is not in the storage.
23 */ 24 */
24 List<int> get(String key); 25 List<int> get(String key);
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 _sourceContentMap[source] = content; 236 _sourceContentMap[source] = content;
236 } 237 }
237 return content; 238 return content;
238 } 239 }
239 240
240 /** 241 /**
241 * Return the key of the content based [source] information. 242 * Return the key of the content based [source] information.
242 */ 243 */
243 String _getCacheSourceContentKey(Source source) { 244 String _getCacheSourceContentKey(Source source) {
244 List<int> hash = _getSourceContentHash(source); 245 List<int> hash = _getSourceContentHash(source);
245 String hashStr = CryptoUtils.bytesToHex(hash); 246 String hashStr = hex.encode(hash);
246 return '$hashStr.content'; 247 return '$hashStr.content';
247 } 248 }
248 249
249 /** 250 /**
250 * Get the bundle for the given key. 251 * Get the bundle for the given key.
251 */ 252 */
252 PackageBundle _getLibraryBundle(String key) { 253 PackageBundle _getLibraryBundle(String key) {
253 PackageBundle bundle = _bundleMap[key]; 254 PackageBundle bundle = _bundleMap[key];
254 if (bundle == null) { 255 if (bundle == null) {
255 List<int> bytes = storage.get(key); 256 List<int> bytes = storage.get(key);
256 if (bytes == null) { 257 if (bytes == null) {
257 return null; 258 return null;
258 } 259 }
259 bundle = new PackageBundle.fromBuffer(bytes); 260 bundle = new PackageBundle.fromBuffer(bytes);
260 _bundleMap[key] = bundle; 261 _bundleMap[key] = bundle;
261 } 262 }
262 return bundle; 263 return bundle;
263 } 264 }
264 265
265 /** 266 /**
266 * Return the key of the bundle of the [librarySource]. 267 * Return the key of the bundle of the [librarySource].
267 */ 268 */
268 String _getLibraryBundleKey(Source librarySource) { 269 String _getLibraryBundleKey(Source librarySource) {
269 List<int> hash = _getLibraryClosureHash(librarySource); 270 List<int> hash = _getLibraryClosureHash(librarySource);
270 String hashStr = CryptoUtils.bytesToHex(hash); 271 String hashStr = hex.encode(hash);
271 return '$hashStr.summary'; 272 return '$hashStr.summary';
272 } 273 }
273 274
274 /** 275 /**
275 * Return the whole source closure of the library with the given 276 * Return the whole source closure of the library with the given
276 * [librarySource]. It includes defining units and parts of the library and 277 * [librarySource]. It includes defining units and parts of the library and
277 * of all its directly or indirectly imported or exported libraries. 278 * of all its directly or indirectly imported or exported libraries.
278 */ 279 */
279 List<Source> _getLibraryClosure(Source librarySource) { 280 List<Source> _getLibraryClosure(Source librarySource) {
280 return _libraryClosureMap.putIfAbsent(librarySource, () { 281 return _libraryClosureMap.putIfAbsent(librarySource, () {
281 Set<Source> closure = new Set<Source>(); 282 Set<Source> closure = new Set<Source>();
282 _appendLibraryClosure(closure, librarySource); 283 _appendLibraryClosure(closure, librarySource);
283 return closure.toList(); 284 return closure.toList();
284 }); 285 });
285 } 286 }
286 287
287 /** 288 /**
288 * Return the [context]-specific hash of the closure of the library with 289 * Return the [context]-specific hash of the closure of the library with
289 * the given [librarySource]. 290 * the given [librarySource].
290 */ 291 */
291 List<int> _getLibraryClosureHash(Source librarySource) { 292 List<int> _getLibraryClosureHash(Source librarySource) {
292 return _libraryClosureHashMap.putIfAbsent(librarySource, () { 293 return _libraryClosureHashMap.putIfAbsent(librarySource, () {
293 List<Source> closure = _getLibraryClosure(librarySource); 294 List<Source> closure = _getLibraryClosure(librarySource);
294 MD5 md5 = new MD5(); 295
296 Digest digest;
297
298 var digestSink = new ChunkedConversionSink<Digest>.withCallback(
299 (List<Digest> digests) {
300 digest = digests.single;
301 });
302
303 var byteSink = md5.startChunkedConversion(digestSink);
304
295 for (Source source in closure) { 305 for (Source source in closure) {
296 List<int> sourceHash = _getSourceContentHash(source); 306 List<int> sourceHash = _getSourceContentHash(source);
297 md5.add(sourceHash); 307 byteSink.add(sourceHash);
298 } 308 }
299 md5.add(configSalt); 309 byteSink.add(configSalt);
300 return md5.close(); 310
311 byteSink.close();
312 // TODO(paulberry): this call to `close` should not be needed.
313 // Can be removed once
314 // https://github.com/dart-lang/crypto/issues/33
315 // is fixed – ensure the min version constraint on crypto is updated, tho.
316 // Does not cause any problems in the mean time.
317 digestSink.close();
318
319 return digest.bytes;
301 }); 320 });
302 } 321 }
303 322
304 /** 323 /**
305 * Compute a hash of the given [source] contents. 324 * Compute a hash of the given [source] contents.
306 */ 325 */
307 List<int> _getSourceContentHash(Source source) { 326 List<int> _getSourceContentHash(Source source) {
308 return _sourceContentHashMap.putIfAbsent(source, () { 327 return _sourceContentHashMap.putIfAbsent(source, () {
309 String sourceText = source.contents.data; 328 String sourceText = source.contents.data;
310 List<int> sourceBytes = UTF8.encode(sourceText); 329 List<int> sourceBytes = UTF8.encode(sourceText);
311 return (new MD5()..add(sourceBytes)).close(); 330 return md5.convert(sourceBytes).bytes;
312 }); 331 });
313 } 332 }
314 333
315 /** 334 /**
316 * Return a source representing the URI that results from resolving the given 335 * Return a source representing the URI that results from resolving the given
317 * (possibly relative) [containedUri] against the URI associated with the 336 * (possibly relative) [containedUri] against the URI associated with the
318 * [containingSource], whether or not the resulting source exists, or `null` 337 * [containingSource], whether or not the resulting source exists, or `null`
319 * if either the [containedUri] is invalid or if it cannot be resolved against 338 * if either the [containedUri] is invalid or if it cannot be resolved against
320 * the [containingSource]'s URI. 339 * the [containingSource]'s URI.
321 */ 340 */
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 */ 430 */
412 final String id; 431 final String id;
413 432
414 /** 433 /**
415 * The payload bundle. 434 * The payload bundle.
416 */ 435 */
417 final PackageBundle bundle; 436 final PackageBundle bundle;
418 437
419 LibraryBundleWithId(this.source, this.id, this.bundle); 438 LibraryBundleWithId(this.source, this.id, this.bundle);
420 } 439 }
OLDNEW
« no previous file with comments | « DEPS ('k') | pkg/analyzer/lib/src/summary/summarize_elements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698