void OnTextEditorEvent(TextEditorUIContextListenerEvent @event, ITextEditorUIContext uiContext, object data) { if (@event == TextEditorUIContextListenerEvent.NewContent) { AddCodeMappings(uiContext, data as AvalonEditTextOutput); } }
public IconBarMargin(ITextEditorUIContext uiContext, ITextLineObjectManager textLineObjectManager, IImageManager imageManager, IThemeManager themeManager) { this.uiContext = uiContext; this.textLineObjectManager = textLineObjectManager; this.imageManager = imageManager; this.themeManager = themeManager; }
List <ILCodeBreakpoint> GetILCodeBreakpoints(ITextEditorUIContext uiContext, IList <SourceCodeMapping> mappings) { var list = new List <ILCodeBreakpoint>(); if (mappings.Count == 0) { return(list); } var mapping = mappings[0]; foreach (var ilbp in ILCodeBreakpoints) { TextPosition location, endLocation; if (!ilbp.GetLocation(uiContext, out location, out endLocation)) { continue; } if (location != mapping.StartPosition || endLocation != mapping.EndPosition) { continue; } list.Add(ilbp); } return(list); }
public void RaiseAddedEvent(ITextEditorUIContext uiContext) { if (uiContext == null) throw new ArgumentNullException(); foreach (var info in listeners.ToArray()) info.Execute(TextEditorUIContextListenerEvent.Added, uiContext, null); }
public void Toggle(ITextEditorUIContext uiContext, int line, int column = 0) { var bps = uiContext.GetCodeMappings().Find(line, column); var ilbps = GetILCodeBreakpoints(uiContext, bps); if (ilbps.Count > 0) { if (IsEnabled(ilbps)) { foreach (var ilbp in ilbps) { Remove(ilbp); } } else { foreach (var bpm in ilbps) { bpm.IsEnabled = true; } } } else if (bps.Count > 0) { foreach (var bp in bps) { var md = bp.Mapping.Method; var serMod = serializedDnModuleCreator.Create(md.Module); var key = new SerializedDnToken(serMod, md.MDToken); Add(new ILCodeBreakpoint(key, bp.ILRange.From)); } uiContext.ScrollAndMoveCaretTo(bps[0].StartPosition.Line, bps[0].StartPosition.Column); } }
void OnTextEditorUIContextEvent(TextEditorUIContextListenerEvent @event, ITextEditorUIContext uiContext, object data) { if (NewMethodInfoAvailable != null) { NewMethodInfoAvailable(this, EventArgs.Empty); } }
BamlTabSaver(IFileTab tab, BamlResourceElementNode bamlNode, ITextEditorUIContext uiContext, IMessageBoxManager messageBoxManager) { this.tab = tab; this.bamlNode = bamlNode; this.uiContext = uiContext; this.messageBoxManager = messageBoxManager; }
public static CodeMappings TryGetCodeMappings(this ITextEditorUIContext self) { if (self == null) { return(null); } return((CodeMappings)self.GetOutputData(CodeMappingsLoader.CodeMappingsKey)); }
void OnTextEditorUIContextEvent(TextEditorUIContextListenerEvent @event, ITextEditorUIContext uiContext, object data) { if (@event == TextEditorUIContextListenerEvent.NewContent) { Remove(uiContext); UpdateStackFrameLines(uiContext, false); } }
NodeTabSaver(IMessageBoxManager messageBoxManager, IFileTab tab, IFileTreeNodeDecompiler fileTreeNodeDecompiler, ILanguage language, ITextEditorUIContext uiContext, IFileTreeNodeData[] nodes) { this.messageBoxManager = messageBoxManager; this.tab = tab; this.fileTreeNodeDecompiler = fileTreeNodeDecompiler; this.language = language; this.uiContext = uiContext; this.nodes = nodes; }
public ITextMarker CreateMarker(ITextEditorUIContext uiContext, ITextMarkerService markerService) { var marker = CreateMarkerInternal(markerService, uiContext); var cm = uiContext.GetCodeMappings(); marker.ZOrder = ZOrder; marker.IsVisible = b => cm.TryGetMapping(SerializedDnToken) != null; marker.TextMarkerObject = this; Initialize(uiContext, markerService, marker); return marker; }
void AddCodeMappings(ITextEditorUIContext uiContext, AvalonEditTextOutput output) { if (output == null) { return; } var cm = new CodeMappings(output.DebuggerMemberMappings, serializedDnModuleCreator); uiContext.AddOutputData(CodeMappingsKey, cm); }
void AddCodeMappings(ITextEditorUIContext uiContext, AvalonEditTextOutput output) { if (output == null) { return; } var cm = new CodeMappings(output.DebuggerMemberMappings); uiContext.AddOutputData(CodeMappingsConstants.CodeMappingsKey, cm); }
static IEnumerable <CodeReference> FindInstructions(ITextEditorUIContext uiContext) { foreach (var r in uiContext.GetSelectedCodeReferences()) { if (r.IsLocalTarget && r.Reference is InstructionReference) { yield return(r); } } }
public int GetLineNumber(ITextEditorUIContext uiContext) { TextPosition location, endLocation; if (GetLocation(uiContext, out location, out endLocation)) { return(location.Line); } return(-1); }
public ITextMarker CreateMarker(ITextEditorUIContext uiContext, ITextMarkerService markerService) { var marker = CreateMarkerInternal(markerService, uiContext); var cm = uiContext.GetCodeMappings(); marker.ZOrder = ZOrder; marker.IsVisible = b => cm.TryGetMapping(SerializedDnToken) != null; marker.TextMarkerObject = this; Initialize(uiContext, markerService, marker); return(marker); }
public override bool IsVisible(ITextEditorUIContext uiContext) { TextPosition location, endLocation; var cm = uiContext.GetCodeMappings(); var mm = cm.TryGetMapping(SerializedDnToken); if (mm == null) return false; if (!mm.GetInstructionByTokenAndOffset(ILOffset, out location, out endLocation)) return false; return true; }
public void RaiseAddedEvent(ITextEditorUIContext uiContext) { if (uiContext == null) { throw new ArgumentNullException(); } foreach (var info in listeners.ToArray()) { info.Execute(TextEditorUIContextListenerEvent.Added, uiContext, null); } }
public void RaiseNewContentEvent(ITextEditorUIContext uiContext, ITextOutput output, TextEditorUIContextListener listener, double order) { if (uiContext == null) throw new ArgumentNullException(); if (output == null) throw new ArgumentNullException(); var infos = new List<ListenerInfo>(listeners); infos.Add(new ListenerInfo(listener, order)); Sort(infos); foreach (var info in infos) info.Execute(TextEditorUIContextListenerEvent.NewContent, uiContext, output); }
protected override void Initialize(ITextEditorUIContext uiContext, ITextMarkerService markerService, ITextMarker marker) { marker.HighlightingColor = () => { switch (type) { case StackFrameLineType.CurrentStatement: return DebuggerColors.StackFrameCurrentHighlightingColor; case StackFrameLineType.SelectedReturnStatement: return DebuggerColors.StackFrameSelectedHighlightingColor; case StackFrameLineType.ReturnStatement: return DebuggerColors.StackFrameReturnHighlightingColor; default: throw new InvalidOperationException(); } }; }
static object GetReference(IMenuItemContext context, out ITextEditorUIContext uiContext) { uiContext = null; if (context.CreatorObject.Guid != new Guid(MenuConstants.GUIDOBJ_TEXTEDITORCONTROL_GUID)) { return(null); } uiContext = context.Find <ITextEditorUIContext>(); if (uiContext == null) { return(null); } return(context.Find <CodeReference>()); }
public static bool MoveCaretTo(ITextEditorUIContext uiContext, SerializedDnToken key, uint ilOffset) { if (uiContext == null) return false; CodeMappings cm; if (!VerifyAndGetCurrentDebuggedMethod(uiContext, key, out cm)) return false; TextPosition location, endLocation; if (!cm.TryGetMapping(key).GetInstructionByTokenAndOffset(ilOffset, out location, out endLocation)) return false; uiContext.ScrollAndMoveCaretTo(location.Line, location.Column); return true; }
void Remove(ITextEditorUIContext uiContext) { if (uiContext == null) { return; } for (int i = stackFrameLines.Count - 1; i >= 0; i--) { if (stackFrameLines[i].TextView == uiContext) { textLineObjectManager.Remove(stackFrameLines[i]); stackFrameLines.RemoveAt(i); } } }
ITextMarker CreateMarkerInternal(ITextMarkerService markerService, ITextEditorUIContext uiContext) { TextPosition location, endLocation; if (!GetLocation(uiContext, out location, out endLocation)) { throw new InvalidOperationException(); } var line = markerService.TextView.Document.GetLineByNumber(location.Line); var endLine = markerService.TextView.Document.GetLineByNumber(endLocation.Line); int startOffset = line.Offset + location.Column - 1; int endOffset = endLine.Offset + endLocation.Column - 1; return(markerService.Create(startOffset, endOffset - startOffset)); }
public override bool IsVisible(ITextEditorUIContext uiContext) { TextPosition location, endLocation; var cm = uiContext.GetCodeMappings(); var mm = cm.TryGetMapping(SerializedDnToken); if (mm == null) { return(false); } if (!mm.GetInstructionByTokenAndOffset(ILOffset, out location, out endLocation)) { return(false); } return(true); }
public bool GetLocation(ITextEditorUIContext uiContext, out TextPosition location, out TextPosition endLocation) { var cm = uiContext.GetCodeMappings(); var mapping = cm.TryGetMapping(methodKey); if (mapping == null) { location = endLocation = new TextPosition(); return false; } bool isMatch; var map = mapping.GetInstructionByOffset(ilOffset, out isMatch); if (map == null) { location = endLocation = new TextPosition(); return false; } location = map.StartPosition; endLocation = map.EndPosition; return true; }
protected override void Initialize(ITextEditorUIContext uiContext, ITextMarkerService markerService, ITextMarker marker) { marker.HighlightingColor = () => { switch (type) { case StackFrameLineType.CurrentStatement: return(DebuggerColors.StackFrameCurrentHighlightingColor); case StackFrameLineType.SelectedReturnStatement: return(DebuggerColors.StackFrameSelectedHighlightingColor); case StackFrameLineType.ReturnStatement: return(DebuggerColors.StackFrameReturnHighlightingColor); default: throw new InvalidOperationException(); } }; }
internal static IList <SourceCodeMapping> GetMappings(ITextEditorUIContext uiContext, int line, int col) { if (uiContext == null) { return(null); } var cm = uiContext.GetCodeMappings(); var list = cm.Find(line, col); if (list.Count == 0) { return(null); } if (!(list[0].StartPosition.Line <= line && line <= list[0].EndPosition.Line)) { return(null); } return(list); }
public void RaiseNewContentEvent(ITextEditorUIContext uiContext, ITextOutput output, TextEditorUIContextListener listener, double order) { if (uiContext == null) { throw new ArgumentNullException(); } if (output == null) { throw new ArgumentNullException(); } var infos = new List <ListenerInfo>(listeners); infos.Add(new ListenerInfo(listener, order)); Sort(infos); foreach (var info in infos) { info.Execute(TextEditorUIContextListenerEvent.NewContent, uiContext, output); } }
public static void Execute(ITextEditorUIContext uiContext, Lazy <IMethodAnnotations> methodAnnotations) { if (!CanExecute(uiContext)) { return; } var copier = new InstructionILBytesCopier(); var text = copier.Copy(FindInstructions(uiContext), methodAnnotations); if (text.Length > 0) { Clipboard.SetText(text); if (copier.FoundUnknownBytes) { Shared.App.MsgBox.Instance.ShowIgnorableMessage(new Guid("141A1744-13CD-4835-A804-08D93D8E0D2B"), dnSpy_AsmEditor_Resources.UnknownBytesMsg, MsgBoxButton.OK); } } }
public bool GetLocation(ITextEditorUIContext uiContext, out TextPosition location, out TextPosition endLocation) { var cm = uiContext.GetCodeMappings(); var mapping = cm.TryGetMapping(methodKey); if (mapping == null) { location = endLocation = new TextPosition(); return(false); } bool isMatch; var map = mapping.GetInstructionByOffset(ilOffset, out isMatch); if (map == null) { location = endLocation = new TextPosition(); return(false); } location = map.StartPosition; endLocation = map.EndPosition; return(true); }
public static bool MoveCaretTo(ITextEditorUIContext uiContext, SerializedDnToken key, uint ilOffset) { if (uiContext == null) { return(false); } CodeMappings cm; if (!VerifyAndGetCurrentDebuggedMethod(uiContext, key, out cm)) { return(false); } TextPosition location, endLocation; if (!cm.TryGetMapping(key).GetInstructionByTokenAndOffset(ilOffset, out location, out endLocation)) { return(false); } uiContext.ScrollAndMoveCaretTo(location.Line, location.Column); return(true); }
public static bool VerifyAndGetCurrentDebuggedMethod(ITextEditorUIContext uiContext, SerializedDnToken serToken, out CodeMappings codeMappings) { codeMappings = uiContext.GetCodeMappings(); return codeMappings.TryGetMapping(serToken) != null; }
public override bool IsVisible(ITextEditorUIContext uiContext) { return(this.uiContext == uiContext); }
public StackFrameLine(StackFrameLineType type, ITextEditorUIContext uiContext, SerializedDnToken methodKey, uint ilOffset) : base(methodKey, ilOffset) { this.type = type; this.uiContext = uiContext; }
/// <summary> /// Should be called each time the IL offset has been updated /// </summary> bool UpdateStackFrameLines(ITextEditorUIContext uiContext, bool moveCaret = false) { if (uiContext == null) return false; Remove(uiContext); bool movedCaret = false; var cm = uiContext.TryGetCodeMappings(); bool updateReturnStatements = cm != null && theDebugger.ProcessState == DebuggerProcessState.Stopped; if (updateReturnStatements) { int frameNo = -1; bool tooManyFrames; foreach (var frame in GetFrames(MAX_STACKFRAME_LINES, out tooManyFrames)) { frameNo++; if (!frame.IsILFrame) continue; var ip = frame.ILFrameIP; if (!ip.IsExact && !ip.IsApproximate && !ip.IsProlog && !ip.IsEpilog) continue; uint token = frame.Token; if (token == 0) continue; var serAsm = frame.SerializedDnModule; if (serAsm == null) continue; StackFrameLineType type; if (frameNo == 0) type = StackFrameLineType.CurrentStatement; else type = currentState.FrameNumber == frameNo ? StackFrameLineType.SelectedReturnStatement : StackFrameLineType.ReturnStatement; var key = new SerializedDnToken(serAsm.Value, token); uint offset = frame.GetILOffset(moduleLoader.Value); MethodDef methodDef; TextPosition location, endLocation; var mm = cm.TryGetMapping(key); if (mm != null && mm.GetInstructionByTokenAndOffset(offset, out methodDef, out location, out endLocation)) { var rs = new StackFrameLine(type, uiContext, key, offset); stackFrameLines.Add(rs); textLineObjectManager.Add(rs); if (moveCaret && frameNo == currentState.FrameNumber) { uiContext.ScrollAndMoveCaretTo(location.Line, location.Column); movedCaret = true; } } } } return movedCaret; }
protected override void Initialize(ITextEditorUIContext uiContext, ITextMarkerService markerService, ITextMarker marker) { marker.HighlightingColor = () => ilbp.IsEnabled ? DebuggerColors.CodeBreakpointHighlightingColor : DebuggerColors.CodeBreakpointDisabledHighlightingColor; }
void Remove(ITextEditorUIContext uiContext) { if (uiContext == null) return; for (int i = stackFrameLines.Count - 1; i >= 0; i--) { if (stackFrameLines[i].TextView == uiContext) { textLineObjectManager.Remove(stackFrameLines[i]); stackFrameLines.RemoveAt(i); } } }
public IconBarCommandContext(ITextEditorUIContext uiContext, int line) { this.UIContext = uiContext; this.Line = line; }
void AddCodeMappings(ITextEditorUIContext uiContext, AvalonEditTextOutput output) { if (output == null) return; var cm = new CodeMappings(output.DebuggerMemberMappings); uiContext.AddOutputData(CodeMappingsConstants.CodeMappingsKey, cm); }
public override bool IsVisible(ITextEditorUIContext uiContext) { return this.uiContext == uiContext; }
List <ILCodeBreakpoint> GetILCodeBreakpoints(ITextEditorUIContext uiContext, int line, int column) { return(GetILCodeBreakpoints(uiContext, uiContext.GetCodeMappings().Find(line, column))); }
void AddCodeMappings(ITextEditorUIContext uiContext, AvalonEditTextOutput output) { if (output == null) return; var cm = new CodeMappings(output.DebuggerMemberMappings, serializedDnModuleCreator); uiContext.AddOutputData(CodeMappingsKey, cm); }
public void Execute(TextEditorUIContextListenerEvent @event, ITextEditorUIContext uiContext, object data) { Listener(@event, uiContext, data); }
void OnTextEditorEvent(TextEditorUIContextListenerEvent @event, ITextEditorUIContext uiContext, object data) { if (@event == TextEditorUIContextListenerEvent.NewContent) AddCodeMappings(uiContext, data as AvalonEditTextOutput); }
internal static IList<SourceCodeMapping> GetMappings(ITextEditorUIContext uiContext, int line, int col) { if (uiContext == null) return null; var cm = uiContext.GetCodeMappings(); var list = cm.Find(line, col); if (list.Count == 0) return null; if (!(list[0].StartPosition.Line <= line && line <= list[0].EndPosition.Line)) return null; return list; }
static List<IIconBarObject> GetIconBarObjects(IList<IIconBarObject> objects, ITextEditorUIContext uiContext, int line) { var list = new List<IIconBarObject>(); foreach (var obj in objects) { if (obj.GetLineNumber(uiContext) != line) continue; if (obj.ImageReference == null) continue; list.Add(obj); } list.Sort((a, b) => b.ZOrder.CompareTo(a.ZOrder)); return list; }
public static bool CanExecute(ITextEditorUIContext uiContext) { return(uiContext != null && FindInstructions(uiContext).Any()); }
public void Toggle(ITextEditorUIContext uiContext, int line, int column = 0) { var bps = uiContext.GetCodeMappings().Find(line, column); var ilbps = GetILCodeBreakpoints(uiContext, bps); if (ilbps.Count > 0) { if (IsEnabled(ilbps)) { foreach (var ilbp in ilbps) Remove(ilbp); } else { foreach (var bpm in ilbps) bpm.IsEnabled = true; } } else if (bps.Count > 0) { foreach (var bp in bps) { var md = bp.Mapping.Method; var serMod = serializedDnModuleCreator.Create(md.Module); var key = new SerializedDnToken(serMod, md.MDToken); Add(new ILCodeBreakpoint(key, bp.ILRange.From)); } uiContext.ScrollAndMoveCaretTo(bps[0].StartPosition.Line, bps[0].StartPosition.Column); } }
public static bool CanExecute(ITextEditorUIContext uiContext) { return uiContext != null && FindInstructions(uiContext).Any(); }
static IEnumerable<CodeReference> FindInstructions(ITextEditorUIContext uiContext) { foreach (var r in uiContext.GetSelectedCodeReferences()) { if (r.IsLocalTarget && r.Reference is InstructionReference) yield return r; } }
List<ILCodeBreakpoint> GetILCodeBreakpoints(ITextEditorUIContext uiContext, int line, int column) { return GetILCodeBreakpoints(uiContext, uiContext.GetCodeMappings().Find(line, column)); }
public static void Execute(ITextEditorUIContext uiContext, Lazy<IMethodAnnotations> methodAnnotations) { if (!CanExecute(uiContext)) return; var copier = new InstructionILBytesCopier(); var text = copier.Copy(FindInstructions(uiContext), methodAnnotations); if (text.Length > 0) { try { Clipboard.SetText(text); } catch (ExternalException) { } if (copier.FoundUnknownBytes) { Shared.App.MsgBox.Instance.ShowIgnorableMessage(new Guid("141A1744-13CD-4835-A804-08D93D8E0D2B"), dnSpy_AsmEditor_Resources.UnknownBytesMsg, MsgBoxButton.OK); } } }
List<ILCodeBreakpoint> GetILCodeBreakpoints(ITextEditorUIContext uiContext, IList<SourceCodeMapping> mappings) { var list = new List<ILCodeBreakpoint>(); if (mappings.Count == 0) return list; var mapping = mappings[0]; foreach (var ilbp in ILCodeBreakpoints) { TextPosition location, endLocation; if (!ilbp.GetLocation(uiContext, out location, out endLocation)) continue; if (location != mapping.StartPosition || endLocation != mapping.EndPosition) continue; list.Add(ilbp); } return list; }