Remove parentSemantics from semantics tree compliation (#12479)
This commit is contained in:
parent
32c038ee3f
commit
4ffa801cb1
@ -596,12 +596,9 @@ class _SemanticsGeometry {
|
|||||||
void updateSemanticsNode({
|
void updateSemanticsNode({
|
||||||
@required RenderObject rendering,
|
@required RenderObject rendering,
|
||||||
@required SemanticsNode semantics,
|
@required SemanticsNode semantics,
|
||||||
@required SemanticsNode parentSemantics,
|
|
||||||
}) {
|
}) {
|
||||||
assert(rendering != null);
|
assert(rendering != null);
|
||||||
assert(semantics != null);
|
assert(semantics != null);
|
||||||
assert(parentSemantics != null);
|
|
||||||
assert(parentSemantics.wasAffectedByClip != null);
|
|
||||||
semantics.transform = _transform;
|
semantics.transform = _transform;
|
||||||
final Rect semanticBounds = rendering.semanticBounds;
|
final Rect semanticBounds = rendering.semanticBounds;
|
||||||
if (_clipRect != null) {
|
if (_clipRect != null) {
|
||||||
@ -654,7 +651,7 @@ abstract class _SemanticsFragment {
|
|||||||
List<_SemanticsFragment> _children;
|
List<_SemanticsFragment> _children;
|
||||||
|
|
||||||
bool _debugCompiled = false;
|
bool _debugCompiled = false;
|
||||||
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics });
|
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics });
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() => describeIdentity(this);
|
String toString() => describeIdentity(this);
|
||||||
@ -668,7 +665,7 @@ class _EmptySemanticsFragment extends _SemanticsFragment {
|
|||||||
}) : super(renderObjectOwner: renderObjectOwner, dropSemanticsOfPreviousSiblings: dropSemanticsOfPreviousSiblings);
|
}) : super(renderObjectOwner: renderObjectOwner, dropSemanticsOfPreviousSiblings: dropSemanticsOfPreviousSiblings);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics }) sync* { }
|
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics }) sync* { }
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get producesSemanticNodes => false;
|
bool get producesSemanticNodes => false;
|
||||||
@ -691,14 +688,14 @@ class _CleanSemanticsFragment extends _SemanticsFragment {
|
|||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics }) sync* {
|
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics }) sync* {
|
||||||
assert(!_debugCompiled);
|
assert(!_debugCompiled);
|
||||||
assert(() { _debugCompiled = true; return true; }());
|
assert(() { _debugCompiled = true; return true; }());
|
||||||
final SemanticsNode node = renderObjectOwner._semantics;
|
final SemanticsNode node = renderObjectOwner._semantics;
|
||||||
assert(node != null);
|
assert(node != null);
|
||||||
if (geometry != null) {
|
if (geometry != null) {
|
||||||
geometry.applyAncestorChain(_ancestorChain);
|
geometry.applyAncestorChain(_ancestorChain);
|
||||||
geometry.updateSemanticsNode(rendering: renderObjectOwner, semantics: node, parentSemantics: parentSemantics);
|
geometry.updateSemanticsNode(rendering: renderObjectOwner, semantics: node);
|
||||||
if (node.isInvisible)
|
if (node.isInvisible)
|
||||||
return; // drop the node
|
return; // drop the node
|
||||||
} else {
|
} else {
|
||||||
@ -722,10 +719,10 @@ abstract class _InterestingSemanticsFragment extends _SemanticsFragment {
|
|||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics }) sync* {
|
Iterable<SemanticsNode> compile({ _SemanticsGeometry geometry, SemanticsNode currentSemantics }) sync* {
|
||||||
assert(!_debugCompiled);
|
assert(!_debugCompiled);
|
||||||
assert(() { _debugCompiled = true; return true; }());
|
assert(() { _debugCompiled = true; return true; }());
|
||||||
final SemanticsNode node = establishSemanticsNode(geometry, currentSemantics, parentSemantics);
|
final SemanticsNode node = establishSemanticsNode(geometry, currentSemantics);
|
||||||
if (node.isInvisible)
|
if (node.isInvisible)
|
||||||
return; // drop the node
|
return; // drop the node
|
||||||
final List<SemanticsNode> children = <SemanticsNode>[];
|
final List<SemanticsNode> children = <SemanticsNode>[];
|
||||||
@ -734,13 +731,12 @@ abstract class _InterestingSemanticsFragment extends _SemanticsFragment {
|
|||||||
children.addAll(child.compile(
|
children.addAll(child.compile(
|
||||||
geometry: createSemanticsGeometryForChild(geometry),
|
geometry: createSemanticsGeometryForChild(geometry),
|
||||||
currentSemantics: _children.length > 1 ? null : node,
|
currentSemantics: _children.length > 1 ? null : node,
|
||||||
parentSemantics: node,
|
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
yield* finalizeSemanticsNode(node, children);
|
yield* finalizeSemanticsNode(node, children);
|
||||||
}
|
}
|
||||||
|
|
||||||
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics);
|
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics);
|
||||||
Iterable<SemanticsNode> finalizeSemanticsNode(SemanticsNode node, List<SemanticsNode> children);
|
Iterable<SemanticsNode> finalizeSemanticsNode(SemanticsNode node, List<SemanticsNode> children);
|
||||||
_SemanticsGeometry createSemanticsGeometryForChild(_SemanticsGeometry geometry);
|
_SemanticsGeometry createSemanticsGeometryForChild(_SemanticsGeometry geometry);
|
||||||
}
|
}
|
||||||
@ -762,11 +758,10 @@ class _RootSemanticsFragment extends _InterestingSemanticsFragment {
|
|||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics) {
|
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics) {
|
||||||
assert(_ancestorChain.length == 1);
|
assert(_ancestorChain.length == 1);
|
||||||
assert(geometry == null);
|
assert(geometry == null);
|
||||||
assert(currentSemantics == null);
|
assert(currentSemantics == null);
|
||||||
assert(parentSemantics == null);
|
|
||||||
renderObjectOwner._semantics ??= new SemanticsNode.root(
|
renderObjectOwner._semantics ??= new SemanticsNode.root(
|
||||||
handler: renderObjectOwner is SemanticsActionHandler ? renderObjectOwner as dynamic : null,
|
handler: renderObjectOwner is SemanticsActionHandler ? renderObjectOwner as dynamic : null,
|
||||||
owner: renderObjectOwner.owner.semanticsOwner,
|
owner: renderObjectOwner.owner.semanticsOwner,
|
||||||
@ -818,7 +813,7 @@ class _ConcreteSemanticsFragment extends _InterestingSemanticsFragment {
|
|||||||
final bool _mergesAllDescendants;
|
final bool _mergesAllDescendants;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics) {
|
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics) {
|
||||||
renderObjectOwner._semantics ??= new SemanticsNode(
|
renderObjectOwner._semantics ??= new SemanticsNode(
|
||||||
handler: renderObjectOwner is SemanticsActionHandler ? renderObjectOwner as dynamic : null,
|
handler: renderObjectOwner is SemanticsActionHandler ? renderObjectOwner as dynamic : null,
|
||||||
showOnScreen: renderObjectOwner.showOnScreen,
|
showOnScreen: renderObjectOwner.showOnScreen,
|
||||||
@ -828,7 +823,7 @@ class _ConcreteSemanticsFragment extends _InterestingSemanticsFragment {
|
|||||||
node.mergeAllDescendantsIntoThisNode = _mergesAllDescendants;
|
node.mergeAllDescendantsIntoThisNode = _mergesAllDescendants;
|
||||||
if (geometry != null) {
|
if (geometry != null) {
|
||||||
geometry.applyAncestorChain(_ancestorChain);
|
geometry.applyAncestorChain(_ancestorChain);
|
||||||
geometry.updateSemanticsNode(rendering: renderObjectOwner, semantics: node, parentSemantics: parentSemantics);
|
geometry.updateSemanticsNode(rendering: renderObjectOwner, semantics: node);
|
||||||
} else {
|
} else {
|
||||||
assert(_ancestorChain.length == 1);
|
assert(_ancestorChain.length == 1);
|
||||||
}
|
}
|
||||||
@ -879,7 +874,7 @@ class _ImplicitSemanticsFragment extends _InterestingSemanticsFragment {
|
|||||||
final bool _mergesAllDescendants;
|
final bool _mergesAllDescendants;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics, SemanticsNode parentSemantics) {
|
SemanticsNode establishSemanticsNode(_SemanticsGeometry geometry, SemanticsNode currentSemantics) {
|
||||||
SemanticsNode node;
|
SemanticsNode node;
|
||||||
assert(_introducesOwnNode == null);
|
assert(_introducesOwnNode == null);
|
||||||
assert(annotator != null || _mergesAllDescendants);
|
assert(annotator != null || _mergesAllDescendants);
|
||||||
@ -900,7 +895,7 @@ class _ImplicitSemanticsFragment extends _InterestingSemanticsFragment {
|
|||||||
if (geometry != null) {
|
if (geometry != null) {
|
||||||
geometry.applyAncestorChain(_ancestorChain);
|
geometry.applyAncestorChain(_ancestorChain);
|
||||||
if (_introducesOwnNode)
|
if (_introducesOwnNode)
|
||||||
geometry.updateSemanticsNode(rendering: renderObjectOwner, semantics: node, parentSemantics: parentSemantics);
|
geometry.updateSemanticsNode(rendering: renderObjectOwner, semantics: node);
|
||||||
} else {
|
} else {
|
||||||
assert(_ancestorChain.length == 1);
|
assert(_ancestorChain.length == 1);
|
||||||
}
|
}
|
||||||
@ -949,7 +944,6 @@ class _ForkingSemanticsFragment extends _SemanticsFragment {
|
|||||||
Iterable<SemanticsNode> compile({
|
Iterable<SemanticsNode> compile({
|
||||||
@required _SemanticsGeometry geometry,
|
@required _SemanticsGeometry geometry,
|
||||||
SemanticsNode currentSemantics,
|
SemanticsNode currentSemantics,
|
||||||
SemanticsNode parentSemantics
|
|
||||||
}) sync* {
|
}) sync* {
|
||||||
assert(!_debugCompiled);
|
assert(!_debugCompiled);
|
||||||
assert(() { _debugCompiled = true; return true; }());
|
assert(() { _debugCompiled = true; return true; }());
|
||||||
@ -960,7 +954,6 @@ class _ForkingSemanticsFragment extends _SemanticsFragment {
|
|||||||
yield* child.compile(
|
yield* child.compile(
|
||||||
geometry: new _SemanticsGeometry.copy(geometry),
|
geometry: new _SemanticsGeometry.copy(geometry),
|
||||||
currentSemantics: null,
|
currentSemantics: null,
|
||||||
parentSemantics: parentSemantics
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2718,7 +2711,7 @@ abstract class RenderObject extends AbstractNode with DiagnosticableTreeMixin im
|
|||||||
assert(_semantics != null || parent is! RenderObject);
|
assert(_semantics != null || parent is! RenderObject);
|
||||||
final _SemanticsFragment fragment = _getSemanticsFragment(mergeIntoParent: _semantics?.parent?.isPartOfNodeMerging ?? false);
|
final _SemanticsFragment fragment = _getSemanticsFragment(mergeIntoParent: _semantics?.parent?.isPartOfNodeMerging ?? false);
|
||||||
assert(fragment is _InterestingSemanticsFragment);
|
assert(fragment is _InterestingSemanticsFragment);
|
||||||
final SemanticsNode node = fragment.compile(parentSemantics: _semantics?.parent).single;
|
final SemanticsNode node = fragment.compile().single;
|
||||||
assert(node != null);
|
assert(node != null);
|
||||||
assert(!node.isInvisible);
|
assert(!node.isInvisible);
|
||||||
assert(node == _semantics);
|
assert(node == _semantics);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user