anchor.diff:    final Map<Source, CacheSourceContent> _sourceContentMap =
         <Source, CacheSourceContent>{};
     final Map<Source, List<Source>> _libraryClosureMap = <Source, List<Source>>{};
  +  final Map<Source, List<int>> _libraryClosureHashMap = <Source, List<int>>{};
     final Map<Source, List<int>> _sourceContentHashMap = <Source, List<int>>{};
   
     /**
      * Mapping from a library closure key to its [PackageBundle].
      */
     final Map<String, PackageBundle> _bundleMap = <String, PackageBundle>{};
  +
  +  final Map<String, Source> _absoluteUriMap = <String, Source>{};
   
     IncrementalCache(this.storage, this.context, this.configSalt);
   
  
positive.code:       }
        // Append parts.
        for (String partUri in contentSource.partUris) {
          Source partSource =
              context.sourceFactory.resolveUri(librarySource, partUri);
          if (partSource == null) {
            throw new StateError('Unable to resolve $partUri in $librarySource');
          }
  
negative.code:       List<int> sourceBytes = UTF8.encode(sourceText);
        return (new MD5()..add(sourceBytes)).close();
      });
    }
  
    /**
     * Return a source representing the URI that results from resolving the given
     * (possibly relative) [containedUri] against the URI associated with the
     * [containingSource], whether or not the resulting source exists, or `null`
     * if either the [containedUri] is invalid or if it cannot be resolved against
     * the [containingSource]'s URI.
     */
    Source _resolveUri(Source containingSource, String containedUri) {
      // Cache absolute URIs.
      if (containedUri.startsWith('dart:') ||
          containedUri.startsWith('package:')) {
        return _absoluteUriMap.putIfAbsent(containedUri, () {
          return context.sourceFactory.resolveUri(containingSource, containedUri);
        });
      }
      // Resolve relative URIs without caching.
      return context.sourceFactory.resolveUri(containingSource, containedUri);
    }
  
    /**
  