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:       List<int> sourceBytes = UTF8.encode(sourceText);
        return (new MD5()..add(sourceBytes)).close();
      });
    }
  
    /**
  
negative.code:         if (source.isInSystemLibrary) {
            continue;
          }
          if (getSourceKind(source) == SourceKind.PART) {
            continue;
          }
          String key = _getLibraryBundleKey(source);
          PackageBundle bundle = _getLibraryBundle(key);
          if (bundle == null) {
  