public virtual IAstNode NodeFromRange(ITextRange range, bool inclusiveEnd = false) {
IAstNode node = null;
if (TextRange.Contains(this, range, inclusiveEnd)) {
node = this;
for (int i = 0; i < this.Children.Count; i++) {
var child = Children[i];
if (range.End < child.Start)
break;
if (TextRange.Contains(child, range, inclusiveEnd)) {
node = (child.Children.Count > 0)
? child.NodeFromRange(range, inclusiveEnd)
: child;
break;
}
}
}
return node;
}