anchor.diff:                  },
                   HTML_ESCAPE.convert(folder.path)));
             }
  -          CacheEntry sourceEntry =
  -              entries.firstWhere((CacheEntry entry) => entry.target is Source);
  -          if (sourceEntry == null) {
  -            buffer.write(' (missing source entry)');
  -          } else if (sourceEntry.explicitlyAdded) {
  -            buffer.write(' (explicit)');
  +          if (entries == null) {
  +            buffer.write(' (file does not exist)');
             } else {
  -            buffer.write(' (implicit)');
  +            CacheEntry sourceEntry = entries
  +                .firstWhere((CacheEntry entry) => entry.target is Source);
  +            if (sourceEntry == null) {
  +              buffer.write(' (missing source entry)');
  +            } else if (sourceEntry.explicitlyAdded) {
  +              buffer.write(' (explicit)');
  +            } else {
  +              buffer.write(' (implicit)');
  +            }
             }
           });
           buffer.write('</p>');
  
positive.code:       _writePage(buffer, 'Analysis Server - Analysis Performance', [],
            (StringBuffer buffer) {
          buffer.write('<h3>Analysis Performance</h3>');
          //
          // Write performance tags.
          //
          buffer.write('<p><b>Performance tag data</b></p>');
          buffer.write(
              '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
          _writeRow(buffer, ['Time (in ms)', 'Percent', 'Tag name'],
              header: true);
          // prepare sorted tags
          List<PerformanceTag> tags = PerformanceTag.all.toList();
          tags.remove(ServerPerformanceStatistics.idle);
          tags.sort((a, b) => b.elapsedMs - a.elapsedMs);
          // prepare total time
          int totalTagTime = 0;
          tags.forEach((PerformanceTag tag) {
            totalTagTime += tag.elapsedMs;
          });
          // write rows
          void writeRow(PerformanceTag tag) {
            double percent = (tag.elapsedMs * 100) / totalTagTime;
            String percentStr = '${percent.toStringAsFixed(2)}%';
            _writeRow(buffer, [tag.elapsedMs, percentStr, tag.label],
                classes: ["right", "right", null]);
          }
          tags.forEach(writeRow);
          buffer.write('</table>');
          //
          // Write task model timing information.
          //
          buffer.write('<p><b>Task performace data</b></p>');
          buffer.write(
              '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
          _writeRow(
              buffer,
              [
                'Task Name',
                'Count',
                'Total Time (in ms)',
                'Average Time (in ms)'
              ],
              header: true);
  
          Map<Type, int> countMap = AnalysisTask.countMap;
          Map<Type, Stopwatch> stopwatchMap = AnalysisTask.stopwatchMap;
          List<Type> taskClasses = stopwatchMap.keys.toList();
          taskClasses.sort((Type first, Type second) =>
              first.toString().compareTo(second.toString()));
          int totalTaskTime = 0;
          taskClasses.forEach((Type taskClass) {
            int count = countMap[taskClass];
            if (count == null) {
              count = 0;
            }
            int taskTime = stopwatchMap[taskClass].elapsedMilliseconds;
            totalTaskTime += taskTime;
            _writeRow(buffer, [
              taskClass.toString(),
              count,
              taskTime,
              count <= 0 ? '-' : (taskTime / count).toStringAsFixed(3)
            ], classes: [
              null,
              "right",
              "right",
              "right"
            ]);
          });
          _writeRow(buffer, ['Total', '-', totalTaskTime, '-'],
              classes: [null, "right", "right", "right"]);
          buffer.write('</table>');
        });
      });
    }
  
negative.code:   }
  
    /**
     * Return a list of the result descriptors whose state should be displayed for
     * the given cache [entry].
     */
    List<ResultDescriptor> _getExpectedResults(CacheEntry entry) {
      AnalysisTarget target = entry.target;
      Set<ResultDescriptor> results = entry.nonInvalidResults.toSet();
      if (target is Source) {
        String name = target.shortName;
        results.add(CONTENT);
        results.add(LINE_INFO);
        results.add(MODIFICATION_TIME);
        if (AnalysisEngine.isDartFileName(name)) {
          results.add(BUILD_DIRECTIVES_ERRORS);
          results.add(BUILD_LIBRARY_ERRORS);
          results.add(CONTAINING_LIBRARIES);
          results.add(DART_ERRORS);
          results.add(EXPLICITLY_IMPORTED_LIBRARIES);
          results.add(EXPORT_SOURCE_CLOSURE);
          results.add(EXPORTED_LIBRARIES);
          results.add(IMPORT_EXPORT_SOURCE_CLOSURE);
          results.add(IMPORTED_LIBRARIES);
          results.add(INCLUDED_PARTS);
          results.add(IS_CLIENT);
          results.add(IS_LAUNCHABLE);
          results.add(LIBRARY_ELEMENT1);
          results.add(LIBRARY_ELEMENT2);
          results.add(LIBRARY_ELEMENT3);
          results.add(LIBRARY_ELEMENT4);
          results.add(LIBRARY_ELEMENT5);
          results.add(LIBRARY_ELEMENT);
          results.add(LIBRARY_ERRORS_READY);
          results.add(PARSE_ERRORS);
          results.add(PARSED_UNIT);
          results.add(REFERENCED_NAMES);
          results.add(SCAN_ERRORS);
          results.add(SOURCE_KIND);
          results.add(TOKEN_STREAM);
          results.add(UNITS);
        } else if (AnalysisEngine.isHtmlFileName(name)) {
          results.add(DART_SCRIPTS);
          results.add(HTML_DOCUMENT);
          results.add(HTML_DOCUMENT_ERRORS);
          results.add(HTML_ERRORS);
          results.add(REFERENCED_LIBRARIES);
        }
      } else if (target is LibrarySpecificUnit) {
        results.add(COMPILATION_UNIT_CONSTANTS);
        results.add(COMPILATION_UNIT_ELEMENT);
        results.add(HINTS);
        results.add(INFER_STATIC_VARIABLE_TYPES_ERRORS);
        results.add(INFERABLE_STATIC_VARIABLES_IN_UNIT);
        results.add(LIBRARY_UNIT_ERRORS);
        results.add(PARTIALLY_RESOLVE_REFERENCES_ERRORS);
        results.add(RESOLVE_FUNCTION_BODIES_ERRORS);
        results.add(RESOLVE_TYPE_NAMES_ERRORS);
        results.add(RESOLVED_UNIT1);
        results.add(RESOLVED_UNIT2);
        results.add(RESOLVED_UNIT3);
        results.add(RESOLVED_UNIT4);
        results.add(RESOLVED_UNIT5);
        results.add(RESOLVED_UNIT6);
        results.add(RESOLVED_UNIT7);
        results.add(RESOLVED_UNIT8);
        results.add(RESOLVED_UNIT);
        results.add(USED_IMPORTED_ELEMENTS);
        results.add(USED_LOCAL_ELEMENTS);
        results.add(VARIABLE_REFERENCE_ERRORS);
        results.add(VERIFY_ERRORS);
      } else if (target is ConstantEvaluationTarget) {
        results.add(CONSTANT_DEPENDENCIES);
        results.add(CONSTANT_VALUE);
        if (target is VariableElement) {
          results.add(INFER_STATIC_VARIABLE_ERRORS);
          results.add(INFERABLE_STATIC_VARIABLE_DEPENDENCIES);
          results.add(INFERRED_STATIC_VARIABLE);
        }
      } else if (target is AnalysisContextTarget) {
        results.add(TYPE_PROVIDER);
      }
      return results.toList();
    }
  
    /**
     * Return `true` if the given analysis [context] has at least one entry with
     * an exception.
     */
  