anchor.diff:      //
       // Then determine which cached results are no longer valid.
       //
  -    bool addedDartSource = false;
       for (Source source in changeSet.addedSources) {
  -      if (_sourceAvailable(source)) {
  -        addedDartSource = true;
  -      }
  +      _sourceAvailable(source);
       }
       for (Source source in changeSet.changedSources) {
         if (_contentCache.getContents(source) != null) {
  
positive.code:       // to invalidate it again.
        return;
      }
      if (sourceEntry is HtmlEntry) {
        HtmlEntry htmlEntry = sourceEntry;
        htmlEntry.modificationTime = getModificationStamp(source);
        htmlEntry.invalidateAllInformation();
        _cache.removedAst(source);
        _workManager.add(source, SourcePriority.HTML);
      } else if (sourceEntry is DartEntry) {
        List<Source> containingLibraries = getLibrariesContaining(source);
        HashSet<Source> librariesToInvalidate = new HashSet<Source>();
        for (Source containingLibrary in containingLibraries) {
          _computeAllLibrariesDependingOn(
              containingLibrary,
              librariesToInvalidate);
        }
        for (Source library in librariesToInvalidate) {
          _invalidateLibraryResolution(library);
        }
        DartEntry dartEntry = _cache.get(source);
        _removeFromParts(source, dartEntry);
        dartEntry.modificationTime = getModificationStamp(source);
        dartEntry.invalidateAllInformation();
        _cache.removedAst(source);
        _workManager.add(source, SourcePriority.UNKNOWN);
      }
      // reset unit in the notification, it is out of date now
      ChangeNoticeImpl notice = _pendingNotices[source];
      if (notice != null) {
        notice.resolvedDartUnit = null;
        notice.resolvedHtmlUnit = null;
      }
    }
  
    /**
  
negative.code:   }
  
    /**
     * Given that the given [source] (with the corresponding [sourceEntry]) has
     * been invalidated, invalidate all of the libraries that depend on it.
     */
    void _propagateInvalidation(Source source, SourceEntry sourceEntry) {
      if (sourceEntry is HtmlEntry) {
        HtmlEntry htmlEntry = sourceEntry;
        htmlEntry.modificationTime = getModificationStamp(source);
        htmlEntry.invalidateAllInformation();
        _cache.removedAst(source);
        _workManager.add(source, SourcePriority.HTML);
      } else if (sourceEntry is DartEntry) {
        List<Source> containingLibraries = getLibrariesContaining(source);
        List<Source> dependentLibraries = getLibrariesDependingOn(source);
        HashSet<Source> librariesToInvalidate = new HashSet<Source>();
        for (Source containingLibrary in containingLibraries) {
          _computeAllLibrariesDependingOn(
              containingLibrary,
              librariesToInvalidate);
        }
        for (Source dependentLibrary in dependentLibraries) {
          _computeAllLibrariesDependingOn(
              dependentLibrary,
              librariesToInvalidate);
        }
        for (Source library in librariesToInvalidate) {
          _invalidateLibraryResolution(library);
        }
        DartEntry dartEntry = _cache.get(source);
        _removeFromParts(source, dartEntry);
        dartEntry.modificationTime = getModificationStamp(source);
        dartEntry.invalidateAllInformation();
        _cache.removedAst(source);
        _workManager.add(source, SourcePriority.UNKNOWN);
      }
      // reset unit in the notification, it is out of date now
      ChangeNoticeImpl notice = _pendingNotices[source];
      if (notice != null) {
        notice.resolvedDartUnit = null;
        notice.resolvedHtmlUnit = null;
      }
    }
  
  //  /**
  