From 4cf1a3504b8effd1f121757bcbfc33e77a91fbcc Mon Sep 17 00:00:00 2001 From: Michael Goderbauer Date: Wed, 7 Aug 2019 09:22:51 -0700 Subject: [PATCH] Remove bogus code in ContainerParentDataMixin.detach (#37479) --- .../flutter/lib/src/rendering/object.dart | 16 ++-------------- .../flutter/test/rendering/object_test.dart | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/packages/flutter/lib/src/rendering/object.dart b/packages/flutter/lib/src/rendering/object.dart index 8d9424f351..1993395a47 100644 --- a/packages/flutter/lib/src/rendering/object.dart +++ b/packages/flutter/lib/src/rendering/object.dart @@ -2834,21 +2834,9 @@ mixin ContainerParentDataMixin on ParentData { /// Clear the sibling pointers. @override void detach() { + assert(previousSibling == null, 'Pointers to siblings must be nulled before detaching ParentData.'); + assert(nextSibling == null, 'Pointers to siblings must be nulled before detaching ParentData.'); super.detach(); - if (previousSibling != null) { - final ContainerParentDataMixin previousSiblingParentData = previousSibling.parentData; - assert(previousSibling != this); - assert(previousSiblingParentData.nextSibling == this); - previousSiblingParentData.nextSibling = nextSibling; - } - if (nextSibling != null) { - final ContainerParentDataMixin nextSiblingParentData = nextSibling.parentData; - assert(nextSibling != this); - assert(nextSiblingParentData.previousSibling == this); - nextSiblingParentData.previousSibling = previousSibling; - } - previousSibling = null; - nextSibling = null; } } diff --git a/packages/flutter/test/rendering/object_test.dart b/packages/flutter/test/rendering/object_test.dart index c74b03c41e..96df3ae9dc 100644 --- a/packages/flutter/test/rendering/object_test.dart +++ b/packages/flutter/test/rendering/object_test.dart @@ -81,8 +81,27 @@ void main() { ), ); }); + + test('ContainerParentDataMixin requires nulled out pointers to siblings before detach', () { + expect(() => TestParentData().detach(), isNot(throwsAssertionError)); + + final TestParentData data1 = TestParentData() + ..nextSibling = RenderOpacity() + ..previousSibling = RenderOpacity(); + expect(() => data1.detach(), throwsAssertionError); + + final TestParentData data2 = TestParentData() + ..previousSibling = RenderOpacity(); + expect(() => data2.detach(), throwsAssertionError); + + final TestParentData data3 = TestParentData() + ..nextSibling = RenderOpacity(); + expect(() => data3.detach(), throwsAssertionError); + }); } +class TestParentData extends ParentData with ContainerParentDataMixin { } + class TestRenderObject extends RenderObject { @override void debugAssertDoesMeetConstraints() { }