anchor.diff:      }
     }
   
  +  void _writeListItem(StringBuffer buffer, writer()) {
  +    buffer.write('<li>');
  +    writer();
  +    buffer.write('</li>');
  +  }
  +
     void _writeListOfStrings(
         StringBuffer buffer, String listName, Iterable<String> items) {
       List<String> itemList = items.toList();
  
positive.code:       buffer.write('List containing ${value.length} entries');
        buffer.write('<ul>');
        for (var entry in value) {
          buffer.write('<li>');
          _writeValueAsHtml(buffer, entry, linkParameters);
          buffer.write('</li>');
        }
        buffer.write('</ul>');
      } else if (value is AstNode) {
  
negative.code:       buffer.write('<i>$link</i>');
      } else if (value is UsedLocalElements) {
        buffer.write('<ul>');
        _writeListItem(buffer, () {
          HashSet<Element> elements = value.elements;
          buffer.write('List "elements" containing ${elements.length} entries');
          buffer.write('<ul>');
          for (Element element in elements) {
            _writeListItem(buffer, () {
              String elementStr = HTML_ESCAPE.convert(element.toString());
              buffer.write('<i>${element.runtimeType}</i>  $elementStr');
            });
          }
          buffer.write('</ul>');
        });
        _writeListItem(buffer, () {
          _writeListOfStrings(buffer, 'members', value.members);
        });
        _writeListItem(buffer, () {
          _writeListOfStrings(buffer, 'readMembers', value.readMembers);
        });
        buffer.write('</ul>');
      } else {
        buffer.write(HTML_ESCAPE.convert(value.toString()));
  