anchor.diff:  
     static List<RenderObject> _nodesNeedingPaint = new List<RenderObject>();
   
  -  final sky.PaintingNode _paintingNode = new sky.PaintingNode();
  -  sky.PaintingNode get paintingNode {
  -    assert(createNewDisplayList);
  -    return _paintingNode;
  -  }
     bool _needsPaint = true;
     bool get needsPaint => _needsPaint;
   
  
positive.code:     try {
        _paintWithContext(context, Offset.zero);
      } catch (e) {
        print('Exception raised during _updatePaintingCanvas:\n${e}\nContext:\n${this}');
        if (inDebugBuild)
          rethrow;
        return;
      }
      assert(!_needsLayout); // check that the paint() method didn't mark us dirty again
      assert(!_needsPaint); // check that the paint() method didn't mark us dirty again
      _paintingNode.setBackingDrawable(recorder.endRecordingAsDrawable());
      if (context._descendentsWithPaintingCanvases != null) {
        for (RenderObject node in context._descendentsWithPaintingCanvases) {
          assert(node.attached == attached);
          if (node._needsPaint)
            node._updatePaintingCanvas();
        };
      }
    }
  
    void _paintWithContext(PaintingContext context, Offset offset) {
  
negative.code:     assert(!_needsPaint);
    }
  
    bool get requiresCompositing => false;
    Rect get paintBounds;
    void debugPaint(PaintingContext context, Offset offset) { }
    void paint(PaintingContext context, Offset offset) { }
  