| Index: pkg/analyzer/lib/src/summary/incremental_cache.dart
|
| diff --git a/pkg/analyzer/lib/src/summary/incremental_cache.dart b/pkg/analyzer/lib/src/summary/incremental_cache.dart
|
| index 1d913be954c87144c5271fb6c9bfef26d41c5f7f..379b9ae64d8e2731d48c4227054df9dbc002ee9d 100644
|
| --- a/pkg/analyzer/lib/src/summary/incremental_cache.dart
|
| +++ b/pkg/analyzer/lib/src/summary/incremental_cache.dart
|
| @@ -2,7 +2,7 @@
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| -import 'dart:convert' show ChunkedConversionSink, UTF8;
|
| +import 'dart:convert';
|
| import 'dart:core' hide Resource;
|
|
|
| import 'package:analyzer/dart/element/element.dart';
|
| @@ -220,6 +220,21 @@ class IncrementalCache {
|
| }
|
| }
|
|
|
| + List<int> _computeSaltedMD5OfBytes(addData(ByteConversionSink byteSink)) {
|
| + Digest digest;
|
| + ChunkedConversionSink<Digest> digestSink =
|
| + new ChunkedConversionSink<Digest>.withCallback((List<Digest> digests) {
|
| + digest = digests.single;
|
| + });
|
| + ByteConversionSink byteSink = md5.startChunkedConversion(digestSink);
|
| + // Add data.
|
| + addData(byteSink);
|
| + byteSink.add(configSalt);
|
| + // Done.
|
| + byteSink.close();
|
| + return digest.bytes;
|
| + }
|
| +
|
| /**
|
| * Get the content based information about the given [source], maybe `null`
|
| * if the information is not in the cache.
|
| @@ -292,31 +307,12 @@ class IncrementalCache {
|
| List<int> _getLibraryClosureHash(Source librarySource) {
|
| return _libraryClosureHashMap.putIfAbsent(librarySource, () {
|
| List<Source> closure = _getLibraryClosure(librarySource);
|
| -
|
| - Digest digest;
|
| -
|
| - var digestSink = new ChunkedConversionSink<Digest>.withCallback(
|
| - (List<Digest> digests) {
|
| - digest = digests.single;
|
| + return _computeSaltedMD5OfBytes((ByteConversionSink byteSink) {
|
| + for (Source source in closure) {
|
| + List<int> sourceHash = _getSourceContentHash(source);
|
| + byteSink.add(sourceHash);
|
| + }
|
| });
|
| -
|
| - var byteSink = md5.startChunkedConversion(digestSink);
|
| -
|
| - for (Source source in closure) {
|
| - List<int> sourceHash = _getSourceContentHash(source);
|
| - byteSink.add(sourceHash);
|
| - }
|
| - byteSink.add(configSalt);
|
| -
|
| - byteSink.close();
|
| - // TODO(paulberry): this call to `close` should not be needed.
|
| - // Can be removed once
|
| - // https://github.com/dart-lang/crypto/issues/33
|
| - // is fixed – ensure the min version constraint on crypto is updated, tho.
|
| - // Does not cause any problems in the mean time.
|
| - digestSink.close();
|
| -
|
| - return digest.bytes;
|
| });
|
| }
|
|
|
|
|