src/StructuredLogViewer.Avalonia/Controls/ImportLinkHighlighter.cs [1:53]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - using System; using System.Collections.Generic; using System.Linq; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.Primitives.PopupPositioning; using Avalonia.Input; using Avalonia.Media; using AvaloniaEdit; using AvaloniaEdit.Document; using AvaloniaEdit.Rendering; using AvaloniaEdit.Text; using Microsoft.Build.Logging.StructuredLogger; using FontStyle = Avalonia.Media.FontStyle; namespace StructuredLogViewer.Avalonia.Controls { internal static class ImportLinkHighlighter { private const string ImportElementName = "Import"; public static void Install(TextEditor textEditor, string filePath, NavigationHelper navigationHelper) { if (navigationHelper == null || string.IsNullOrEmpty(filePath)) return; var importsByLocation = new Dictionary>(); foreach (var import in navigationHelper.Build.EvaluationFolder.Children.OfType().SelectMany(i => i.GetAllImportsTransitive())) { if (!string.Equals(import.ProjectFilePath, filePath, StringComparison.OrdinalIgnoreCase)) continue; if (string.IsNullOrEmpty(import.ImportedProjectFilePath)) continue; var location = new TextLocation(import.Line, import.Column); if (importsByLocation.TryGetValue(location, out var existingImports)) { existingImports.Add(import.ImportedProjectFilePath); } else { importsByLocation.Add(location, new HashSet(StringComparer.OrdinalIgnoreCase) { import.ImportedProjectFilePath }); } } if (importsByLocation.Count == 0) return; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - src/StructuredLogViewer/Controls/ImportLinkHighlighter.cs [1:51]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; using System.Windows.Media.TextFormatting; using ICSharpCode.AvalonEdit; using ICSharpCode.AvalonEdit.Document; using ICSharpCode.AvalonEdit.Rendering; using Microsoft.Build.Logging.StructuredLogger; namespace StructuredLogViewer.Controls { internal static class ImportLinkHighlighter { private const string ImportElementName = "Import"; public static void Install(TextEditor textEditor, string filePath, NavigationHelper navigationHelper) { if (navigationHelper == null || string.IsNullOrEmpty(filePath)) return; var importsByLocation = new Dictionary>(); foreach (var import in navigationHelper.Build.EvaluationFolder.Children.OfType().SelectMany(i => i.GetAllImportsTransitive())) { if (!string.Equals(import.ProjectFilePath, filePath, StringComparison.OrdinalIgnoreCase)) continue; if (string.IsNullOrEmpty(import.ImportedProjectFilePath)) continue; var location = new TextLocation(import.Line, import.Column); if (importsByLocation.TryGetValue(location, out var existingImports)) { existingImports.Add(import.ImportedProjectFilePath); } else { importsByLocation.Add(location, new HashSet(StringComparer.OrdinalIgnoreCase) { import.ImportedProjectFilePath }); } } if (importsByLocation.Count == 0) return; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -