anchor.diff:  class ConcreteTypeCartesianProduct
       extends Iterable<ConcreteTypesEnvironment> {
     final ConcreteTypesInferrer inferrer;
  -  final BaseType baseTypeOfThis;
  +  final ClassElement typeOfThis;
     final Map<Element, ConcreteType> concreteTypes;
  -  ConcreteTypeCartesianProduct(this.inferrer, this.baseTypeOfThis,
  +  ConcreteTypeCartesianProduct(this.inferrer, this.typeOfThis,
                                  this.concreteTypes);
     Iterator get iterator => concreteTypes.isEmpty
  -      ? [new ConcreteTypesEnvironment(inferrer, baseTypeOfThis)].iterator
  -      : new ConcreteTypeCartesianProductIterator(inferrer, baseTypeOfThis,
  -                                                 concreteTypes);
  +      ? [new ConcreteTypesEnvironment(inferrer, new ClassBaseType(typeOfThis))]
  +            .iterator
  +      : new ConcreteTypeCartesianProductIterator(inferrer,
  +            new ClassBaseType(typeOfThis), concreteTypes);
     String toString() {
       List<ConcreteTypesEnvironment> cartesianProduct =
           new List<ConcreteTypesEnvironment>.from(this);
  
positive.code:           return analyzeFieldRead(element);
          } else {
            assert(element.isGetter());
            ClassBaseType baseReceiverType =
                new ClassBaseType(element.enclosingElement);
            return analyzeGetterSend(baseReceiverType, element);
          }
        }
      } else {
  
negative.code:         // exceptions for instance, we need to do it by uncommenting the
          // following line.
          // inferrer.addCaller(setter, currentMethod);
          inferrer.getSendReturnType(setter, receiverType,
              new ArgumentsTypes([argumentType], new Map()));
        }
        // since this is a sendSet we ignore non-fields
  