anchor.diff:    void syncRenderObject(MultiChildRenderObjectWrapper old) {
       super.syncRenderObject(old);
   
  -    final renderObject = this.renderObject; // TODO(ianh): Remove this once the analyzer is cleverer
  -    if (renderObject is! ContainerRenderObjectMixin)
  -      return;
  +    final ContainerRenderObjectMixin renderObject = this.renderObject; // TODO(ianh): Remove this once the analyzer is cleverer
  +    assert(renderObject is ContainerRenderObjectMixin);
  +    assert(old == null || old.renderObject == renderObject);
   
       var startIndex = 0;
       var endIndex = children.length;
  
positive.code:       }
      }
  
      bool searchForOldNode() {
        if (currentNode.key == null)
          return false; // never re-order these nodes
  
        ensureOldIdMap();
        oldNode = oldNodeIdMap[currentNode.key];
        if (oldNode == null)
          return false;
  
        oldNodeIdMap[currentNode.key] = null; // mark it reordered
        assert(renderObject is ContainerRenderObjectMixin);
        assert(old.renderObject is ContainerRenderObjectMixin);
        assert(oldNode.renderObject != null);
  
        if (old.renderObject == renderObject) {
          renderObject.move(oldNode.renderObject, before: nextSibling);
        } else {
          (old.renderObject as ContainerRenderObjectMixin).remove(oldNode.renderObject); // TODO(ianh): Remove cast once the analyzer is cleverer
          renderObject.add(oldNode.renderObject, before: nextSibling);
        }
  
        return true;
      }
  
      // Scan forwards, this time we may re-order;
  
negative.code:   }
  }
  
  // RenderObjectWrappers correspond to a desired state of a
  // RenderObject. They are fully immutable, except that a Widget which
  // is a Component which lives within a RenderObjectWrapper's children
  // list may be in-place replaced with the "old" instance if it has
  // become stateful.
  abstract class RenderObjectWrapper extends Widget {
  
  