Browse Source

Drop redundant global:: qualifiers on ICSharpCode references

The global:: prefixes existed because the test project's namespace
ICSharpCode.ILSpy.Tests used to shadow the app's old top-level ILSpy
namespace. With the UI code back under ICSharpCode.ILSpy there is
nothing left to shadow, so plain fully qualified names resolve fine.

Assisted-by: Claude:claude-fable-5:Claude Code
pull/3779/head
Siegfried Pammer 4 weeks ago
parent
commit
f53ca6d080
  1. 8
      ILSpy.Tests/Analyzers/AnalyzeContextMenuTests.cs
  2. 4
      ILSpy.Tests/Analyzers/AnalyzerConstructorUsesTests.cs
  3. 6
      ILSpy.Tests/Analyzers/AnalyzerPaneVisibilityTests.cs
  4. 8
      ILSpy.Tests/Analyzers/AnalyzerTreeKeyboardTests.cs
  5. 4
      ILSpy.Tests/AssemblyList/AssemblyTreeContextMenuTests.cs
  6. 2
      ILSpy.Tests/AssemblyList/AssemblyTreeDragReorderTests.cs
  7. 6
      ILSpy.Tests/AssemblyList/AssemblyTreeExpanderHitboxTests.cs
  8. 4
      ILSpy.Tests/AssemblyList/AssemblyTreeFileDropTests.cs
  9. 2
      ILSpy.Tests/AssemblyList/AssemblyTreeSortTests.cs
  10. 58
      ILSpy.Tests/AssemblyList/AssemblyTreeTests.cs
  11. 2
      ILSpy.Tests/AssemblyList/UseNestedNamespaceNodesGridVerification.cs
  12. 8
      ILSpy.Tests/Compare/CompareContextMenuTests.cs
  13. 4
      ILSpy.Tests/Compare/CompareViewRenderTests.cs
  14. 38
      ILSpy.Tests/ContextMenus/DecompileInNewViewTests.cs
  15. 4
      ILSpy.Tests/ContextMenus/KeyboardContextMenuFocusTests.cs
  16. 16
      ILSpy.Tests/Diagnostics/GraphVizGraphTests.cs
  17. 2
      ILSpy.Tests/Diagnostics/StartupPerfTests.cs
  18. 8
      ILSpy.Tests/Docking/ContentPageHierarchyTests.cs
  19. 4
      ILSpy.Tests/Docking/DocumentTabContextMenuTests.cs
  20. 24
      ILSpy.Tests/Docking/LayoutPersistenceTests.cs
  21. 2
      ILSpy.Tests/Docking/PreviewTabPromotionTests.cs
  22. 2
      ILSpy.Tests/Editor/DecompilerViewTests.cs
  23. 2
      ILSpy.Tests/FixtureAssembly.cs
  24. 18
      ILSpy.Tests/Input/HeadlessMmbPointerTests.cs
  25. 2
      ILSpy.Tests/Languages/CSharpBracketSearcherTests.cs
  26. 2
      ILSpy.Tests/Languages/ProjectExportTests.cs
  27. 6
      ILSpy.Tests/Languages/SolutionExportTests.cs
  28. 2
      ILSpy.Tests/MainWindow/MainToolBarLayoutTests.cs
  29. 4
      ILSpy.Tests/Metadata/MetadataDisablesLanguageSwitchingTests.cs
  30. 14
      ILSpy.Tests/Metadata/MetadataFilterTests.cs
  31. 26
      ILSpy.Tests/Metadata/MetadataNodeIconParityTests.cs
  32. 2
      ILSpy.Tests/Metadata/MetadataProtocolHandlerDrillDownTests.cs
  33. 4
      ILSpy.Tests/Metadata/MetadataRowActivationTests.cs
  34. 2
      ILSpy.Tests/Metadata/MetadataTabSessionRestoreTests.cs
  35. 2
      ILSpy.Tests/Metadata/MetadataTokenNavigationTests.cs
  36. 20
      ILSpy.Tests/Metadata/PEHeaderTreeTests.cs
  37. 4
      ILSpy.Tests/Navigation/NavigationTests.cs
  38. 2
      ILSpy.Tests/Options/ApiVisibilityFilterTests.cs
  39. 8
      ILSpy.Tests/Options/OptionsTabTests.cs
  40. 2
      ILSpy.Tests/ResetAppStateAttribute.cs
  41. 2
      ILSpy.Tests/Resources/ResourceFactoryTests.cs
  42. 2
      ILSpy.Tests/Search/SearchInputFocusTests.cs
  43. 6
      ILSpy.Tests/Search/SearchPaneNicetiesTests.cs
  44. 2
      ILSpy.Tests/Search/SearchPaneSortableColumnsTests.cs
  45. 4
      ILSpy.Tests/Search/SearchPaneStreamingTests.cs
  46. 6
      ILSpy.Tests/Search/SearchPaneViewTests.cs
  47. 4
      ILSpy.Tests/Search/SearchProgressTests.cs
  48. 4
      ILSpy.Tests/TestCaptureExtensions.cs
  49. 10
      ILSpy.Tests/TestHarness.cs
  50. 4
      ILSpy.Tests/TreeNavigation.cs
  51. 22
      ILSpy.Tests/TreeNodeAssertions.cs
  52. 8
      ILSpy.Tests/Waiters.cs
  53. 2
      ILSpy/Docking/DockWorkspace.cs
  54. 2
      ILSpy/TreeNodes/ExtensionTreeNode.cs
  55. 2
      ILSpy/TreeNodes/ImageResourceEntryNode.cs
  56. 8
      ILSpy/ViewModels/MetadataTablePageModel.cs

8
ILSpy.Tests/Analyzers/AnalyzeContextMenuTests.cs

@ -137,7 +137,7 @@ public class AnalyzeContextMenuTests @@ -137,7 +137,7 @@ public class AnalyzeContextMenuTests
var (window, vm) = await TestHarness.BootAsync();
var pane = await window.WaitForComponent<global::ICSharpCode.ILSpy.AssemblyTree.AssemblyListPane>();
var pane = await window.WaitForComponent<ICSharpCode.ILSpy.AssemblyTree.AssemblyListPane>();
var typeNode = vm.AssemblyTreeModel.FindNode<TypeTreeNode>(
"System.Linq", "System.Linq", "System.Linq.Enumerable");
vm.AssemblyTreeModel.SelectNode(typeNode);
@ -146,7 +146,7 @@ public class AnalyzeContextMenuTests @@ -146,7 +146,7 @@ public class AnalyzeContextMenuTests
var analyzerVm = AppComposition.Current.GetExport<AnalyzerTreeViewModel>();
var beforeCount = analyzerVm.Root.Children.Count;
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.RaiseEvent(new global::Avalonia.Input.KeyEventArgs {
Key = global::Avalonia.Input.Key.R,
KeyModifiers = global::Avalonia.Input.KeyModifiers.Control,
@ -168,7 +168,7 @@ public class AnalyzeContextMenuTests @@ -168,7 +168,7 @@ public class AnalyzeContextMenuTests
var (_, vm) = await TestHarness.BootAsync();
var dockWorkspace = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>();
var dockWorkspace = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>();
var analyzerVm = AppComposition.Current.GetExport<AnalyzerTreeViewModel>();
var entry = AppComposition.Current.GetExport<ContextMenuEntryRegistry>()
.GetEntry(nameof(Resources.Analyze));
@ -238,7 +238,7 @@ public class AnalyzeContextMenuTests @@ -238,7 +238,7 @@ public class AnalyzeContextMenuTests
}
}
static AnalyzerTreeViewModel? FindAnalyzerPane(global::ICSharpCode.ILSpy.Docking.DockWorkspace dockWorkspace)
static AnalyzerTreeViewModel? FindAnalyzerPane(ICSharpCode.ILSpy.Docking.DockWorkspace dockWorkspace)
{
foreach (var dockable in WalkDockables(dockWorkspace.Layout))
{

4
ILSpy.Tests/Analyzers/AnalyzerConstructorUsesTests.cs

@ -76,7 +76,7 @@ public class AnalyzerConstructorUsesTests @@ -76,7 +76,7 @@ public class AnalyzerConstructorUsesTests
var assemblyList = vm.AssemblyTreeModel.AssemblyList!;
var context = new AnalyzerContext {
CancellationToken = CancellationToken.None,
Language = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Languages.LanguageService>().CurrentLanguage,
Language = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Languages.LanguageService>().CurrentLanguage,
AssemblyList = assemblyList,
};
var results = analyzer.Analyze(ctor, context).Take(20).ToList();
@ -107,7 +107,7 @@ public class AnalyzerConstructorUsesTests @@ -107,7 +107,7 @@ public class AnalyzerConstructorUsesTests
var assemblyList = vm.AssemblyTreeModel.AssemblyList!;
var context = new AnalyzerContext {
CancellationToken = CancellationToken.None,
Language = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Languages.LanguageService>().CurrentLanguage,
Language = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Languages.LanguageService>().CurrentLanguage,
AssemblyList = assemblyList,
};
var results = analyzer.Analyze(ctor, context).Take(20).ToList();

6
ILSpy.Tests/Analyzers/AnalyzerPaneVisibilityTests.cs

@ -88,10 +88,10 @@ public class AnalyzerPaneVisibilityTests @@ -88,10 +88,10 @@ public class AnalyzerPaneVisibilityTests
var (_, vm) = await TestHarness.BootAsync(3);
var dockWorkspace = AppComposition.Current.GetExport<DockWorkspace>();
var analyzer = AppComposition.Current.GetExport<AnalyzerTreeViewModel>();
var search = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Search.SearchPaneModel>();
var search = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Search.SearchPaneModel>();
var paneIds = AllDockables(dockWorkspace.Layout)
.OfType<global::ICSharpCode.ILSpy.ViewModels.ToolPaneModel>()
.OfType<ICSharpCode.ILSpy.ViewModels.ToolPaneModel>()
.Select(p => p.Id)
.ToList();
paneIds.Should().Contain("AssemblyTree", "the assembly-tree pane is visible by default");
@ -99,7 +99,7 @@ public class AnalyzerPaneVisibilityTests @@ -99,7 +99,7 @@ public class AnalyzerPaneVisibilityTests
paneIds.Should().NotContain("Analyzer", "Analyzer is hidden until invoked");
// ...but showing one materialises it into its home location.
dockWorkspace.ShowToolPane(global::ICSharpCode.ILSpy.Search.SearchPaneModel.PaneContentId);
dockWorkspace.ShowToolPane(ICSharpCode.ILSpy.Search.SearchPaneModel.PaneContentId);
AllDockables(dockWorkspace.Layout).Should().Contain(search,
"Show Search must materialise the hidden Search pane");
(search.Owner as IDock)!.Id.Should().Be("TopTools",

8
ILSpy.Tests/Analyzers/AnalyzerTreeKeyboardTests.cs

@ -58,8 +58,8 @@ public class AnalyzerTreeKeyboardTests @@ -58,8 +58,8 @@ public class AnalyzerTreeKeyboardTests
analyzed.IsExpanded = false;
dockWorkspace.ShowToolPane(AnalyzerTreeViewModel.PaneContentId);
var view = await window.WaitForComponent<global::ICSharpCode.ILSpy.Analyzers.AnalyzerTreeView>();
var tree = await view.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var view = await window.WaitForComponent<ICSharpCode.ILSpy.Analyzers.AnalyzerTreeView>();
var tree = await view.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
tree.Focus();
Dispatcher.UIThread.RunJobs();
@ -77,8 +77,8 @@ public class AnalyzerTreeKeyboardTests @@ -77,8 +77,8 @@ public class AnalyzerTreeKeyboardTests
// Analyze context-menu entry. Here a selected type lands as a node in the analyzer pane.
var (window, vm) = await TestHarness.BootAsync(3);
var analyzerVm = AppComposition.Current.GetExport<AnalyzerTreeViewModel>();
var pane = await window.WaitForComponent<global::ICSharpCode.ILSpy.AssemblyTree.AssemblyListPane>();
var tree = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var pane = await window.WaitForComponent<ICSharpCode.ILSpy.AssemblyTree.AssemblyListPane>();
var tree = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var typeNode = vm.AssemblyTreeModel.FindNode<TypeTreeNode>(
"System.Linq", "System.Linq", "System.Linq.Enumerable");

4
ILSpy.Tests/AssemblyList/AssemblyTreeContextMenuTests.cs

@ -51,7 +51,7 @@ public class AssemblyTreeContextMenuTests @@ -51,7 +51,7 @@ public class AssemblyTreeContextMenuTests
// Assert — TreeGrid carries a ContextMenu. (The menu may be empty if no entries are
// registered yet; verifies only that the host is in place.)
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.ContextMenu.Should().NotBeNull();
}
@ -77,7 +77,7 @@ public class AssemblyTreeContextMenuTests @@ -77,7 +77,7 @@ public class AssemblyTreeContextMenuTests
// Act 1 — re-attach the context menu with our stub entries.
pane.AttachContextMenu(new IContextMenuEntryExport[] { export });
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var menu = grid.ContextMenu!;
// Trigger the build path the live Opening event would take.

2
ILSpy.Tests/AssemblyList/AssemblyTreeDragReorderTests.cs

@ -92,7 +92,7 @@ public class AssemblyTreeDragReorderTests @@ -92,7 +92,7 @@ public class AssemblyTreeDragReorderTests
var root = (AssemblyListTreeNode)vm.AssemblyTreeModel.Root!;
var top = root.Children.OfType<AssemblyTreeNode>().ToArray();
top[0].CanDrag(new global::ICSharpCode.ILSpyX.TreeView.SharpTreeNode[] { top[0], top[1] })
top[0].CanDrag(new ICSharpCode.ILSpyX.TreeView.SharpTreeNode[] { top[0], top[1] })
.Should().BeTrue("top-level non-package assemblies are draggable");
top[0].IsExpanded = true;

6
ILSpy.Tests/AssemblyList/AssemblyTreeExpanderHitboxTests.cs

@ -61,7 +61,7 @@ public class AssemblyTreeExpanderHitboxTests @@ -61,7 +61,7 @@ public class AssemblyTreeExpanderHitboxTests
TestCapture.Step("system-linq-expanded-and-selected");
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
// Let rows realise and layout settle.
for (int i = 0; i < 8; i++)
@ -72,7 +72,7 @@ public class AssemblyTreeExpanderHitboxTests @@ -72,7 +72,7 @@ public class AssemblyTreeExpanderHitboxTests
}
// Act — locate the expander toggle of the (expandable) assembly row.
var row = grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
var row = grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.FirstOrDefault(r => RowMatches(r, assemblyNode));
row.Should().NotBeNull("the expanded assembly row must be realised");
var expander = row!.GetVisualDescendants().OfType<ToggleButton>()
@ -110,6 +110,6 @@ public class AssemblyTreeExpanderHitboxTests @@ -110,6 +110,6 @@ public class AssemblyTreeExpanderHitboxTests
description: "clicking the enlarged expander area (below the glyph) must toggle the node");
}
static bool RowMatches(global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem row, SharpTreeNode target)
static bool RowMatches(ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem row, SharpTreeNode target)
=> ReferenceEquals(row.DataContext, target);
}

4
ILSpy.Tests/AssemblyList/AssemblyTreeFileDropTests.cs

@ -63,7 +63,7 @@ public class AssemblyTreeFileDropTests @@ -63,7 +63,7 @@ public class AssemblyTreeFileDropTests
// produce a "no" cursor and never reach our handler.
var (window, vm) = await TestHarness.BootAsync();
var pane = await window.WaitForComponent<AssemblyListPane>();
var tree = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var tree = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
DragDrop.GetAllowDrop(tree).Should().BeTrue();
}
@ -229,7 +229,7 @@ public class AssemblyTreeFileDropTests @@ -229,7 +229,7 @@ public class AssemblyTreeFileDropTests
return path;
}
static void TryUnload(global::ICSharpCode.ILSpyX.AssemblyList list, string path)
static void TryUnload(ICSharpCode.ILSpyX.AssemblyList list, string path)
{
var match = list.GetAssemblies().FirstOrDefault(a =>
string.Equals(a.FileName, path, StringComparison.OrdinalIgnoreCase));

2
ILSpy.Tests/AssemblyList/AssemblyTreeSortTests.cs

@ -46,7 +46,7 @@ public class AssemblyTreeSortTests @@ -46,7 +46,7 @@ public class AssemblyTreeSortTests
var model = vm.AssemblyTreeModel;
var list = model.AssemblyList!;
var pane = await window.WaitForComponent<AssemblyListPane>();
await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
// Open extra assemblies whose names are deliberately out of sorted order so the sort moves
// real rows around.

58
ILSpy.Tests/AssemblyList/AssemblyTreeTests.cs

@ -89,7 +89,7 @@ public class AssemblyTreeTests @@ -89,7 +89,7 @@ public class AssemblyTreeTests
// Act — locate the realised DataGrid inside the AssemblyListPane.
var pane = await window.WaitForComponent<AssemblyListPane>();
var treeGrid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var treeGrid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
// Assert — SelectionMode is Extended.
treeGrid.SelectionMode.Should().Be(global::Avalonia.Controls.SelectionMode.Multiple,
@ -247,14 +247,14 @@ public class AssemblyTreeTests @@ -247,14 +247,14 @@ public class AssemblyTreeTests
// Act 1 + Assert 1 — first access triggers the loading state.
var initialIcon = refNode.Icon;
initialIcon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.AssemblyLoading);
initialIcon.Should().BeSameAs(ICSharpCode.ILSpy.Images.AssemblyLoading);
// Act 2 — wait for resolver to finish.
await Waiters.WaitForAsync(() =>
!ReferenceEquals(refNode.Icon, global::ICSharpCode.ILSpy.Images.AssemblyLoading));
!ReferenceEquals(refNode.Icon, ICSharpCode.ILSpy.Images.AssemblyLoading));
// Assert 2 — icon settles on the resolved Assembly glyph.
refNode.Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.Assembly);
refNode.Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.Assembly);
}
[AvaloniaTest]
@ -371,8 +371,8 @@ public class AssemblyTreeTests @@ -371,8 +371,8 @@ public class AssemblyTreeTests
// Assert — non-null, icon is one of the two ref glyphs, label is non-empty.
((object?)memberRefNode).Should().NotBeNull(
"at least one TypeRef under System.Linq's references must have member references");
memberRefNode!.Icon.Should().BeOneOf(global::ICSharpCode.ILSpy.Images.MethodReference,
global::ICSharpCode.ILSpy.Images.FieldReference);
memberRefNode!.Icon.Should().BeOneOf(ICSharpCode.ILSpy.Images.MethodReference,
ICSharpCode.ILSpy.Images.FieldReference);
memberRefNode.Text.ToString().Should().NotBeNullOrWhiteSpace();
}
@ -417,7 +417,7 @@ public class AssemblyTreeTests @@ -417,7 +417,7 @@ public class AssemblyTreeTests
// Assert — non-null, uses the ExportedType glyph, label is non-empty.
((object?)exportedNode).Should().NotBeNull(
"mscorlib must forward types to System.Private.CoreLib via ExportedType rows");
exportedNode!.Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.ExportedType);
exportedNode!.Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.ExportedType);
exportedNode.Text.ToString().Should().NotBeNullOrWhiteSpace();
}
@ -630,7 +630,7 @@ public class AssemblyTreeTests @@ -630,7 +630,7 @@ public class AssemblyTreeTests
}
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
vm.AssemblyTreeModel.SelectNode(enumerable);
await Waiters.WaitForAsync(() => ReferenceEquals(vm.AssemblyTreeModel.SelectedItem, enumerable));
@ -654,7 +654,7 @@ public class AssemblyTreeTests @@ -654,7 +654,7 @@ public class AssemblyTreeTests
// Pick the bottom-most visible non-selected row — that's the strictest probe. If the
// bug regressed, CenterRowInView would scroll it up to the middle and offset would
// change.
var candidateRow = grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
var candidateRow = grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.Where(r => !r.IsSelected
&& r.TranslatePoint(new Point(0, 0), scrollViewer) is { } p
&& p.Y >= 0 && p.Y + r.Bounds.Height <= scrollViewer.Viewport.Height)
@ -707,7 +707,7 @@ public class AssemblyTreeTests @@ -707,7 +707,7 @@ public class AssemblyTreeTests
}
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
vm.AssemblyTreeModel.SelectNode(enumerable);
await Waiters.WaitForAsync(() => ReferenceEquals(vm.AssemblyTreeModel.SelectedItem, enumerable));
@ -728,7 +728,7 @@ public class AssemblyTreeTests @@ -728,7 +728,7 @@ public class AssemblyTreeTests
"the test scenario requires the viewport be parked mid-list");
// Pick the bottom-most fully-visible non-selected row -- the strictest probe for an unwanted recentre.
var candidateRow = grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
var candidateRow = grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.Where(r => !r.IsSelected
&& r.TranslatePoint(new Point(0, 0), scrollViewer) is { } p
&& p.Y >= 0 && p.Y + r.Bounds.Height <= scrollViewer.Viewport.Height)
@ -774,7 +774,7 @@ public class AssemblyTreeTests @@ -774,7 +774,7 @@ public class AssemblyTreeTests
t.Expand();
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var scrollViewer = await grid.WaitForComponent<ScrollViewer>();
// Select + reveal the type, then let it settle on screen.
@ -862,7 +862,7 @@ public class AssemblyTreeTests @@ -862,7 +862,7 @@ public class AssemblyTreeTests
// Act — invoke SaveCodeAsync with a temp path (bypassing the file picker so the test
// is deterministic).
var registry = AppComposition.Current.GetExport<MainMenuCommandRegistry>();
var saveCmd = (global::ICSharpCode.ILSpy.Commands.SaveCommand)registry.Commands
var saveCmd = (ICSharpCode.ILSpy.Commands.SaveCommand)registry.Commands
.Single(c => c.Metadata.Header == nameof(Resources._SaveCode))
.CreateExport().Value;
@ -907,7 +907,7 @@ public class AssemblyTreeTests @@ -907,7 +907,7 @@ public class AssemblyTreeTests
TestCapture.Step("sacrificial-selected");
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.Focus();
Dispatcher.UIThread.RunJobs();
@ -956,7 +956,7 @@ public class AssemblyTreeTests @@ -956,7 +956,7 @@ public class AssemblyTreeTests
await Waiters.WaitForAsync(() => ReferenceEquals(model.SelectedItem, firstAssembly));
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.Focus();
Dispatcher.UIThread.RunJobs();
@ -987,7 +987,7 @@ public class AssemblyTreeTests @@ -987,7 +987,7 @@ public class AssemblyTreeTests
var (window, vm) = await TestHarness.BootAsync(3);
var model = vm.AssemblyTreeModel;
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.Focus();
Dispatcher.UIThread.RunJobs();
@ -1024,7 +1024,7 @@ public class AssemblyTreeTests @@ -1024,7 +1024,7 @@ public class AssemblyTreeTests
var (window, vm) = await TestHarness.BootAsync(3);
var model = vm.AssemblyTreeModel;
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.Focus();
Dispatcher.UIThread.RunJobs();
@ -1051,7 +1051,7 @@ public class AssemblyTreeTests @@ -1051,7 +1051,7 @@ public class AssemblyTreeTests
var (window, vm) = await TestHarness.BootAsync(3);
var model = vm.AssemblyTreeModel;
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.Focus();
Dispatcher.UIThread.RunJobs();
@ -1083,7 +1083,7 @@ public class AssemblyTreeTests @@ -1083,7 +1083,7 @@ public class AssemblyTreeTests
var (window, vm) = await TestHarness.BootAsync(3);
var model = vm.AssemblyTreeModel;
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.Focus();
Dispatcher.UIThread.RunJobs();
@ -1122,7 +1122,7 @@ public class AssemblyTreeTests @@ -1122,7 +1122,7 @@ public class AssemblyTreeTests
var (window, vm) = await TestHarness.BootAsync(3);
var model = vm.AssemblyTreeModel;
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.Focus();
Dispatcher.UIThread.RunJobs();
@ -1229,7 +1229,7 @@ public class AssemblyTreeTests @@ -1229,7 +1229,7 @@ public class AssemblyTreeTests
var (window, vm) = await TestHarness.BootAsync(3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var assemblyNode = vm.AssemblyTreeModel.FindNode<AssemblyTreeNode>("System.Linq");
assemblyNode.IsExpanded.Should().BeFalse("baseline: top-level assembly rows start collapsed");
@ -1350,7 +1350,7 @@ public class AssemblyTreeTests @@ -1350,7 +1350,7 @@ public class AssemblyTreeTests
// Second metadata view via the new-tab carve-out — pick a different table so the
// content is unmistakable.
var methodTableNode = tablesNode.Children
.OfType<global::ICSharpCode.ILSpy.Metadata.CorTables.MethodTableTreeNode>().Single();
.OfType<ICSharpCode.ILSpy.Metadata.CorTables.MethodTableTreeNode>().Single();
vm.DockWorkspace.OpenNodeInNewTab(methodTableNode);
await Waiters.WaitForAsync(
@ -1431,12 +1431,12 @@ public class AssemblyTreeTests @@ -1431,12 +1431,12 @@ public class AssemblyTreeTests
var settings = AppComposition.Current.GetExport<SettingsService>()
.SessionSettings.LanguageSettings;
settings.ShowApiLevel = global::ICSharpCode.ILSpyX.ApiVisibility.PublicOnly;
((int)getter.Filter(settings)).Should().Be((int)global::ICSharpCode.ILSpy.TreeNodes.FilterResult.Hidden,
settings.ShowApiLevel = ICSharpCode.ILSpyX.ApiVisibility.PublicOnly;
((int)getter.Filter(settings)).Should().Be((int)ICSharpCode.ILSpy.TreeNodes.FilterResult.Hidden,
"property accessors must be hidden by default — only ShowAll surfaces them");
settings.ShowApiLevel = global::ICSharpCode.ILSpyX.ApiVisibility.All;
((int)getter.Filter(settings)).Should().NotBe((int)global::ICSharpCode.ILSpy.TreeNodes.FilterResult.Hidden,
settings.ShowApiLevel = ICSharpCode.ILSpyX.ApiVisibility.All;
((int)getter.Filter(settings)).Should().NotBe((int)ICSharpCode.ILSpy.TreeNodes.FilterResult.Hidden,
"flipping to ShowAll must let accessors through");
}
@ -1678,7 +1678,7 @@ public class AssemblyTreeTests @@ -1678,7 +1678,7 @@ public class AssemblyTreeTests
var (window, vm) = await TestHarness.BootAsync(3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.UpdateLayout();
var topLevelCount = vm.AssemblyTreeModel.Root!.Children.Count;
@ -1725,7 +1725,7 @@ public class AssemblyTreeTests @@ -1725,7 +1725,7 @@ public class AssemblyTreeTests
var (window, vm) = await TestHarness.BootAsync(3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
grid.UpdateLayout();
var topLevelCount = vm.AssemblyTreeModel.Root!.Children.Count;
@ -1739,7 +1739,7 @@ public class AssemblyTreeTests @@ -1739,7 +1739,7 @@ public class AssemblyTreeTests
TestCapture.Step("all-rows-selected");
// Act — plain left-click on the second visible row.
var targetRow = grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
var targetRow = grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.OrderBy(r => r.TranslatePoint(new Point(0, 0), grid)?.Y ?? double.MaxValue)
.Skip(1).First();
var targetNode = targetRow.DataContext as SharpTreeNode;

2
ILSpy.Tests/AssemblyList/UseNestedNamespaceNodesGridVerification.cs

@ -52,7 +52,7 @@ public class UseNestedNamespaceNodesGridVerification @@ -52,7 +52,7 @@ public class UseNestedNamespaceNodesGridVerification
var (window, vm) = await TestHarness.BootAsync(3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
// Expand an assembly so its namespace children become visible rows.
var assemblyNode = vm.AssemblyTreeModel.FindNode<AssemblyTreeNode>("System.Linq");

8
ILSpy.Tests/Compare/CompareContextMenuTests.cs

@ -53,7 +53,7 @@ public class CompareContextMenuTests @@ -53,7 +53,7 @@ public class CompareContextMenuTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 2);
var entry = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
var entry = AppComposition.Current.GetExport<ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
.Entries.Single(e => e.Metadata.Header == "Compare...").Value;
var assemblies = vm.AssemblyTreeModel.AssemblyList!.GetAssemblies()
.Where(a => a.IsLoadedAsValidAssembly).Take(2).ToList();
@ -73,7 +73,7 @@ public class CompareContextMenuTests @@ -73,7 +73,7 @@ public class CompareContextMenuTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 1);
var entry = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
var entry = AppComposition.Current.GetExport<ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
.Entries.Single(e => e.Metadata.Header == "Compare...").Value;
var coreLibName = typeof(object).Assembly.GetName().Name!;
var node = vm.AssemblyTreeModel.FindNode<AssemblyTreeNode>(coreLibName);
@ -91,9 +91,9 @@ public class CompareContextMenuTests @@ -91,9 +91,9 @@ public class CompareContextMenuTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 2);
var entry = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
var entry = AppComposition.Current.GetExport<ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
.Entries.Single(e => e.Metadata.Header == "Compare...").Value;
var dockWorkspace = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>();
var dockWorkspace = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>();
var assemblies = vm.AssemblyTreeModel.AssemblyList!.GetAssemblies()
.Where(a => a.IsLoadedAsValidAssembly).Take(2).ToList();
var nodes = assemblies.Select(a =>

4
ILSpy.Tests/Compare/CompareViewRenderTests.cs

@ -56,7 +56,7 @@ public class CompareViewRenderTests @@ -56,7 +56,7 @@ public class CompareViewRenderTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 2);
var entry = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
var entry = AppComposition.Current.GetExport<ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
.Entries.Single(e => e.Metadata.Header == "Compare...").Value;
var assemblies = new[] {
await vm.OpenFixtureAsync("FixtureA"),
@ -84,7 +84,7 @@ public class CompareViewRenderTests @@ -84,7 +84,7 @@ public class CompareViewRenderTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 2);
var entry = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
var entry = AppComposition.Current.GetExport<ICSharpCode.ILSpy.ContextMenuEntryRegistry>()
.Entries.Single(e => e.Metadata.Header == "Compare...").Value;
var assemblies = new[] {
await vm.OpenFixtureAsync("FixtureA"),

38
ILSpy.Tests/ContextMenus/DecompileInNewViewTests.cs

@ -172,7 +172,7 @@ public class DecompileInNewViewTests @@ -172,7 +172,7 @@ public class DecompileInNewViewTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var nodeA = vm.AssemblyTreeModel.FindNode<AssemblyTreeNode>("System.Linq");
var nodeB = vm.AssemblyTreeModel.FindNode<AssemblyTreeNode>(TreeNavigation.CoreLibName);
@ -188,7 +188,7 @@ public class DecompileInNewViewTests @@ -188,7 +188,7 @@ public class DecompileInNewViewTests
await Task.Delay(25);
}
var rowB = grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
var rowB = grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.FirstOrDefault(r => RowNodeEquals(r, nodeB));
rowB.Should().NotBeNull("the top-level CoreLib row must be realised");
@ -230,7 +230,7 @@ public class DecompileInNewViewTests @@ -230,7 +230,7 @@ public class DecompileInNewViewTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var assemblies = vm.AssemblyTreeModel.Root!.Children.OfType<AssemblyTreeNode>().Take(3).ToArray();
assemblies.Length.Should().BeGreaterThanOrEqualTo(3, "need three top-level rows to click");
@ -246,8 +246,8 @@ public class DecompileInNewViewTests @@ -246,8 +246,8 @@ public class DecompileInNewViewTests
await Task.Delay(25);
}
global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem Row(SharpTreeNode node) => grid.GetVisualDescendants()
.OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem Row(SharpTreeNode node) => grid.GetVisualDescendants()
.OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.First(r => RowNodeEquals(r, node));
async Task RightClick(SharpTreeNode node)
@ -296,7 +296,7 @@ public class DecompileInNewViewTests @@ -296,7 +296,7 @@ public class DecompileInNewViewTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var nodeA = vm.AssemblyTreeModel.FindNode<AssemblyTreeNode>("System.Linq");
var nodeB = vm.AssemblyTreeModel.FindNode<AssemblyTreeNode>(TreeNavigation.CoreLibName);
@ -308,7 +308,7 @@ public class DecompileInNewViewTests @@ -308,7 +308,7 @@ public class DecompileInNewViewTests
await Task.Delay(25);
}
var rowB = grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
var rowB = grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.First(r => RowNodeEquals(r, nodeB));
int tabsBefore = vm.DockWorkspace.Documents!.VisibleDockables!.OfType<ContentTabPage>().Count();
@ -342,7 +342,7 @@ public class DecompileInNewViewTests @@ -342,7 +342,7 @@ public class DecompileInNewViewTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var nodeA = vm.AssemblyTreeModel.FindNode<AssemblyTreeNode>("System.Linq");
var nodeB = vm.AssemblyTreeModel.FindNode<AssemblyTreeNode>(TreeNavigation.CoreLibName);
@ -388,7 +388,7 @@ public class DecompileInNewViewTests @@ -388,7 +388,7 @@ public class DecompileInNewViewTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var assemblies = vm.AssemblyTreeModel.Root!.Children.OfType<AssemblyTreeNode>().Take(3).ToArray();
assemblies.Length.Should().BeGreaterThanOrEqualTo(3, "need three top-level rows");
@ -441,7 +441,7 @@ public class DecompileInNewViewTests @@ -441,7 +441,7 @@ public class DecompileInNewViewTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 3);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var documents = ((ILSpyDockFactory)vm.DockWorkspace.Factory).Documents!;
var assemblies = vm.AssemblyTreeModel.Root!.Children.OfType<AssemblyTreeNode>().Take(3).ToArray();
@ -498,9 +498,9 @@ public class DecompileInNewViewTests @@ -498,9 +498,9 @@ public class DecompileInNewViewTests
var registry = AppComposition.Current.GetExport<ContextMenuEntryRegistry>();
var tableNode = vm.AssemblyTreeModel.FindCoreLib()
.GetChild<global::ICSharpCode.ILSpy.Metadata.MetadataTreeNode>()
.GetChild<global::ICSharpCode.ILSpy.Metadata.MetadataTablesTreeNode>()
.GetChild<global::ICSharpCode.ILSpy.Metadata.CorTables.TypeDefTableTreeNode>();
.GetChild<ICSharpCode.ILSpy.Metadata.MetadataTreeNode>()
.GetChild<ICSharpCode.ILSpy.Metadata.MetadataTablesTreeNode>()
.GetChild<ICSharpCode.ILSpy.Metadata.CorTables.TypeDefTableTreeNode>();
var documents = ((ILSpyDockFactory)vm.DockWorkspace.Factory).Documents!;
int before = documents.VisibleDockables?.OfType<ContentTabPage>().Count() ?? 0;
@ -511,23 +511,23 @@ public class DecompileInNewViewTests @@ -511,23 +511,23 @@ public class DecompileInNewViewTests
await Waiters.WaitForAsync(
() => documents.VisibleDockables!.OfType<ContentTabPage>()
.Any(t => t.Content is global::ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel));
.Any(t => t.Content is ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel));
documents.VisibleDockables!.OfType<ContentTabPage>().Count()
.Should().BeGreaterThan(before, "a new tab must open");
var newTab = documents.VisibleDockables!.OfType<ContentTabPage>()
.First(t => t.Content is global::ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel);
newTab.Content.Should().BeOfType<global::ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel>(
.First(t => t.Content is ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel);
newTab.Content.Should().BeOfType<ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel>(
"the metadata-table node must open its grid page, not a decompiler tab");
}
static bool RowNodeEquals(global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem row, SharpTreeNode node)
static bool RowNodeEquals(ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem row, SharpTreeNode node)
=> ReferenceEquals(row.DataContext, node);
static SharpTreeNode? GridSelectedNode(global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView grid)
static SharpTreeNode? GridSelectedNode(ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView grid)
=> grid.SelectedItem as SharpTreeNode;
static System.Collections.Generic.List<SharpTreeNode> GridSelectedNodes(global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView grid)
static System.Collections.Generic.List<SharpTreeNode> GridSelectedNodes(ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView grid)
=> grid.SelectedItems!.Cast<object?>()
.OfType<SharpTreeNode>()
.ToList();

4
ILSpy.Tests/ContextMenus/KeyboardContextMenuFocusTests.cs

@ -56,7 +56,7 @@ public class KeyboardContextMenuFocusTests @@ -56,7 +56,7 @@ public class KeyboardContextMenuFocusTests
var vm = (MainWindowViewModel)window.DataContext!;
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 1);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var node = vm.AssemblyTreeModel.Root!.Children.OfType<AssemblyTreeNode>().First();
vm.AssemblyTreeModel.SelectNode(node);
@ -68,7 +68,7 @@ public class KeyboardContextMenuFocusTests @@ -68,7 +68,7 @@ public class KeyboardContextMenuFocusTests
}
var row = grid.GetVisualDescendants()
.OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>().First();
.OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>().First();
row.Focus(NavigationMethod.Tab);
Dispatcher.UIThread.RunJobs();

16
ILSpy.Tests/Diagnostics/GraphVizGraphTests.cs

@ -38,7 +38,7 @@ public class GraphVizGraphTests @@ -38,7 +38,7 @@ public class GraphVizGraphTests
{
// Every GraphVizGraph must start with `digraph G {` + the default `node [fontsize=16];`
// preamble. That preamble is what makes the generated DOT readable when dot renders it.
var g = new global::ICSharpCode.ILSpy.Util.GraphVizGraph();
var g = new ICSharpCode.ILSpy.Util.GraphVizGraph();
var sw = new StringWriter();
g.Save(sw);
var dot = sw.ToString();
@ -52,8 +52,8 @@ public class GraphVizGraphTests @@ -52,8 +52,8 @@ public class GraphVizGraphTests
{
// A node emits as `<id> [label="...", shape=...]` — the box shape is what the
// CFG viewer relies on so every basic block reads as a rectangle.
var g = new global::ICSharpCode.ILSpy.Util.GraphVizGraph();
g.AddNode(new global::ICSharpCode.ILSpy.Util.GraphVizNode(42) { label = "BB.42", shape = "box" });
var g = new ICSharpCode.ILSpy.Util.GraphVizGraph();
g.AddNode(new ICSharpCode.ILSpy.Util.GraphVizNode(42) { label = "BB.42", shape = "box" });
var sw = new StringWriter();
g.Save(sw);
var dot = sw.ToString();
@ -67,9 +67,9 @@ public class GraphVizGraphTests @@ -67,9 +67,9 @@ public class GraphVizGraphTests
{
// Successor edges have no color (rendered as black); dominator edges use green
// — that's how the CFG viewer distinguishes the two relationship overlays.
var g = new global::ICSharpCode.ILSpy.Util.GraphVizGraph();
g.AddEdge(new global::ICSharpCode.ILSpy.Util.GraphVizEdge(1, 2));
g.AddEdge(new global::ICSharpCode.ILSpy.Util.GraphVizEdge(1, 2) { color = "green" });
var g = new ICSharpCode.ILSpy.Util.GraphVizGraph();
g.AddEdge(new ICSharpCode.ILSpy.Util.GraphVizEdge(1, 2));
g.AddEdge(new ICSharpCode.ILSpy.Util.GraphVizEdge(1, 2) { color = "green" });
var sw = new StringWriter();
g.Save(sw);
var dot = sw.ToString();
@ -82,8 +82,8 @@ public class GraphVizGraphTests @@ -82,8 +82,8 @@ public class GraphVizGraphTests
{
// A literal `"` inside a label would otherwise terminate the DOT string token
// early. The escaper turns it into `\"` so dot parses the whole label as one token.
var g = new global::ICSharpCode.ILSpy.Util.GraphVizGraph();
g.AddNode(new global::ICSharpCode.ILSpy.Util.GraphVizNode(0) { label = "a \"quoted\" label" });
var g = new ICSharpCode.ILSpy.Util.GraphVizGraph();
g.AddNode(new ICSharpCode.ILSpy.Util.GraphVizNode(0) { label = "a \"quoted\" label" });
var sw = new StringWriter();
g.Save(sw);
sw.ToString().Should().Contain("\"a \\\"quoted\\\" label\"");

2
ILSpy.Tests/Diagnostics/StartupPerfTests.cs

@ -125,7 +125,7 @@ public class StartupPerfTests @@ -125,7 +125,7 @@ public class StartupPerfTests
// (proxy for "tree is interactive").
var pane = await window.WaitForComponent<AssemblyListPane>();
var swGrid = Stopwatch.StartNew();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
swGrid.Stop();
TestContext.Out.WriteLine($"SharpTreeView descendant available: {swGrid.ElapsedMilliseconds} ms");

8
ILSpy.Tests/Docking/ContentPageHierarchyTests.cs

@ -36,10 +36,10 @@ public class ContentPageHierarchyTests @@ -36,10 +36,10 @@ public class ContentPageHierarchyTests
[Test]
public void All_Four_Content_Types_Derive_From_ContentPageModel()
{
typeof(global::ICSharpCode.ILSpy.TextView.DecompilerTabPageModel).Should().BeAssignableTo<ContentPageModel>();
typeof(ICSharpCode.ILSpy.TextView.DecompilerTabPageModel).Should().BeAssignableTo<ContentPageModel>();
typeof(MetadataTablePageModel).Should().BeAssignableTo<ContentPageModel>();
typeof(global::ICSharpCode.ILSpy.Compare.CompareTabPageModel).Should().BeAssignableTo<ContentPageModel>();
typeof(global::ICSharpCode.ILSpy.Options.OptionsPageModel).Should().BeAssignableTo<ContentPageModel>(
typeof(ICSharpCode.ILSpy.Compare.CompareTabPageModel).Should().BeAssignableTo<ContentPageModel>();
typeof(ICSharpCode.ILSpy.Options.OptionsPageModel).Should().BeAssignableTo<ContentPageModel>(
"OptionsPageModel must join the content hierarchy, not stay a bare ObservableObject");
}
@ -56,7 +56,7 @@ public class ContentPageHierarchyTests @@ -56,7 +56,7 @@ public class ContentPageHierarchyTests
// One IsStaticContent, declared on the base -- not duck-typed across unrelated classes.
typeof(ContentPageModel).GetProperty(nameof(ContentPageModel.IsStaticContent))
.Should().NotBeNull("IsStaticContent lives on ContentPageModel");
typeof(global::ICSharpCode.ILSpy.Options.OptionsPageModel).GetProperty("IsStaticContent")!.DeclaringType
typeof(ICSharpCode.ILSpy.Options.OptionsPageModel).GetProperty("IsStaticContent")!.DeclaringType
.Should().Be(typeof(ContentPageModel), "OptionsPageModel must inherit IsStaticContent, not redeclare it");
}
}

4
ILSpy.Tests/Docking/DocumentTabContextMenuTests.cs

@ -63,7 +63,7 @@ public class DocumentTabContextMenuTests @@ -63,7 +63,7 @@ public class DocumentTabContextMenuTests
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 1);
var (a, _, _) = OpenThreeTabs(vm.DockWorkspace);
var menu = global::ICSharpCode.ILSpy.Themes.PreviewTabContextMenuBehavior.BuildDocumentContextMenu(a);
var menu = ICSharpCode.ILSpy.Themes.PreviewTabContextMenuBehavior.BuildDocumentContextMenu(a);
var items = menu.ItemsSource!.OfType<global::Avalonia.Controls.MenuItem>().ToList();
items.Select(m => m.Header).Should().Contain(new object[] {
@ -92,7 +92,7 @@ public class DocumentTabContextMenuTests @@ -92,7 +92,7 @@ public class DocumentTabContextMenuTests
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 1);
var (a, _, _) = OpenThreeTabs(vm.DockWorkspace);
var menu = global::ICSharpCode.ILSpy.Themes.PreviewTabContextMenuBehavior.BuildDocumentContextMenu(a);
var menu = ICSharpCode.ILSpy.Themes.PreviewTabContextMenuBehavior.BuildDocumentContextMenu(a);
var close = menu.ItemsSource!.OfType<global::Avalonia.Controls.MenuItem>()
.Single(m => Equals(m.Header, ICSharpCode.ILSpy.Properties.Resources.Close));

24
ILSpy.Tests/Docking/LayoutPersistenceTests.cs

@ -63,7 +63,7 @@ public class LayoutPersistenceTests @@ -63,7 +63,7 @@ public class LayoutPersistenceTests
var dockWorkspace = AppComposition.Current.GetExport<DockWorkspace>();
// Search is hidden by default; surface it so the round-trip covers a tool pane that
// lives in a materialised-on-demand dock, not just the assembly tree.
dockWorkspace.ShowToolPane(global::ICSharpCode.ILSpy.Search.SearchPaneModel.PaneContentId);
dockWorkspace.ShowToolPane(ICSharpCode.ILSpy.Search.SearchPaneModel.PaneContentId);
var path = Path.Combine(Path.GetTempPath(), $"ILSpy.Layout.test.{System.Guid.NewGuid():N}.json");
try
@ -90,7 +90,7 @@ public class LayoutPersistenceTests @@ -90,7 +90,7 @@ public class LayoutPersistenceTests
// non-null. Specifically: a RootDock with VisibleDockables containing the
// proportional dock tree, AND the tool panes resolved as the live singletons
// (CreateObject hook should have returned the MEF instances, not fresh ones).
var registryForRoundTrip = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var registryForRoundTrip = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var roundTrip = new ILSpyDockFactory(registryForRoundTrip).LoadLayout(path);
((object?)roundTrip).Should().NotBeNull("LoadLayout must materialise the saved root dock");
var dockables = roundTrip!.VisibleDockables;
@ -100,12 +100,12 @@ public class LayoutPersistenceTests @@ -100,12 +100,12 @@ public class LayoutPersistenceTests
// Walk every dockable in the loaded tree. Every ToolPaneModel-typed entry
// must be reference-equal to the live MEF singleton — that's what proves
// the CreateObject hook fired during deserialization, not a fresh ctor.
var liveAssemblyTree = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.AssemblyTree.AssemblyTreeModel>();
var liveSearch = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Search.SearchPaneModel>();
var liveAssemblyTree = AppComposition.Current.GetExport<ICSharpCode.ILSpy.AssemblyTree.AssemblyTreeModel>();
var liveSearch = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Search.SearchPaneModel>();
var allLoaded = Flatten(roundTrip).ToList();
allLoaded.OfType<global::ICSharpCode.ILSpy.AssemblyTree.AssemblyTreeModel>().Should().Contain(liveAssemblyTree,
allLoaded.OfType<ICSharpCode.ILSpy.AssemblyTree.AssemblyTreeModel>().Should().Contain(liveAssemblyTree,
"loaded AssemblyTreeModel must be the live MEF singleton, not a fresh instance");
allLoaded.OfType<global::ICSharpCode.ILSpy.Search.SearchPaneModel>().Should().Contain(liveSearch,
allLoaded.OfType<ICSharpCode.ILSpy.Search.SearchPaneModel>().Should().Contain(liveSearch,
"loaded SearchPaneModel must be the live MEF singleton, not a fresh instance");
}
finally
@ -138,7 +138,7 @@ public class LayoutPersistenceTests @@ -138,7 +138,7 @@ public class LayoutPersistenceTests
// Simulate the second-launch path: a NEW factory loads the saved layout
// instead of creating one. The factory MUST still expose MainTab + Documents
// so DockWorkspace can populate decompile content into them.
var registry = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var registry = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var factory = new ILSpyDockFactory(registry);
var loaded = factory.LoadLayout(path);
@ -187,8 +187,8 @@ public class LayoutPersistenceTests @@ -187,8 +187,8 @@ public class LayoutPersistenceTests
// Open two extra documents on top of the persistent MainTab. Content type is
// irrelevant for this test — the bug is structural, about ContentTabPage shells
// being persisted at all — so any ContentPageModel will do.
dockWorkspace.OpenNewTab(new global::ICSharpCode.ILSpy.TextView.DecompilerTabPageModel());
dockWorkspace.OpenNewTab(new global::ICSharpCode.ILSpy.TextView.DecompilerTabPageModel());
dockWorkspace.OpenNewTab(new ICSharpCode.ILSpy.TextView.DecompilerTabPageModel());
dockWorkspace.OpenNewTab(new ICSharpCode.ILSpy.TextView.DecompilerTabPageModel());
TestCapture.Step("three-document-tabs-open");
var sourceDocs = dockWorkspace.Documents!.VisibleDockables!
.OfType<ContentTabPage>().Count();
@ -211,7 +211,7 @@ public class LayoutPersistenceTests @@ -211,7 +211,7 @@ public class LayoutPersistenceTests
// Round-trip with a fresh factory. The loaded DocumentDock must contain exactly
// one ContentTabPage (the fresh MainTab repopulated by the load path); none of
// the extras may resurrect.
var registry = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var registry = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var factory = new ILSpyDockFactory(registry);
var loaded = factory.LoadLayout(path);
((object?)loaded).Should().NotBeNull();
@ -238,7 +238,7 @@ public class LayoutPersistenceTests @@ -238,7 +238,7 @@ public class LayoutPersistenceTests
{
// The "no saved layout yet" path on first launch. DockWorkspace falls back
// to factory.CreateLayout() when this returns null — that's the contract.
var registry = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var registry = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var factory = new ILSpyDockFactory(registry);
var nonExistent = Path.Combine(Path.GetTempPath(), $"ILSpy.Layout.missing.{System.Guid.NewGuid():N}.json");
@ -252,7 +252,7 @@ public class LayoutPersistenceTests @@ -252,7 +252,7 @@ public class LayoutPersistenceTests
{
// A corrupt sidecar (manually edited, version drift, mid-write crash) must
// not block startup. DockWorkspace silently falls back to defaults.
var registry = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var registry = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Commands.ToolPaneRegistry>();
var factory = new ILSpyDockFactory(registry);
var path = Path.Combine(Path.GetTempPath(), $"ILSpy.Layout.malformed.{System.Guid.NewGuid():N}.json");
File.WriteAllText(path, "{ this is not valid JSON");

2
ILSpy.Tests/Docking/PreviewTabPromotionTests.cs

@ -198,7 +198,7 @@ public class PreviewTabPromotionTests @@ -198,7 +198,7 @@ public class PreviewTabPromotionTests
// The One's active highlight is purple, every other document tab's is blue. The
// :selected:active Background binds to this converter on IsPreview; the (theme-unreliable)
// :active state makes a rendered assertion flaky, so verify the converter directly.
var conv = global::ICSharpCode.ILSpy.Themes.BoolToBrushConverter.PreviewOrActiveTabBackground;
var conv = ICSharpCode.ILSpy.Themes.BoolToBrushConverter.PreviewOrActiveTabBackground;
var culture = global::System.Globalization.CultureInfo.InvariantCulture;
(conv.Convert(true, typeof(global::Avalonia.Media.IBrush), null, culture)
as global::Avalonia.Media.ISolidColorBrush)!.Color

2
ILSpy.Tests/Editor/DecompilerViewTests.cs

@ -486,7 +486,7 @@ public class DecompilerViewTests @@ -486,7 +486,7 @@ public class DecompilerViewTests
// without the bridge they default false and every fold comes back collapsed.
var (_, vm) = await TestHarness.BootAsync(3);
var settings = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.SettingsService>();
var settings = AppComposition.Current.GetExport<ICSharpCode.ILSpy.SettingsService>();
settings.DisplaySettings.ExpandMemberDefinitions = true;
settings.DisplaySettings.ExpandUsingDeclarations = true;

2
ILSpy.Tests/FixtureAssembly.cs

@ -24,7 +24,7 @@ using System.Threading.Tasks; @@ -24,7 +24,7 @@ using System.Threading.Tasks;
using ICSharpCode.ILSpyX;
using global::ICSharpCode.ILSpy.ViewModels;
using ICSharpCode.ILSpy.ViewModels;
namespace ICSharpCode.ILSpy.Tests;

18
ILSpy.Tests/Input/HeadlessMmbPointerTests.cs

@ -59,13 +59,13 @@ public class HeadlessMmbPointerTests @@ -59,13 +59,13 @@ public class HeadlessMmbPointerTests
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 1);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
// Any realised SharpTreeViewItem whose DataContext is an ILSpyTreeNode is a valid click
// target — the exact node doesn't matter, only that the gesture pipeline fires.
await Waiters.WaitForAsync(() => grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
await Waiters.WaitForAsync(() => grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.Any(r => r.DataContext is ILSpyTreeNode));
var row = grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
var row = grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.First(r => r.DataContext is ILSpyTreeNode);
// Snapshot the tab count BEFORE the gesture so we can assert a strict +1 after.
@ -108,11 +108,11 @@ public class HeadlessMmbPointerTests @@ -108,11 +108,11 @@ public class HeadlessMmbPointerTests
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 1);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
await Waiters.WaitForAsync(() => grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
await Waiters.WaitForAsync(() => grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.Any(r => r.DataContext is ILSpyTreeNode));
var row = grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
var row = grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.First(r => r.DataContext is ILSpyTreeNode);
var documents = ((ILSpyDockFactory)vm.DockWorkspace.Factory).Documents!;
@ -152,14 +152,14 @@ public class HeadlessMmbPointerTests @@ -152,14 +152,14 @@ public class HeadlessMmbPointerTests
await vm.AssemblyTreeModel.WaitForAssembliesAsync(minimumCount: 1);
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
// Any realised SharpTreeViewItem whose data is an ILSpyTreeNode is a fine target; the
// non-leaf assembly node row (depth 0) is always present and never confused with a
// method row whose tree-toggle area is null.
await Waiters.WaitForAsync(() => grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
await Waiters.WaitForAsync(() => grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.Any(r => r.DataContext is ILSpyTreeNode));
var row = grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
var row = grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>()
.First(r => r.DataContext is ILSpyTreeNode);
var documents = ((ILSpyDockFactory)vm.DockWorkspace.Factory).Documents!;

2
ILSpy.Tests/Languages/CSharpBracketSearcherTests.cs

@ -38,7 +38,7 @@ public class CSharpBracketSearcherTests @@ -38,7 +38,7 @@ public class CSharpBracketSearcherTests
{
// CSharpBracketSearcher is internal; the easiest way to get an instance without
// making it public is through CSharpLanguage.BracketSearcher (its public-API path).
static IBracketSearcher Searcher() => new global::ICSharpCode.ILSpy.Languages.CSharpLanguage().BracketSearcher;
static IBracketSearcher Searcher() => new ICSharpCode.ILSpy.Languages.CSharpLanguage().BracketSearcher;
static TextDocument Doc(string text) => new(text);

2
ILSpy.Tests/Languages/ProjectExportTests.cs

@ -79,7 +79,7 @@ public class ProjectExportTests @@ -79,7 +79,7 @@ public class ProjectExportTests
Directory.CreateDirectory(tempDir);
try
{
var options = new global::ICSharpCode.ILSpy.DecompilationOptions {
var options = new ICSharpCode.ILSpy.DecompilationOptions {
FullDecompilation = true,
SaveAsProjectDirectory = tempDir,
};

6
ILSpy.Tests/Languages/SolutionExportTests.cs

@ -34,7 +34,7 @@ namespace ICSharpCode.ILSpy.Tests.Languages; @@ -34,7 +34,7 @@ namespace ICSharpCode.ILSpy.Tests.Languages;
/// <summary>
/// End-to-end smoke test of the multi-assembly solution (.sln) export path that backs the
/// "Save Code" entry when several assemblies are selected. Drives
/// <see cref="global::ICSharpCode.ILSpy.SolutionWriter.CreateSolutionAsync"/> directly (no file picker)
/// <see cref="ICSharpCode.ILSpy.SolutionWriter.CreateSolutionAsync"/> directly (no file picker)
/// and asserts a solution file plus one project per assembly is produced.
/// </summary>
[TestFixture]
@ -60,7 +60,7 @@ public class SolutionExportTests @@ -60,7 +60,7 @@ public class SolutionExportTests
var slnPath = Path.Combine(tempDir, "Solution.sln");
try
{
var result = await global::ICSharpCode.ILSpy.SolutionWriter.CreateSolutionAsync(slnPath, language, assemblies);
var result = await ICSharpCode.ILSpy.SolutionWriter.CreateSolutionAsync(slnPath, language, assemblies);
result.Success.Should().BeTrue(
"the solution export should succeed for valid assemblies. Status:\n" + result.StatusText);
@ -105,7 +105,7 @@ public class SolutionExportTests @@ -105,7 +105,7 @@ public class SolutionExportTests
{
// The same assembly twice collides on ShortName: the writer must refuse rather than
// clobber one project directory with another.
var result = await global::ICSharpCode.ILSpy.SolutionWriter.CreateSolutionAsync(
var result = await ICSharpCode.ILSpy.SolutionWriter.CreateSolutionAsync(
slnPath, language, new[] { assembly, assembly });
result.Success.Should().BeFalse("duplicate assembly names cannot produce a valid solution");

2
ILSpy.Tests/MainWindow/MainToolBarLayoutTests.cs

@ -133,7 +133,7 @@ public class MainToolBarLayoutTests @@ -133,7 +133,7 @@ public class MainToolBarLayoutTests
// Icons may be declared as either static-readonly fields (eager) or static
// properties with a lazy backing field (post-perf-pass). Look up either shape.
var bindingFlags = System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static;
var imagesType = typeof(global::ICSharpCode.ILSpy.Images);
var imagesType = typeof(ICSharpCode.ILSpy.Images);
var field = imagesType.GetField(name, bindingFlags);
var property = field is null ? imagesType.GetProperty(name, bindingFlags) : null;
(field is not null || property is not null).Should().BeTrue(

4
ILSpy.Tests/Metadata/MetadataDisablesLanguageSwitchingTests.cs

@ -53,7 +53,7 @@ public class MetadataDisablesLanguageSwitchingTests @@ -53,7 +53,7 @@ public class MetadataDisablesLanguageSwitchingTests
{
// Decompiler tabs ARE the place where Language / Language-Version matter. The
// default-true is what enables the toolbar pickers on a fresh decompile tab.
var model = new global::ICSharpCode.ILSpy.TextView.DecompilerTabPageModel();
var model = new ICSharpCode.ILSpy.TextView.DecompilerTabPageModel();
model.SupportsLanguageSwitching.Should().BeTrue();
}
@ -72,7 +72,7 @@ public class MetadataDisablesLanguageSwitchingTests @@ -72,7 +72,7 @@ public class MetadataDisablesLanguageSwitchingTests
tab.SupportsLanguageSwitching.Should().BeFalse(
"swapping in a MetadataTablePageModel must propagate its false flag up to the wrapper");
var dec = new global::ICSharpCode.ILSpy.TextView.DecompilerTabPageModel();
var dec = new ICSharpCode.ILSpy.TextView.DecompilerTabPageModel();
tab.Content = dec;
tab.SupportsLanguageSwitching.Should().BeTrue(
"swapping back to a decompiler tab must restore the true flag");

14
ILSpy.Tests/Metadata/MetadataFilterTests.cs

@ -168,8 +168,8 @@ public class MetadataFilterTests @@ -168,8 +168,8 @@ public class MetadataFilterTests
public SampleFlags Attributes { get; set; }
}
static global::ICSharpCode.ILSpy.Metadata.Filters.FilterState NewFlagsState() =>
new(global::ICSharpCode.ILSpy.Metadata.Filters.FlagsSchemaInferer.For(typeof(SampleFlags)));
static ICSharpCode.ILSpy.Metadata.Filters.FilterState NewFlagsState() =>
new(ICSharpCode.ILSpy.Metadata.Filters.FlagsSchemaInferer.For(typeof(SampleFlags)));
[Test]
public void Empty_FlagsState_Matches_Every_Row()
@ -187,7 +187,7 @@ public class MetadataFilterTests @@ -187,7 +187,7 @@ public class MetadataFilterTests
public void Required_Independent_Flag_Narrows_To_Rows_With_That_Bit_Set()
{
var state = NewFlagsState();
state.SetFlagState(nameof(SampleFlags.Public), global::ICSharpCode.ILSpy.Metadata.Filters.TriState.Required);
state.SetFlagState(nameof(SampleFlags.Public), ICSharpCode.ILSpy.Metadata.Filters.TriState.Required);
MetadataTablePageModel.MatchesFilters(
new FlagsEntry { Attributes = SampleFlags.Public | SampleFlags.Static },
new[] { new ColumnFilter("Attributes") { FlagsState = state } }).Should().BeTrue();
@ -202,8 +202,8 @@ public class MetadataFilterTests @@ -202,8 +202,8 @@ public class MetadataFilterTests
// Without an explicit mode the schema starts in MatchMode.All — every required
// flag must be set. Public | Static row passes; Public alone doesn't.
var state = NewFlagsState();
state.SetFlagState(nameof(SampleFlags.Public), global::ICSharpCode.ILSpy.Metadata.Filters.TriState.Required);
state.SetFlagState(nameof(SampleFlags.Static), global::ICSharpCode.ILSpy.Metadata.Filters.TriState.Required);
state.SetFlagState(nameof(SampleFlags.Public), ICSharpCode.ILSpy.Metadata.Filters.TriState.Required);
state.SetFlagState(nameof(SampleFlags.Static), ICSharpCode.ILSpy.Metadata.Filters.TriState.Required);
MetadataTablePageModel.MatchesFilters(
new FlagsEntry { Attributes = SampleFlags.Public | SampleFlags.Static },
new[] { new ColumnFilter("Attributes") { FlagsState = state } }).Should().BeTrue();
@ -216,7 +216,7 @@ public class MetadataFilterTests @@ -216,7 +216,7 @@ public class MetadataFilterTests
public void Excluded_Flag_Hides_Rows_With_That_Bit_Set()
{
var state = NewFlagsState();
state.SetFlagState(nameof(SampleFlags.Static), global::ICSharpCode.ILSpy.Metadata.Filters.TriState.Excluded);
state.SetFlagState(nameof(SampleFlags.Static), ICSharpCode.ILSpy.Metadata.Filters.TriState.Excluded);
MetadataTablePageModel.MatchesFilters(
new FlagsEntry { Attributes = SampleFlags.Public },
new[] { new ColumnFilter("Attributes") { FlagsState = state } }).Should().BeTrue();
@ -229,7 +229,7 @@ public class MetadataFilterTests @@ -229,7 +229,7 @@ public class MetadataFilterTests
public void FlagsState_And_Text_Filter_AND_Together_On_The_Same_Column()
{
var state = NewFlagsState();
state.SetFlagState(nameof(SampleFlags.Public), global::ICSharpCode.ILSpy.Metadata.Filters.TriState.Required);
state.SetFlagState(nameof(SampleFlags.Public), ICSharpCode.ILSpy.Metadata.Filters.TriState.Required);
MetadataTablePageModel.MatchesFilters(
new FlagsEntry { Attributes = SampleFlags.Public | SampleFlags.Static },
new[] { new ColumnFilter("Attributes") { FlagsState = state, Text = "Static" } }).Should().BeTrue();

26
ILSpy.Tests/Metadata/MetadataNodeIconParityTests.cs

@ -51,39 +51,39 @@ public class MetadataNodeIconParityTests @@ -51,39 +51,39 @@ public class MetadataNodeIconParityTests
var children = metadataNode.Children;
// Assert — root + PE header nodes.
metadataNode.Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.Metadata, "the Metadata root uses the Metadata glyph");
children.OfType<DosHeaderTreeNode>().Single().Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.Header);
children.OfType<CoffHeaderTreeNode>().Single().Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.Header);
children.OfType<OptionalHeaderTreeNode>().Single().Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.Header);
metadataNode.Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.Metadata, "the Metadata root uses the Metadata glyph");
children.OfType<DosHeaderTreeNode>().Single().Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.Header);
children.OfType<CoffHeaderTreeNode>().Single().Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.Header);
children.OfType<OptionalHeaderTreeNode>().Single().Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.Header);
// Assert — the directory-container nodes use the list-folder glyphs (closed + open on
// expand), as WPF shipped. These are the folder-with-list-lines glyph, distinct from the
// generic empty folder; the port had collapsed them onto the plain folder icon.
var dataDirs = children.OfType<DataDirectoriesTreeNode>().Single();
dataDirs.Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.ListFolder);
dataDirs.ExpandedIcon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.ListFolderOpen);
dataDirs.Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.ListFolder);
dataDirs.ExpandedIcon.Should().BeSameAs(ICSharpCode.ILSpy.Images.ListFolderOpen);
var debugDir = children.OfType<DebugDirectoryTreeNode>().Single();
debugDir.Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.ListFolder);
debugDir.ExpandedIcon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.ListFolderOpen);
debugDir.Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.ListFolder);
debugDir.ExpandedIcon.Should().BeSameAs(ICSharpCode.ILSpy.Images.ListFolderOpen);
// Assert — "Tables" uses the table-group glyph, distinct from a single table.
var tables = children.OfType<MetadataTablesTreeNode>().Single();
tables.Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.MetadataTableGroup);
tables.Icon.Should().NotBeSameAs(global::ICSharpCode.ILSpy.Images.MetadataTable);
tables.Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.MetadataTableGroup);
tables.Icon.Should().NotBeSameAs(ICSharpCode.ILSpy.Images.MetadataTable);
// Assert — every heap node (String/UserString/Guid/Blob) uses the Heap glyph.
var heaps = children.OfType<MetadataHeapTreeNode>().ToList();
heaps.Should().NotBeEmpty("CoreLib exposes the String/UserString/Guid/Blob heaps");
heaps.Should().OnlyContain(h => ReferenceEquals(h.Icon, global::ICSharpCode.ILSpy.Images.Heap));
heaps.Should().OnlyContain(h => ReferenceEquals(h.Icon, ICSharpCode.ILSpy.Images.Heap));
// Assert — the individual table nodes still use the single-table glyph (base unchanged).
tables.EnsureLazyChildren();
var aTable = tables.Children.OfType<MetadataTableTreeNode>().First();
aTable.Icon.Should().BeSameAs(global::ICSharpCode.ILSpy.Images.MetadataTable);
aTable.Icon.Should().BeSameAs(ICSharpCode.ILSpy.Images.MetadataTable);
// Assert — the newly ported assets actually load (LoadSvg yields a usable image, not null).
foreach (var img in new IImage[] { global::ICSharpCode.ILSpy.Images.Metadata, global::ICSharpCode.ILSpy.Images.Header, global::ICSharpCode.ILSpy.Images.Heap, global::ICSharpCode.ILSpy.Images.MetadataTableGroup, global::ICSharpCode.ILSpy.Images.ListFolder, global::ICSharpCode.ILSpy.Images.ListFolderOpen })
foreach (var img in new IImage[] { ICSharpCode.ILSpy.Images.Metadata, ICSharpCode.ILSpy.Images.Header, ICSharpCode.ILSpy.Images.Heap, ICSharpCode.ILSpy.Images.MetadataTableGroup, ICSharpCode.ILSpy.Images.ListFolder, ICSharpCode.ILSpy.Images.ListFolderOpen })
{
((object?)img).Should().NotBeNull();
img.Size.Width.Should().BeGreaterThan(0, "a ported SVG must decode to a non-zero-size image");

2
ILSpy.Tests/Metadata/MetadataProtocolHandlerDrillDownTests.cs

@ -135,7 +135,7 @@ public class MetadataProtocolHandlerDrillDownTests @@ -135,7 +135,7 @@ public class MetadataProtocolHandlerDrillDownTests
// The handler is exported as IProtocolHandler, not as itself — fish out the
// MetadataProtocolHandler concrete impl from the contract list.
var handler = AppComposition.Current
.GetExports<global::ICSharpCode.ILSpy.Commands.IProtocolHandler>()
.GetExports<ICSharpCode.ILSpy.Commands.IProtocolHandler>()
.OfType<MetadataProtocolHandler>()
.Single();
return (handler, module, metadataNode);

4
ILSpy.Tests/Metadata/MetadataRowActivationTests.cs

@ -66,10 +66,10 @@ public class MetadataRowActivationTests @@ -66,10 +66,10 @@ public class MetadataRowActivationTests
await Waiters.WaitForAsync(
() => vm.AssemblyTreeModel.SelectedItem is TypeTreeNode tn
&& tn.Member is global::ICSharpCode.Decompiler.TypeSystem.ITypeDefinition td
&& tn.Member is ICSharpCode.Decompiler.TypeSystem.ITypeDefinition td
&& td.FullName == "System.Object");
(((TypeTreeNode)vm.AssemblyTreeModel.SelectedItem!).Member
as global::ICSharpCode.Decompiler.TypeSystem.ITypeDefinition)!
as ICSharpCode.Decompiler.TypeSystem.ITypeDefinition)!
.FullName.Should().Be("System.Object");
}

2
ILSpy.Tests/Metadata/MetadataTabSessionRestoreTests.cs

@ -88,7 +88,7 @@ public class MetadataTabSessionRestoreTests @@ -88,7 +88,7 @@ public class MetadataTabSessionRestoreTests
.GetChild<DebugDirectoryTreeNode>()
.GetChild<MetadataTreeNode>()
.GetChild<MetadataTablesTreeNode>()
.GetChild<global::ICSharpCode.ILSpy.Metadata.DebugTables.DocumentTableTreeNode>();
.GetChild<ICSharpCode.ILSpy.Metadata.DebugTables.DocumentTableTreeNode>();
vm.AssemblyTreeModel.SelectNode(documentTable);
TestCapture.Step("selected-document-table");

2
ILSpy.Tests/Metadata/MetadataTokenNavigationTests.cs

@ -73,7 +73,7 @@ public class MetadataTokenNavigationTests @@ -73,7 +73,7 @@ public class MetadataTokenNavigationTests
// ApplyScrollTarget, which clears ScrollToRow synchronously after handling — so
// we don't observe the row index here, just that the selection is the right table
// and a fresh metadata page is showing.
var factory = (global::ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory;
var factory = (ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory;
var landed = (MetadataTablePageModel)factory.MainTab!.Content!;
landed.Title.Should().Contain(expectedTableIndex.ToString()); // title leads with the kind byte
landed.Items.Should().HaveCountGreaterThan((int)(expectedRowNumber - 1),

20
ILSpy.Tests/Metadata/PEHeaderTreeTests.cs

@ -123,8 +123,8 @@ public class PEHeaderTreeTests @@ -123,8 +123,8 @@ public class PEHeaderTreeTests
TestCapture.Step("decompiler-tab-restored");
decompilerTab.Should().NotBeNull();
var mainTab = ((global::ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory).MainTab!;
mainTab.Content.Should().BeOfType<global::ICSharpCode.ILSpy.TextView.DecompilerTabPageModel>();
var mainTab = ((ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory).MainTab!;
mainTab.Content.Should().BeOfType<ICSharpCode.ILSpy.TextView.DecompilerTabPageModel>();
}
[AvaloniaTest]
@ -150,8 +150,8 @@ public class PEHeaderTreeTests @@ -150,8 +150,8 @@ public class PEHeaderTreeTests
await vm.DockWorkspace.WaitForDecompiledTextAsync();
TestCapture.Step("decompiler-tab");
var mainTab = ((global::ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory).MainTab!;
mainTab.Content.Should().BeOfType<global::ICSharpCode.ILSpy.TextView.DecompilerTabPageModel>();
var mainTab = ((ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory).MainTab!;
mainTab.Content.Should().BeOfType<ICSharpCode.ILSpy.TextView.DecompilerTabPageModel>();
}
[AvaloniaTest]
@ -170,7 +170,7 @@ public class PEHeaderTreeTests @@ -170,7 +170,7 @@ public class PEHeaderTreeTests
var metadataNode = assemblyNode.GetChild<MetadataTreeNode>();
var dosNode = metadataNode.GetChild<DosHeaderTreeNode>();
var coffNode = metadataNode.GetChild<CoffHeaderTreeNode>();
var factoryFactory = (global::ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory;
var factoryFactory = (ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory;
var documents = factoryFactory.Documents!;
var mainTab = factoryFactory.MainTab!;
@ -178,24 +178,24 @@ public class PEHeaderTreeTests @@ -178,24 +178,24 @@ public class PEHeaderTreeTests
await vm.DockWorkspace.WaitForMetadataTabAsync();
TestCapture.Step("dos-header-grid");
documents.VisibleDockables!.Should().HaveCount(1).And.Contain(mainTab);
mainTab.Content.Should().BeOfType<global::ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel>();
mainTab.Content.Should().BeOfType<ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel>();
vm.AssemblyTreeModel.SelectNode(assemblyNode);
await vm.DockWorkspace.WaitForDecompiledTextAsync();
TestCapture.Step("decompiler-tab");
documents.VisibleDockables!.Should().HaveCount(1).And.Contain(mainTab);
mainTab.Content.Should().BeOfType<global::ICSharpCode.ILSpy.TextView.DecompilerTabPageModel>();
mainTab.Content.Should().BeOfType<ICSharpCode.ILSpy.TextView.DecompilerTabPageModel>();
vm.AssemblyTreeModel.SelectNode(coffNode);
await vm.DockWorkspace.WaitForMetadataTabAsync();
TestCapture.Step("coff-header-grid");
documents.VisibleDockables!.Should().HaveCount(1).And.Contain(mainTab);
mainTab.Content.Should().BeOfType<global::ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel>();
mainTab.Content.Should().BeOfType<ICSharpCode.ILSpy.ViewModels.MetadataTablePageModel>();
vm.AssemblyTreeModel.SelectNode(assemblyNode);
await vm.DockWorkspace.WaitForDecompiledTextAsync();
documents.VisibleDockables!.Should().HaveCount(1).And.Contain(mainTab);
mainTab.Content.Should().BeOfType<global::ICSharpCode.ILSpy.TextView.DecompilerTabPageModel>();
mainTab.Content.Should().BeOfType<ICSharpCode.ILSpy.TextView.DecompilerTabPageModel>();
}
[AvaloniaTest]
@ -230,7 +230,7 @@ public class PEHeaderTreeTests @@ -230,7 +230,7 @@ public class PEHeaderTreeTests
thirdTab.Should().BeSameAs(firstTab);
thirdTab.Title.Should().Be("DOS Header");
var mainTab = ((global::ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory).MainTab!;
var mainTab = ((ICSharpCode.ILSpy.Docking.ILSpyDockFactory)vm.DockWorkspace.Factory).MainTab!;
mainTab.Content.Should().BeSameAs(firstTab, "the inner metadata viewmodel is reused in place");
}

4
ILSpy.Tests/Navigation/NavigationTests.cs

@ -139,8 +139,8 @@ public class NavigationTests @@ -139,8 +139,8 @@ public class NavigationTests
((string)items[1].Header!).Should().Be((string)methodA.NavigationText);
((string)items[0].Header!).Should().Contain("Enumerable",
"NavigationText must include the declaring type");
items[1].CommandParameter.Should().BeOfType<global::ICSharpCode.ILSpy.Navigation.TreeNodeEntry>();
var entry = (global::ICSharpCode.ILSpy.Navigation.TreeNodeEntry)items[1].CommandParameter!;
items[1].CommandParameter.Should().BeOfType<ICSharpCode.ILSpy.Navigation.TreeNodeEntry>();
var entry = (ICSharpCode.ILSpy.Navigation.TreeNodeEntry)items[1].CommandParameter!;
ReferenceEquals(entry.Node, methodA).Should().BeTrue();
// Act 3 — multi-step jump: clicking methodA pops two entries off the back stack in one go.

2
ILSpy.Tests/Options/ApiVisibilityFilterTests.cs

@ -233,7 +233,7 @@ public class ApiVisibilityFilterTests @@ -233,7 +233,7 @@ public class ApiVisibilityFilterTests
await Waiters.WaitForAsync(() => window.GetVisualDescendants().OfType<AssemblyListPane>().Any());
var pane = await window.WaitForComponent<AssemblyListPane>();
var grid = await pane.WaitForComponent<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
var grid = await pane.WaitForComponent<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>();
// Selecting each node scrolls it into view; that's how the row's TextBlock realises.
vm.AssemblyTreeModel.SelectNode(publicMethod);

8
ILSpy.Tests/Options/OptionsTabTests.cs

@ -216,7 +216,7 @@ public class OptionsTabTests @@ -216,7 +216,7 @@ public class OptionsTabTests
// Flip UsingDeclarations through the panel viewmodel.
var usingDecl = decompilerPage.Settings
.SelectMany(g => g.Settings)
.First(s => s.Property.Name == nameof(global::ICSharpCode.Decompiler.DecompilerSettings.UsingDeclarations));
.First(s => s.Property.Name == nameof(ICSharpCode.Decompiler.DecompilerSettings.UsingDeclarations));
usingDecl.IsEnabled = !liveBefore;
TestCapture.Step("using-declarations-toggled");
@ -248,8 +248,8 @@ public class OptionsTabTests @@ -248,8 +248,8 @@ public class OptionsTabTests
// Flip a known-default-true setting to false.
var item = decompilerPage.Settings
.SelectMany(g => g.Settings)
.First(s => s.Property.Name == nameof(global::ICSharpCode.Decompiler.DecompilerSettings.UsingDeclarations));
var defaultValue = (bool)item.Property.GetValue(new global::ICSharpCode.Decompiler.DecompilerSettings())!;
.First(s => s.Property.Name == nameof(ICSharpCode.Decompiler.DecompilerSettings.UsingDeclarations));
var defaultValue = (bool)item.Property.GetValue(new ICSharpCode.Decompiler.DecompilerSettings())!;
item.IsEnabled = !defaultValue;
// Sanity: precondition flip took effect.
item.IsEnabled.Should().Be(!defaultValue);
@ -261,7 +261,7 @@ public class OptionsTabTests @@ -261,7 +261,7 @@ public class OptionsTabTests
// After reset, the reflection-rebuilt item list has the snapshot's defaults.
var refreshedItem = decompilerPage.Settings
.SelectMany(g => g.Settings)
.First(s => s.Property.Name == nameof(global::ICSharpCode.Decompiler.DecompilerSettings.UsingDeclarations));
.First(s => s.Property.Name == nameof(ICSharpCode.Decompiler.DecompilerSettings.UsingDeclarations));
// Reset must restore the panel's settings to `new DecompilerSettings()` defaults.
refreshedItem.IsEnabled.Should().Be(defaultValue);
}

2
ILSpy.Tests/ResetAppStateAttribute.cs

@ -114,7 +114,7 @@ public sealed class ResetAppStateAttribute : Attribute, ITestAction @@ -114,7 +114,7 @@ public sealed class ResetAppStateAttribute : Attribute, ITestAction
Task quiesce;
try
{
quiesce = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>().CancelPendingOperationsAsync();
quiesce = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>().CancelPendingOperationsAsync();
}
catch
{

2
ILSpy.Tests/Resources/ResourceFactoryTests.cs

@ -173,7 +173,7 @@ public class ResourceFactoryTests @@ -173,7 +173,7 @@ public class ResourceFactoryTests
// up display name with the matching glob pattern correctly.
// Arrange + Act — feed a two-format filter string through the parser.
var types = global::ICSharpCode.ILSpy.Commands.FilePickers.ParseFilter(
var types = ICSharpCode.ILSpy.Commands.FilePickers.ParseFilter(
"Resources file (*.resources)|*.resources|Resource XML (*.resx)|*.resx");
// Assert — two file types come back, each with the right display name and pattern.

2
ILSpy.Tests/Search/SearchInputFocusTests.cs

@ -66,7 +66,7 @@ public class SearchInputFocusTests @@ -66,7 +66,7 @@ public class SearchInputFocusTests
var dockWorkspace = AppComposition.Current.GetExport<DockWorkspace>();
// Search is hidden by default; surface it so its view realises.
dockWorkspace.ShowToolPane(global::ICSharpCode.ILSpy.Search.SearchPaneModel.PaneContentId);
dockWorkspace.ShowToolPane(ICSharpCode.ILSpy.Search.SearchPaneModel.PaneContentId);
var pane = await window.WaitForComponent<SearchPane>();
dockWorkspace.ShowSearchCommand.Execute(null);

6
ILSpy.Tests/Search/SearchPaneNicetiesTests.cs

@ -59,7 +59,7 @@ public class SearchPaneNicetiesTests @@ -59,7 +59,7 @@ public class SearchPaneNicetiesTests
static async Task<(MainWindow window, SearchPane pane, SearchPaneModel vm)> ShowPaneAsync()
{
var (window, _) = await TestHarness.BootAsync();
var dockWorkspace = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>();
var dockWorkspace = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>();
dockWorkspace.ShowToolPane(SearchPaneModel.PaneContentId);
var pane = await window.WaitForComponent<SearchPane>();
var vm = (SearchPaneModel)pane.DataContext!;
@ -144,7 +144,7 @@ public class SearchPaneNicetiesTests @@ -144,7 +144,7 @@ public class SearchPaneNicetiesTests
public async Task Ctrl_Enter_On_A_Result_Opens_It_In_A_New_Tab()
{
var (_, pane, vm) = await ShowPaneAsync();
var workspace = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>();
var workspace = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>();
vm.SelectedSearchMode = vm.SearchModes.First(m => m.Mode == SearchMode.Type);
vm.SearchTerm = "Enumerable";
@ -172,7 +172,7 @@ public class SearchPaneNicetiesTests @@ -172,7 +172,7 @@ public class SearchPaneNicetiesTests
public async Task Activate_With_NewTab_Opens_A_New_Document_Tab()
{
var (_, _, vm) = await ShowPaneAsync();
var workspace = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>();
var workspace = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>();
vm.SelectedSearchMode = vm.SearchModes.First(m => m.Mode == SearchMode.Type);
vm.SearchTerm = "Enumerable";

2
ILSpy.Tests/Search/SearchPaneSortableColumnsTests.cs

@ -50,7 +50,7 @@ public class SearchPaneSortableColumnsTests @@ -50,7 +50,7 @@ public class SearchPaneSortableColumnsTests
{
var window = AppComposition.Current.GetExport<MainWindow>();
window.Show();
AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>()
AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>()
.ShowToolPane(SearchPaneModel.PaneContentId);
var pane = await window.WaitForComponent<SearchPane>();

4
ILSpy.Tests/Search/SearchPaneStreamingTests.cs

@ -51,11 +51,11 @@ public class SearchPaneStreamingTests @@ -51,11 +51,11 @@ public class SearchPaneStreamingTests
var module = await assemblyNode.LoadedAssembly.GetMetadataFileAsync();
var queue = new System.Collections.Concurrent.ConcurrentQueue<ICSharpCode.ILSpyX.Search.SearchResult>();
var language = AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Languages.LanguageService>().CurrentLanguage;
var language = AppComposition.Current.GetExport<ICSharpCode.ILSpy.Languages.LanguageService>().CurrentLanguage;
var request = new ICSharpCode.ILSpyX.Search.SearchRequest {
Mode = SearchMode.Type,
Keywords = new[] { "Enumerable" },
SearchResultFactory = new global::ICSharpCode.ILSpy.Search.AvaloniaSearchResultFactory(language),
SearchResultFactory = new ICSharpCode.ILSpy.Search.AvaloniaSearchResultFactory(language),
DecompilerSettings = new ICSharpCode.Decompiler.DecompilerSettings(),
FullNameSearch = false,
OmitGenerics = false,

6
ILSpy.Tests/Search/SearchPaneViewTests.cs

@ -46,7 +46,7 @@ public class SearchPaneViewTests @@ -46,7 +46,7 @@ public class SearchPaneViewTests
var window = AppComposition.Current.GetExport<MainWindow>();
window.Show();
// Search is hidden by default; surface it so its view realises.
AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>()
AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>()
.ShowToolPane(SearchPaneModel.PaneContentId);
var pane = await window.WaitForComponent<SearchPane>();
TestCapture.Step("booted");
@ -69,7 +69,7 @@ public class SearchPaneViewTests @@ -69,7 +69,7 @@ public class SearchPaneViewTests
var window = AppComposition.Current.GetExport<MainWindow>();
window.Show();
// Search is hidden by default; surface it so its view realises.
AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>()
AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>()
.ShowToolPane(SearchPaneModel.PaneContentId);
var pane = await window.WaitForComponent<SearchPane>();
TestCapture.Step("booted");
@ -94,7 +94,7 @@ public class SearchPaneViewTests @@ -94,7 +94,7 @@ public class SearchPaneViewTests
var window = AppComposition.Current.GetExport<MainWindow>();
window.Show();
// Search is hidden by default; surface it so its view realises.
AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>()
AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>()
.ShowToolPane(SearchPaneModel.PaneContentId);
var pane = await window.WaitForComponent<SearchPane>();
TestCapture.Step("booted");

4
ILSpy.Tests/Search/SearchProgressTests.cs

@ -107,8 +107,8 @@ public class SearchProgressTests @@ -107,8 +107,8 @@ public class SearchProgressTests
var window = AppComposition.Current.GetExport<MainWindow>();
window.Show();
// Search is hidden by default; surface it so its view realises.
AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.Docking.DockWorkspace>()
.ShowToolPane(global::ICSharpCode.ILSpy.Search.SearchPaneModel.PaneContentId);
AppComposition.Current.GetExport<ICSharpCode.ILSpy.Docking.DockWorkspace>()
.ShowToolPane(ICSharpCode.ILSpy.Search.SearchPaneModel.PaneContentId);
var pane = await window.WaitForComponent<SearchPane>();
TestCapture.Step("booted");

4
ILSpy.Tests/TestCaptureExtensions.cs

@ -25,8 +25,8 @@ using Avalonia.Controls; @@ -25,8 +25,8 @@ using Avalonia.Controls;
using Avalonia.Headless;
using Avalonia.Threading;
using global::ICSharpCode.ILSpy.AppEnv;
using global::ICSharpCode.ILSpy.Views;
using ICSharpCode.ILSpy.AppEnv;
using ICSharpCode.ILSpy.Views;
namespace ICSharpCode.ILSpy.Tests;

10
ILSpy.Tests/TestHarness.cs

@ -27,11 +27,11 @@ using Avalonia.Interactivity; @@ -27,11 +27,11 @@ using Avalonia.Interactivity;
using ICSharpCode.ILSpy.Properties;
using ICSharpCode.ILSpyX;
using global::ICSharpCode.ILSpy;
using global::ICSharpCode.ILSpy.AppEnv;
using global::ICSharpCode.ILSpy.Commands;
using global::ICSharpCode.ILSpy.ViewModels;
using global::ICSharpCode.ILSpy.Views;
using ICSharpCode.ILSpy;
using ICSharpCode.ILSpy.AppEnv;
using ICSharpCode.ILSpy.Commands;
using ICSharpCode.ILSpy.ViewModels;
using ICSharpCode.ILSpy.Views;
namespace ICSharpCode.ILSpy.Tests;

4
ILSpy.Tests/TreeNavigation.cs

@ -21,8 +21,8 @@ using System.Linq; @@ -21,8 +21,8 @@ using System.Linq;
using ICSharpCode.ILSpyX.TreeView;
using global::ICSharpCode.ILSpy.AssemblyTree;
using global::ICSharpCode.ILSpy.TreeNodes;
using ICSharpCode.ILSpy.AssemblyTree;
using ICSharpCode.ILSpy.TreeNodes;
namespace ICSharpCode.ILSpy.Tests;

22
ILSpy.Tests/TreeNodeAssertions.cs

@ -28,9 +28,9 @@ using AwesomeAssertions; @@ -28,9 +28,9 @@ using AwesomeAssertions;
using ICSharpCode.ILSpyX.TreeView;
using global::ICSharpCode.ILSpy.AppEnv;
using global::ICSharpCode.ILSpy.AssemblyTree;
using global::ICSharpCode.ILSpy.Views;
using ICSharpCode.ILSpy.AppEnv;
using ICSharpCode.ILSpy.AssemblyTree;
using ICSharpCode.ILSpy.Views;
namespace ICSharpCode.ILSpy.Tests;
@ -83,7 +83,7 @@ public class TreeNodeBeAssertions @@ -83,7 +83,7 @@ public class TreeNodeBeAssertions
// ScrollIntoView is posted at Background priority — give it time to realise the row.
var deadline = DateTime.UtcNow + ScrollPollTimeout;
global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem? row = null;
ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem? row = null;
bool ok = false;
while (DateTime.UtcNow < deadline)
{
@ -104,7 +104,7 @@ public class TreeNodeBeAssertions @@ -104,7 +104,7 @@ public class TreeNodeBeAssertions
return new AndConstraint<TreeNodeBeAssertions>(this);
}
static global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView? TryFindGrid(out string? failure)
static ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView? TryFindGrid(out string? failure)
{
var window = FindActiveWindow();
if (window is null)
@ -120,7 +120,7 @@ public class TreeNodeBeAssertions @@ -120,7 +120,7 @@ public class TreeNodeBeAssertions
return null;
}
var grid = pane.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>().FirstOrDefault();
var grid = pane.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView>().FirstOrDefault();
if (grid is null)
{
failure = "SharpTreeView not found inside AssemblyListPane";
@ -145,9 +145,9 @@ public class TreeNodeBeAssertions @@ -145,9 +145,9 @@ public class TreeNodeBeAssertions
}
}
static global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem? FindRow(global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView grid, SharpTreeNode target)
static ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem? FindRow(ICSharpCode.ILSpy.Controls.TreeView.SharpTreeView grid, SharpTreeNode target)
{
foreach (var row in grid.GetVisualDescendants().OfType<global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>())
foreach (var row in grid.GetVisualDescendants().OfType<ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem>())
{
if (ReferenceEquals(row.DataContext, target))
return row;
@ -155,7 +155,7 @@ public class TreeNodeBeAssertions @@ -155,7 +155,7 @@ public class TreeNodeBeAssertions
return null;
}
static bool IsInViewport(global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem row, ScrollViewer scrollViewer)
static bool IsInViewport(ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem row, ScrollViewer scrollViewer)
{
var topLeft = row.TranslatePoint(new Point(0, 0), scrollViewer);
if (topLeft is null)
@ -165,7 +165,7 @@ public class TreeNodeBeAssertions @@ -165,7 +165,7 @@ public class TreeNodeBeAssertions
return top >= 0 && bottom <= scrollViewer.Viewport.Height + 0.5;
}
static bool IsRoughlyCentered(global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem row, ScrollViewer scrollViewer)
static bool IsRoughlyCentered(ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem row, ScrollViewer scrollViewer)
{
var topLeft = row.TranslatePoint(new Point(0, 0), scrollViewer);
if (topLeft is null)
@ -178,7 +178,7 @@ public class TreeNodeBeAssertions @@ -178,7 +178,7 @@ public class TreeNodeBeAssertions
return Math.Abs(rowMid - viewportMid) <= row.Bounds.Height || nearTopClamp || nearBottomClamp;
}
string BuildState(ScrollViewer scrollViewer, global::ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem? row)
string BuildState(ScrollViewer scrollViewer, ICSharpCode.ILSpy.Controls.TreeView.SharpTreeViewItem? row)
{
if (row is null)
return $"but no SharpTreeViewItem has been realised for it (offset={scrollViewer.Offset}, viewport={scrollViewer.Viewport}, extent={scrollViewer.Extent})";

8
ILSpy.Tests/Waiters.cs

@ -25,10 +25,10 @@ using Avalonia; @@ -25,10 +25,10 @@ using Avalonia;
using Avalonia.Threading;
using Avalonia.VisualTree;
using global::ICSharpCode.ILSpy.AssemblyTree;
using global::ICSharpCode.ILSpy.Docking;
using global::ICSharpCode.ILSpy.TextView;
using global::ICSharpCode.ILSpy.ViewModels;
using ICSharpCode.ILSpy.AssemblyTree;
using ICSharpCode.ILSpy.Docking;
using ICSharpCode.ILSpy.TextView;
using ICSharpCode.ILSpy.ViewModels;
namespace ICSharpCode.ILSpy.Tests;

2
ILSpy/Docking/DockWorkspace.cs

@ -667,7 +667,7 @@ namespace ICSharpCode.ILSpy.Docking @@ -667,7 +667,7 @@ namespace ICSharpCode.ILSpy.Docking
// EntityReferences with a non-"decompile" protocol (e.g. metadata://) get a first
// pass through registered IProtocolHandler exports. The first handler returning a
// non-null node wins; if none match we fall through to the default resolver.
if (segment.Reference is global::ICSharpCode.ILSpy.EntityReference entity
if (segment.Reference is ICSharpCode.ILSpy.EntityReference entity
&& entity.Protocol != "decompile")
{
var module = entity.ResolveAssembly(assemblyTreeModel.AssemblyList!);

2
ILSpy/TreeNodes/ExtensionTreeNode.cs

@ -106,7 +106,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -106,7 +106,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
{
try
{
return AppComposition.Current.GetExport<global::ICSharpCode.ILSpy.SettingsService>().DecompilerSettings.Clone();
return AppComposition.Current.GetExport<ICSharpCode.ILSpy.SettingsService>().DecompilerSettings.Clone();
}
catch
{

2
ILSpy/TreeNodes/ImageResourceEntryNode.cs

@ -85,7 +85,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -85,7 +85,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
async System.Threading.Tasks.Task SaveSnapshotAsync(byte[] snapshot)
{
var defaultName = Path.GetFileName(global::ICSharpCode.Decompiler.CSharp.ProjectDecompiler
var defaultName = Path.GetFileName(ICSharpCode.Decompiler.CSharp.ProjectDecompiler
.WholeProjectDecompiler.SanitizeFileName((string)Text));
var path = await Commands.FilePickers.SaveAsync("All files|*.*", defaultName).ConfigureAwait(false);
if (path == null)

8
ILSpy/ViewModels/MetadataTablePageModel.cs

@ -206,7 +206,7 @@ namespace ICSharpCode.ILSpy.ViewModels @@ -206,7 +206,7 @@ namespace ICSharpCode.ILSpy.ViewModels
Convert.ToInt64(value, System.Globalization.CultureInfo.InvariantCulture)
& 0xFFFFFFFFL,
System.Globalization.CultureInfo.InvariantCulture);
if (!global::ICSharpCode.ILSpy.Metadata.Filters.CompiledFilter.Compile(flagsState).Matches(actual))
if (!ICSharpCode.ILSpy.Metadata.Filters.CompiledFilter.Compile(flagsState).Matches(actual))
return false;
}
// Fall through so a free-form substring filter on a [Flags] column still
@ -328,14 +328,14 @@ namespace ICSharpCode.ILSpy.ViewModels @@ -328,14 +328,14 @@ namespace ICSharpCode.ILSpy.ViewModels
/// the text predicate.
/// </summary>
[ObservableProperty]
private global::ICSharpCode.ILSpy.Metadata.Filters.FilterState? flagsState;
private ICSharpCode.ILSpy.Metadata.Filters.FilterState? flagsState;
// Forward inner FilterState mutations as our own PropertyChanged so the page's
// CollectionChanged-driven subscription (which only listens for ColumnFilter
// property changes) wakes up and refreshes the DataGridCollectionView.
partial void OnFlagsStateChanged(
global::ICSharpCode.ILSpy.Metadata.Filters.FilterState? oldValue,
global::ICSharpCode.ILSpy.Metadata.Filters.FilterState? newValue)
ICSharpCode.ILSpy.Metadata.Filters.FilterState? oldValue,
ICSharpCode.ILSpy.Metadata.Filters.FilterState? newValue)
{
if (oldValue is not null)
oldValue.PropertyChanged -= OnFlagsStateInnerChanged;

Loading…
Cancel
Save