findComponentExpression property
Expression?
get
findComponentExpression
Attempts to find and return the closest expression that encloses this
and is an independent Nocterm Component.
Returns null if nothing is found.
Implementation
Expression? get findComponentExpression {
for (var node = this; node != null; node = node.parent) {
if (!node.isComponentExpression) {
if (node is ArgumentList || node is Statement || node is FunctionBody) {
return null;
}
continue;
}
if (node is AssignmentExpression) {
return null;
}
final parent = node.parent;
if (parent is AssignmentExpression) {
if (parent.rightHandSide == node) {
return node as Expression;
}
return null;
}
if (parent is ArgumentList ||
parent is ConditionalExpression && parent.thenExpression == node ||
parent is ConditionalExpression && parent.elseExpression == node ||
parent is ExpressionFunctionBody && parent.expression == node ||
parent is ForElement && parent.body == node ||
parent is IfElement && parent.thenElement == node ||
parent is IfElement && parent.elseElement == node ||
parent is ListLiteral ||
parent is NamedExpression && parent.expression == node ||
parent is Statement ||
parent is SwitchExpressionCase && parent.expression == node ||
parent is VariableDeclaration) {
return node as Expression;
}
}
return null;
}