in lib/src/call_chain_visitor.dart [533:567]
Expression _unwrapTarget(Expression node, List<_Selector> calls) {
// Don't include things that look like static method or constructor
// calls in the call chain because that tends to split up named
// constructors from their class.
if (SourceVisitor.looksLikeStaticCall(node)) return node;
// Selectors.
if (node is MethodInvocation && node.target != null) {
return _unwrapSelector(node.target!, _MethodSelector(node), calls);
}
if (node is PropertyAccess && node.target != null) {
return _unwrapSelector(node.target!, _PropertySelector(node), calls);
}
if (node is PrefixedIdentifier) {
return _unwrapSelector(node.prefix, _PrefixedSelector(node), calls);
}
// Postfix expressions.
if (node is IndexExpression && node.target != null) {
return _unwrapPostfix(node, node.target!, calls);
}
if (node is FunctionExpressionInvocation) {
return _unwrapPostfix(node, node.function, calls);
}
if (node is PostfixExpression && node.operator.type == TokenType.BANG) {
return _unwrapPostfix(node, node.operand, calls);
}
// Otherwise, it isn't a selector so we're done.
return node;
}