anchor.diff:  
   class SelectorKind {
     final String name;
  -  final int hashCode;
  -  const SelectorKind(this.name, this.hashCode);
  -
  -  static const SelectorKind GETTER = const SelectorKind('getter', 0);
  -  static const SelectorKind SETTER = const SelectorKind('setter', 1);
  -  static const SelectorKind CALL = const SelectorKind('call', 2);
  -  static const SelectorKind OPERATOR = const SelectorKind('operator', 3);
  -  static const SelectorKind INDEX = const SelectorKind('index', 4);
  +  const SelectorKind(this.name);
  +
  +  static const SelectorKind GETTER = const SelectorKind('getter');
  +  static const SelectorKind SETTER = const SelectorKind('setter');
  +  static const SelectorKind CALL = const SelectorKind('call');
  +  static const SelectorKind OPERATOR = const SelectorKind('operator');
  +  static const SelectorKind INDEX = const SelectorKind('index');
   
     String toString() => name;
   }
  
positive.code:   /** Check whether this is a call to 'assert'. */
    bool isAssert() => isCall() && identical(name.stringValue, "assert");
  
    int get namedArgumentCount => namedArguments.length;
    int get positionalArgumentCount => argumentCount - namedArgumentCount;
  
  
negative.code: 
    bool operator ==(other) {
      if (other is !Selector) return false;
      return mask == other.mask && equalsUntyped(other);
    }
  
    bool equalsUntyped(Selector other) {
      return name == other.name
             && kind == other.kind
             && identical(library, other.library)
             && argumentCount == other.argumentCount
             && namedArguments.length == other.namedArguments.length
             && sameNames(namedArguments, other.namedArguments);
    }
  
    List<SourceString> getOrderedNamedArguments() {
  