anchor.diff:          getterType = getterElement.isField()
               ? inferrer.typeOfElement(element)
               : inferrer.returnTypeOfElement(element);
  -        if (getterElement.isGetter()) {
  -          handleStaticSend(node, getterSelector, getterElement, null);
  -        }
  +        handleStaticSend(node, getterSelector, getterElement, null);
           newType = handleDynamicSend(
               node, operatorSelector, getterType, operatorArguments);
  -        if (element.isField()) {
  -          inferrer.recordNonFinalFieldElementType(node, element, newType);
  -        } else {
  -          assert(element.isSetter());
  -          handleStaticSend(
  -              node, setterSelector, element,
  -              new ArgumentsTypes([newType], null));
  -        }
  -      } else if (Elements.isUnresolved(element) || element.isSetter()) {
  +        handleStaticSend(
  +            node, setterSelector, element,
  +            new ArgumentsTypes([newType], null));
  +      } else if (Elements.isUnresolved(element)
  +                 || element.isSetter()
  +                 || element.isField()) {
           getterType = handleDynamicSend(
               node, getterSelector, receiverType, null);
  -        newType = handleDynamicSend(
  -            node, operatorSelector, getterType, operatorArguments);
  -        handleDynamicSend(node, setterSelector, receiverType,
  -                          new ArgumentsTypes([newType], null));
  -      } else if (element.isField()) {
  -        assert(!element.modifiers.isFinal());
  -        getterType = inferrer.dynamicType; // The type of the field.
           newType = handleDynamicSend(
               node, operatorSelector, getterType, operatorArguments);
           handleDynamicSend(node, setterSelector, receiverType,
  
positive.code:       });
        // TODO(ngeoffray): Re-analyze method if [changed]?
      }
  
      return returnType;
    }
  
  
negative.code:       // [: foo = 42 :] or [: foo.bar = 42 :].
        ArgumentsTypes arguments =  new ArgumentsTypes([rhsType], null);
        if (Elements.isStaticOrTopLevelField(element)) {
          handleStaticSend(node, setterSelector, element, arguments);
        } else if (Elements.isUnresolved(element) || element.isSetter()) {
          handleDynamicSend(node, setterSelector, receiverType, arguments);
        } else if (element.isField()) {
  