anchor.diff:     * the given [librarySource].
      */
     List<int> _getLibraryClosureHash(Source librarySource) {
  -    List<Source> closure = _getLibraryClosure(librarySource);
  -    MD5 md5 = new MD5();
  -    for (Source source in closure) {
  -      List<int> sourceHash = _getSourceContentHash(source);
  -      md5.add(sourceHash);
  -    }
  -    md5.add(configSalt);
  -    return md5.close();
  +    return _libraryClosureHashMap.putIfAbsent(librarySource, () {
  +      List<Source> closure = _getLibraryClosure(librarySource);
  +      MD5 md5 = new MD5();
  +      for (Source source in closure) {
  +        List<int> sourceHash = _getSourceContentHash(source);
  +        md5.add(sourceHash);
  +      }
  +      md5.add(configSalt);
  +      return md5.close();
  +    });
     }
   
     /**
  
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);
    }
  
    /**
  