anchor.diff:    }
   
     /**
  -   * Returns an iterable of [Element]s that are used by
  -   * [element].
  +   * Returns an iterable of [Selection]s that are used by
  +   * [element].  Each [Selection] contains an element that is
  +   * used and the selector that selected the element.
      */
  -  Iterable<Element> getRetaining(Element element) {
  +  Iterable<Selection> getRetaining(Element element) {
       if (!selectorsFromElement.containsKey(element)) {
  -      return const <Element>[];
  +      return const <Selection>[];
       } else {
         return selectorsFromElement[element].expand(
  -          (s) => compiler.world.allFunctions.filter(s));
  +        (selector) {
  +          return compiler.world.allFunctions.filter(selector).map((element) {
  +            return new Selection(element, selector);
  +          });
  +        });
       }
     }
   
  
positive.code:   }
  }
  
  
  class DumpInfoTask extends CompilerTask {
    DumpInfoTask(Compiler compiler)
  
negative.code:       'elements': infoCollector.toJson(),
        'holding': holding,
        'outputUnits': outputUnits,
        'dump_version': 3,
      };
  
      Duration toJsonDuration = new DateTime.now().difference(startToJsonTime);
  