| File: _generated\1\TypeNameResolver.g.cs | Web Access |
| Project: src\runtime\src\native\managed\cdac\Microsoft.Diagnostics.DataContractReader.Contracts\Microsoft.Diagnostics.DataContractReader.Contracts.csproj (Microsoft.Diagnostics.DataContractReader.Contracts) |
// <auto-generated/> #nullable enable using System; using Microsoft.Diagnostics.DataContractReader.Contracts; namespace Microsoft.Diagnostics.DataContractReader.Generated; internal static class TypeNameResolver { public static TypeHandle GetTypeHandle(Target target, string[] names) { foreach (string name in names) { if (target.Contracts.ManagedTypeSource.TryGetTypeHandle(name, out TypeHandle th)) return th; } throw new InvalidOperationException( $"No managed type resolved for TypeHandle (names=[{string.Join(",", names)}])."); } public static TargetPointer GetStaticFieldAddress(Target target, string[] names, string fieldName) { if (!TryGetStaticFieldAddress(target, names, fieldName, out TargetPointer address)) throw new InvalidOperationException( $"No static field '{fieldName}' resolved (names=[{string.Join(",", names)}])."); return address; } public static bool TryGetStaticFieldAddress(Target target, string[] names, string fieldName, out TargetPointer address) { // Native globals take precedence. Compose "TypeName.fieldName" for each candidate. foreach (string name in names) { if (target.TryReadGlobalPointer(name + "." + fieldName, out TargetPointer? nativeAddr)) { address = nativeAddr.Value; return true; } } if (target.Contracts.TryGetContract(out IManagedTypeSource mts)) { foreach (string name in names) { if (mts.TryGetStaticFieldAddress(name, fieldName, out address)) return true; } } address = default; return false; } public static TargetPointer GetThreadStaticFieldAddress(Target target, string[] names, string fieldName, TargetPointer thread) { foreach (string name in names) { if (target.Contracts.ManagedTypeSource.TryGetThreadStaticFieldAddress(name, fieldName, thread, out TargetPointer address)) return address; } throw new InvalidOperationException( $"No thread-static field '{fieldName}' resolved (names=[{string.Join(",", names)}])."); } }