anchor.diff:        // 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;
  -    }
  +    _propagateInvalidation(source, sourceEntry);
     }
   
     /**
  
positive.code:   }
  
    /**
     * Record the results produced by performing a [task] and return the cache
     * entry associated with the results.
     */
    DartEntry _recordBuildUnitElementTask(BuildUnitElementTask task) {
      Source source = task.source;
      Source library = task.library;
      DartEntry dartEntry = _cache.get(source);
      CaughtException thrownException = task.exception;
      if (thrownException != null) {
        dartEntry.recordBuildElementErrorInLibrary(library, thrownException);
        throw new AnalysisException('<rethrow>', thrownException);
      }
      dartEntry.setValueInLibrary(DartEntry.BUILT_UNIT, library, task.unit);
      dartEntry.setValueInLibrary(
          DartEntry.BUILT_ELEMENT,
          library,
          task.unitElement);
      ChangeNoticeImpl notice = _getNotice(source);
      LineInfo lineInfo = dartEntry.getValue(SourceEntry.LINE_INFO);
      notice.setErrors(dartEntry.allErrors, lineInfo);
      return dartEntry;
    }
  
  //  /**
  
negative.code:     //
      // Then determine which cached results are no longer valid.
      //
      for (Source source in changeSet.addedSources) {
        _sourceAvailable(source);
      }
      for (Source source in changeSet.changedSources) {
        if (_contentCache.getContents(source) != null) {
  