in src/StructuredLogViewer/Controls/BuildControl.xaml.cs [333:386]
private bool UpdateFileVisibility(IEnumerable<NamedNode> items, string text)
{
bool visible = false;
if (items == null)
{
return false;
}
foreach (var item in items)
{
if (item is Folder folder)
{
var subItems = folder.Children.OfType<NamedNode>();
var folderVisibility = UpdateFileVisibility(subItems, text);
folder.IsVisible = folderVisibility;
visible |= folderVisibility;
}
else if (item is SourceFile file)
{
if (string.IsNullOrEmpty(text) || file.SourceFilePath.IndexOf(text, StringComparison.OrdinalIgnoreCase) > -1)
{
visible = true;
file.IsVisible = true;
}
else
{
file.IsVisible = false;
}
var subItems = file.Children.OfType<NamedNode>();
var fileVisibility = UpdateFileVisibility(subItems, text);
file.IsVisible |= fileVisibility;
visible |= fileVisibility;
}
else if (item is Target || item is Task)
{
if (string.IsNullOrEmpty(text) ||
item.Name.IndexOf(text, StringComparison.OrdinalIgnoreCase) > -1 ||
(text == "$target" && item is Target) ||
(text == "$task" && item is Task))
{
visible = true;
item.IsVisible = true;
}
else
{
item.IsVisible = false;
}
}
}
return visible;
}