Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

RenderObjectWrapper cleanup and new asserts. #703

Merged
merged 1 commit into from
Aug 20, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 12 additions & 19 deletions sky/packages/sky/lib/widgets/framework.dart
Original file line number Diff line number Diff line change
Expand Up @@ -864,10 +864,10 @@ void _scheduleComponentForRender(Component component) {
}
}

// RenderObjectWrappers correspond to a desired state of a RenderObject.
// They are fully immutable, with one exception: A Widget which is a
// Component which lives within an MultiChildRenderObjectWrapper's
// children list, may be replaced with the "old" instance if it has
// 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 {

Expand Down Expand Up @@ -911,7 +911,7 @@ abstract class RenderObjectWrapper extends Widget {
if (_ancestor is RenderObjectWrapper)
_ancestor.insertChildRoot(this, slot);
} else {
assert(old is RenderObjectWrapper);
assert(old.runtimeType == runtimeType);
_renderObject = old.renderObject;
_ancestor = old._ancestor;
assert(_renderObject != null);
Expand Down Expand Up @@ -1088,9 +1088,9 @@ abstract class MultiChildRenderObjectWrapper extends RenderObjectWrapper {
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;
Expand Down Expand Up @@ -1155,28 +1155,21 @@ abstract class MultiChildRenderObjectWrapper extends RenderObjectWrapper {
}
}

bool searchForOldNode() {
void searchForOldNode() {
if (currentNode.key == null)
return false; // never re-order these nodes
return; // never re-order these nodes

ensureOldIdMap();
oldNode = oldNodeIdMap[currentNode.key];
if (oldNode == null)
return false;
return;

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;
renderObject.move(oldNode.renderObject, before: nextSibling);
}

// Scan forwards, this time we may re-order;
Expand Down