anchor.diff:        : this.selector = selector,
           this.mask = mask,
           this.hashCode =
  -            Hashing.mixHashCodeBits(selector.hashCode, mask.hashCode);
  +            Hashing.mixHashCodeBits(selector.hashCode, mask.hashCode) {
  +    assert(mask != null);
  +  }
   
     String get name => selector.name;
   
     bool applies(Element element, ClassWorld classWorld) {
       if (!selector.appliesUnnamed(element, classWorld)) return false;
  -    if (mask == null) return true;
       return mask.canHit(element, selector, classWorld);
  +  }
  +
  +  bool needsNoSuchMethodHandling(ClassWorld classWorld) {
  +    return mask.needsNoSuchMethodHandling(selector, classWorld);
     }
   
     bool operator ==(other) {
  
positive.code:   String toString() => '($selector,$mask)';
  }
  
  class FunctionSetNode {
    final String name;
    final Map<SelectorMask, FunctionSetQuery> cache =
  
negative.code:     elements.forEach(action);
    }
  
    /// Returns the set of functions that can be the target of [selectorMask]
    /// including no such method handling where applicable.
    FunctionSetQuery query(SelectorMask selectorMask,
                           ClassWorld classWorld,
                           [FunctionSetNode noSuchMethods,
                            SelectorMask noSuchMethodMask]) {
      assert(selectorMask.name == name);
      FunctionSetQuery result = cache[selectorMask];
      if (result != null) return result;
  
  