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:     return new IfStatement(condition, then, otherwise)..fileOffset = fileOffset;
    }
  
    PropertyGet _createGetKey(int fileOffset, Expression receiver) {
      assert(fileOffset != null);
      assert(fileOffset != TreeNode.noOffset);
      return new PropertyGet(receiver, new Name('key'), _mapEntryKey)
        ..fileOffset = fileOffset;
    }
  
    PropertyGet _createGetValue(int fileOffset, Expression receiver) {
      assert(fileOffset != null);
      assert(fileOffset != TreeNode.noOffset);
      return new PropertyGet(receiver, new Name('value'), _mapEntryValue)
        ..fileOffset = fileOffset;
    }
  
    PropertyGet _createGetEntries(int fileOffset, Expression receiver) {
      assert(fileOffset != null);
      assert(fileOffset != TreeNode.noOffset);
      return new PropertyGet(receiver, new Name('entries'), _mapEntries)
        ..fileOffset = fileOffset;
    }
  
    ForStatement _createForStatement(
  
negative.code:           entry.expression.fileOffset,
            _createVariableGet(result),
            receiverType,
            _createGetKey(entry.expression.fileOffset,
                _createVariableGet(variable), entryType),
            _createGetValue(entry.expression.fileOffset,
                _createVariableGet(variable), entryType)));
      }
      Statement statement = _createForInStatement(entry.fileOffset, variable,
          _createGetEntries(entry.fileOffset, value, receiverType), loopBody);
  
      if (entry.isNullAware) {
        statement = _createIf(
  