private void GetTypeNameHelper(out string name, out string nsName, out string assemblyName) { TypeReferenceHandle typeRefHandle; QTypeDefinition qTypeDefinition; MetadataReader reader; RuntimeTypeHandle genericDefinitionHandle = GetTypeDefinition().GetRuntimeTypeHandle(); Debug.Assert(!genericDefinitionHandle.IsNull()); string enclosingDummy; // Try to get the name from metadata if (TypeLoaderEnvironment.Instance.TryGetMetadataForNamedType(genericDefinitionHandle, out qTypeDefinition)) { TypeDefinitionHandle typeDefHandle = qTypeDefinition.NativeFormatHandle; typeDefHandle.GetFullName(qTypeDefinition.NativeFormatReader, out name, out enclosingDummy, out nsName); assemblyName = typeDefHandle.GetContainingModuleName(qTypeDefinition.NativeFormatReader); } // Try to get the name from diagnostic metadata else if (TypeLoaderEnvironment.TryGetTypeReferenceForNamedType(genericDefinitionHandle, out reader, out typeRefHandle)) { typeRefHandle.GetFullName(reader, out name, out enclosingDummy, out nsName); assemblyName = typeRefHandle.GetContainingModuleName(reader); } else { name = genericDefinitionHandle.LowLevelToStringRawEETypeAddress(); nsName = ""; assemblyName = "?"; } }
public static string LowLevelToString(this RuntimeTypeHandle rtth) { TypeReferenceHandle typeRefHandle; QTypeDefinition qTypeDefinition; MetadataReader reader; // Try to get the name from metadata if (TypeLoaderEnvironment.Instance.TryGetMetadataForNamedType(rtth, out qTypeDefinition)) { #if ECMA_METADATA_SUPPORT string result = EcmaMetadataFullName(qTypeDefinition); if (result != null) { return(result); } #endif reader = qTypeDefinition.NativeFormatReader; TypeDefinitionHandle typeDefHandle = qTypeDefinition.NativeFormatHandle; return(typeDefHandle.GetFullName(reader)); } // Try to get the name from diagnostic metadata if (TypeLoaderEnvironment.TryGetTypeReferenceForNamedType(rtth, out reader, out typeRefHandle)) { return(typeRefHandle.GetFullName(reader)); } // Fallback implementation when no metadata available return(LowLevelToStringRawEETypeAddress(rtth)); }
public static string LowLevelToString(this RuntimeTypeHandle rtth) { TypeReferenceHandle typeRefHandle; QTypeDefinition qTypeDefinition; MetadataReader reader; // Try to get the name from metadata if (TypeLoaderEnvironment.Instance.TryGetMetadataForNamedType(rtth, out qTypeDefinition)) { #if ECMA_METADATA_SUPPORT string result = EcmaMetadataFullName(qTypeDefinition); if (result != null) { return(result); } #endif reader = qTypeDefinition.NativeFormatReader; TypeDefinitionHandle typeDefHandle = qTypeDefinition.NativeFormatHandle; return(typeDefHandle.GetFullName(reader)); } // Try to get the name from diagnostic metadata if (TypeLoaderEnvironment.TryGetTypeReferenceForNamedType(rtth, out reader, out typeRefHandle)) { return(typeRefHandle.GetFullName(reader)); } // Fallback implementation when no metadata available string prefix = "EEType:0x"; StringBuilder sb = new StringBuilder(prefix.Length + IntPtr.Size * 4); ulong num = (ulong)rtth.ToIntPtr(); int shift = IntPtr.Size * 8; while (shift > 0) { shift -= 4; int digit = (int)((num >> shift) & 0xF); sb.Append(HexDigits[digit]); } return(sb.ToString()); }
public static string GetFullName(this TypeDefinitionHandle typeDefHandle, MetadataReader reader) { string name; string enclosing; string nspace; typeDefHandle.GetFullName(reader, out name, out enclosing, out nspace); if (enclosing != null && name != null) { return(enclosing + "+" + name); } else if (nspace != null && name != null) { return(nspace + "." + name); } return(name); }