bool GoTo(DotNetMethodBodyReference bodyRef, ReadOnlyCollection <object> options) { bool newTab = options.Any(a => StringComparer.Ordinal.Equals(PredefinedReferenceNavigatorOptions.NewTab, a)); var module = GetModule(bodyRef.Module, options); if (module == null) { return(false); } var method = module.ResolveToken(bodyRef.Token) as MethodDef; if (method == null) { return(false); } uint offset = bodyRef.Offset; if (offset == DotNetMethodBodyReference.PROLOG) { offset = PROLOG; } else if (offset == DotNetMethodBodyReference.EPILOG) { offset = EPILOG; } var tab = documentTabService.GetOrCreateActiveTab(); GoToLocation(tab, method, new ModuleTokenId(bodyRef.Module, bodyRef.Token), offset); return(true); }
public override void Convert(ref object reference) { switch (reference) { case DbgDotNetNativeCodeLocationImpl nativeLoc: switch (nativeLoc.ILOffsetMapping) { case DbgILOffsetMapping.Exact: case DbgILOffsetMapping.Approximate: reference = new DotNetMethodBodyReference(nativeLoc.Module, nativeLoc.Token, nativeLoc.Offset); break; case DbgILOffsetMapping.Prolog: reference = new DotNetMethodBodyReference(nativeLoc.Module, nativeLoc.Token, DotNetMethodBodyReference.PROLOG); break; case DbgILOffsetMapping.Epilog: reference = new DotNetMethodBodyReference(nativeLoc.Module, nativeLoc.Token, DotNetMethodBodyReference.EPILOG); break; case DbgILOffsetMapping.Unknown: case DbgILOffsetMapping.NoInfo: case DbgILOffsetMapping.UnmappedAddress: default: // The IL offset isn't known so use a method reference reference = new DotNetTokenReference(nativeLoc.Module, nativeLoc.Token); break; } break; } }
public override void Convert(ref object reference) { switch (reference) { case DbgDotNetCodeLocation loc: reference = new DotNetMethodBodyReference(loc.Module, loc.Token, loc.Offset); break; } }
public override void Convert(ref object?reference) { switch (reference) { case DotNetMethodBodyBookmarkLocation bodyLoc: reference = new DotNetMethodBodyReference(bodyLoc.Module, bodyLoc.Token, bodyLoc.Offset); break; case DotNetTokenBookmarkLocation tokenLoc: reference = new DotNetTokenReference(tokenLoc.Module, tokenLoc.Token); break; } }
public override void Convert(ref object reference) { switch (reference) { case DbgDotNetCodeLocationImpl locImpl: if ((locImpl.Options & DbgDotNetCodeLocationOptions.InvalidOffset) != 0) { reference = new DotNetTokenReference(locImpl.Module, locImpl.Token); } else { reference = new DotNetMethodBodyReference(locImpl.Module, locImpl.Token, locImpl.Offset); } break; case DbgDotNetCodeLocation loc: reference = new DotNetMethodBodyReference(loc.Module, loc.Token, loc.Offset); break; } }