//TODO: This method (and all callers) should take an ITextView instead of an IDocumentViewer as a parameter List <ILCodeBreakpoint> GetILCodeBreakpoints(IDocumentViewer documentViewer, IList <MethodSourceStatement> methodStatements) { var list = new List <ILCodeBreakpoint>(); if (methodStatements.Count == 0) { return(list); } var service = documentViewer.TryGetMethodDebugService(); if (service == null) { return(list); } var methodStatement = methodStatements[0]; foreach (var ilbp in GetILCodeBreakpoints()) { var info = service.TryGetMethodDebugInfo(ilbp.MethodToken); if (info == null) { continue; } var statement = info.GetSourceStatementByCodeOffset(ilbp.ILOffset); if (statement == null) { continue; } if (statement.Value.TextSpan != methodStatement.Statement.TextSpan) { continue; } list.Add(ilbp); } return(list); }
/// <summary> /// Gets a <see cref="IMethodDebugService"/> instance /// </summary> /// <param name="self">This</param> /// <returns></returns> public static IMethodDebugService GetMethodDebugService(this IDocumentViewer self) => self.TryGetMethodDebugService() ?? EmptyMethodDebugService.Instance;
//TODO: This method (and all callers) should take an ITextView instead of an IDocumentViewer as a parameter List<ILCodeBreakpoint> GetILCodeBreakpoints(IDocumentViewer documentViewer, IList<MethodSourceStatement> methodStatements) { var list = new List<ILCodeBreakpoint>(); if (methodStatements.Count == 0) return list; var service = documentViewer.TryGetMethodDebugService(); if (service == null) return list; var methodStatement = methodStatements[0]; foreach (var ilbp in GetILCodeBreakpoints()) { var info = service.TryGetMethodDebugInfo(ilbp.MethodToken); if (info == null) continue; var statement = info.GetSourceStatementByCodeOffset(ilbp.ILOffset); if (statement == null) continue; if (statement.Value.TextSpan != methodStatement.Statement.TextSpan) continue; list.Add(ilbp); } return list; }