MouseReferenceInfo?GetReferenceCore(MouseEventArgs e) { if (Keyboard.Modifiers != ModifierKeys.None && Keyboard.Modifiers != ModifierKeys.Control) { return(null); } var documentViewer = TryGetDocumentViewer(); if (documentViewer == null) { return(null); } var loc = MouseLocation.Create(documentViewer.TextView, e, insertionPosition: false); if (loc == null) { return(null); } if (loc.Position.IsInVirtualSpace) { return(new MouseReferenceInfo(null, null, loc.Position)); } int pos = loc.Position.Position.Position; var spanData = documentViewer.Content.ReferenceCollection.Find(pos, false); if (spanData == null) { return(new MouseReferenceInfo(null, spanData, loc.Position)); } if (spanData.Value.Data.Reference == null) { return(new MouseReferenceInfo(null, spanData, loc.Position)); } if (Keyboard.Modifiers != ModifierKeys.Control) { if (spanData.Value.Data.IsDefinition) { return(new MouseReferenceInfo(null, spanData, loc.Position)); } if (spanData.Value.Data.IsLocal) { return(new MouseReferenceInfo(null, spanData, loc.Position)); } } return(new MouseReferenceInfo(spanData, spanData, loc.Position)); }