anchor.diff:        nextSibling = newChild;
       }
   
  +    // clean up any of the remaining middle nodes from the old list
       if (haveOldNodes && !oldKeyedChildren.isEmpty) {
         for (Widget oldChild in oldKeyedChildren.values)
           if (oldChild.isFromOldGeneration)
  
positive.code:   static bool _canSync(Widget a, Widget b) {
      assert(a != null);
      assert(b != null);
      return a.runtimeType == b.runtimeType &&
             a.key == b.key &&
             (!a._hasState || !b._hasState);
    }
  
    bool _mounted = false;
  
negative.code:           assert(newNode.isFromOldGeneration);
            assert(oldNode.isFromOldGeneration);
            assert(Widget._canSync(newNode, oldNode));
            if (oldNode == newNode) {
              newNode.setParent(this);
              newNode._markAsFromCurrentGeneration();
              return newNode;
            } else if (oldNode.retainStatefulNodeIfPossible(newNode)) {
              assert(oldNode.mounted);
              assert(!newNode.mounted);
              oldNode.setParent(this);
  