anchor.diff:          inferrer.getSendReturnType(setter, baseReceiverType,
               new ArgumentsTypes([argumentType], new Map()));
         }
  +      // since this is a sendSet we ignore non-fields
       }
   
       if (receiverType.isUnkown()) {
  -      for (Element member in inferrer.getMembersByName(source)) {
  +      for (Element member in inferrer.getMembersByName(name)) {
  +        if (!(member.isField() || member.isAbstractField())) continue;
           Element classElem = member.getEnclosingClass();
           BaseType baseReceiverType = new ClassBaseType(classElem);
           augmentField(baseReceiverType, member);
  
positive.code:   }
  
    ConcreteType analyzeSetNode(Node receiver, ConcreteType argumentType,
                                SourceString source) {
      ConcreteType receiverType = analyze(receiver);
  
      void augmentField(BaseType baseReceiverType, Element fieldOrSetter) {
        if (fieldOrSetter.isField()) {
          inferrer.augmentFieldType(fieldOrSetter, argumentType);
        } else {
          AbstractFieldElement abstractField = fieldOrSetter;
          FunctionElement setter = abstractField.setter;
          // TODO(polux): A setter always returns void so there's no need to
          // invalidate its callers even if it is called with new arguments.
  
negative.code:       for (BaseType baseReceiverType in receiverType.baseTypes) {
          if (!baseReceiverType.isClass()) continue;
          ClassBaseType baseReceiverClassType = baseReceiverType;
          Element member = baseReceiverClassType.element.lookupMember(name);
          if (member != null) {
            augmentField(baseReceiverClassType, member);
          }
  