protected static IFrameMoreInfo CreateReferenceSourceLink(StackFrameModel frame) { const string DotNetIcon = "http://referencesource.microsoft.com/favicon.ico"; const string SourceUrl = "http://referencesource.microsoft.com/"; if (frame.Method?.DeclaringType?.GetTypeInfo()?.Assembly != null && ReferenceSourceAssemblies.Contains(frame.Method.DeclaringType.GetTypeInfo().Assembly.GetName().Name)) { if (!String.IsNullOrEmpty(frame.At?.FileName)) { throw new NotImplementedException(); } else { if (frame.Method.DeclaringType.GetTypeInfo().IsGenericType) { var url = SourceUrl + "#q=" + WebUtility.HtmlEncode( GetGenericFullName(frame.Method.DeclaringType).Replace('+', '.')); return(FrameMoreInfo.CreateThumbLink(url, DotNetIcon)); } else { var url = SourceUrl + "#q=" + WebUtility.HtmlEncode(frame.Method.DeclaringType.FullName.Replace('+', '.') + "." + frame.Method.Name); return(FrameMoreInfo.CreateThumbLink(url, DotNetIcon)); } } } return(null); }
protected static IFrameMoreInfo CreateGithubLink(StackFrameModel frame) { const string GithubUrl = @"https://github.com/riganti/dotvvm/blob/master/src/"; const string Octocat = @"https://assets-cdn.github.com/favicon.ico"; if (frame.Method?.DeclaringType?.GetTypeInfo()?.Assembly == typeof(ErrorFormatter).GetTypeInfo().Assembly) { // dotvvm github if (!string.IsNullOrEmpty(frame.At?.FileName)) { var fileName = frame.At.FileName.Substring( frame.At.FileName.LastIndexOf("DotVVM.Framework", StringComparison.Ordinal)); var url = GithubUrl + fileName.Replace('\\', '/').TrimStart('/') + "#L" + frame.At.LineNumber; return(FrameMoreInfo.CreateThumbLink(url, Octocat)); } else { // guess by method name var fileName = frame.Method.DeclaringType.FullName.Replace("DotVVM.Framework", "") .Replace('.', '/'); if (fileName.Contains("+")) { fileName = fileName.Remove(fileName.IndexOf('+')); // remove nested class } var url = GithubUrl + "DotVVM.Framework" + fileName + ".cs"; return(FrameMoreInfo.CreateThumbLink(url, Octocat)); } } return(null); }
protected static IFrameMoreInfo CreateDotvvmDocsLink(StackFrameModel frame) { const string DotvvmThumb = "https://dotvvm.com/Content/assets/ico/favicon.png"; var type = frame.Method?.DeclaringType; if (type == null) { return(null); } while (type.DeclaringType != null) { type = type.DeclaringType; } if (type.Namespace == "DotVVM.Framework.Controls") { const string BuildinControlsDocs = "https://dotvvm.com/docs/controls/builtin/"; var url = BuildinControlsDocs + type.Name; return(FrameMoreInfo.CreateThumbLink(url, DotvvmThumb)); } return(null); }