anchor.diff:        List<Statement> body) {
       Expression value = entry.expression.accept<TreeNode>(this);
   
  -    final DartType entryType = new InterfaceType(_mapEntryClass,
  +    final InterfaceType entryType = new InterfaceType(_mapEntryClass,
           _currentLibrary.nonNullable, <DartType>[keyType, valueType]);
       final bool typeMatches = entry.entryType != null &&
           _typeEnvironment.isSubtypeOf(
  
positive.code:           entry.expression.fileOffset,
            _createVariableGet(result),
            receiverType,
            _createGetKey(
                entry.expression.fileOffset, _createVariableGet(variable)),
            _createGetValue(
                entry.expression.fileOffset, _createVariableGet(variable))));
      }
      Statement statement = _createForInStatement(entry.fileOffset, variable,
          _createGetEntries(entry.fileOffset, value), loopBody);
  
      if (entry.isNullAware) {
        statement = _createIf(
  
negative.code:     return new IfStatement(condition, then, otherwise)..fileOffset = fileOffset;
    }
  
    Expression _createGetKey(
        int fileOffset, Expression receiver, InterfaceType entryType) {
      assert(fileOffset != null);
      assert(fileOffset != TreeNode.noOffset);
      if (useNewMethodInvocationEncoding) {
        DartType resultType = Substitution.fromInterfaceType(entryType)
            .substituteType(_mapEntryKey.type);
        return new InstanceGet(
            InstanceAccessKind.Instance, receiver, new Name('key'),
            interfaceTarget: _mapEntryKey, resultType: resultType)
          ..fileOffset = fileOffset;
      } else {
        return new PropertyGet(receiver, new Name('key'), _mapEntryKey)
          ..fileOffset = fileOffset;
      }
    }
  
    Expression _createGetValue(
        int fileOffset, Expression receiver, InterfaceType entryType) {
      assert(fileOffset != null);
      assert(fileOffset != TreeNode.noOffset);
      if (useNewMethodInvocationEncoding) {
        DartType resultType = Substitution.fromInterfaceType(entryType)
            .substituteType(_mapEntryValue.type);
        return new InstanceGet(
            InstanceAccessKind.Instance, receiver, new Name('value'),
            interfaceTarget: _mapEntryValue, resultType: resultType)
          ..fileOffset = fileOffset;
      } else {
        return new PropertyGet(receiver, new Name('value'), _mapEntryValue)
          ..fileOffset = fileOffset;
      }
    }
  
    Expression _createGetEntries(
        int fileOffset, Expression receiver, InterfaceType mapType) {
      assert(fileOffset != null);
      assert(fileOffset != TreeNode.noOffset);
      if (useNewMethodInvocationEncoding) {
        DartType resultType = Substitution.fromInterfaceType(mapType)
            .substituteType(_mapEntries.getterType);
        return new InstanceGet(
            InstanceAccessKind.Instance, receiver, new Name('entries'),
            interfaceTarget: _mapEntries, resultType: resultType)
          ..fileOffset = fileOffset;
      } else {
        return new PropertyGet(receiver, new Name('entries'), _mapEntries)
          ..fileOffset = fileOffset;
      }
    }
  
    ForStatement _createForStatement(
  