// The only purpose of this method is to get type name and "is nested" flag, everything else is ignored by the SymWriter. // "td" is token returned by GetMethodProps or GetNestedClassProps unsafe uint IMetaDataImport.GetTypeDefProps(uint td, IntPtr stringTypeDef, uint cchTypeDef, out uint pchTypeDef, IntPtr pdwTypeDefFlags) { pchTypeDef = 0; if (td == 0) { return(0); } // The typeDef name should be fully qualified ITypeDefinition t = this.writer.GetTypeDefinition(td); string typeDefName; if (this.lastTypeDef == td) { typeDefName = this.lastTypeDefName; } else { typeDefName = PeWriter.GetMangledName((INamedTypeReference)t); INamespaceTypeDefinition namespaceTypeDef; if ((namespaceTypeDef = t.AsNamespaceTypeDefinition(this.writer.Context)) != null) { typeDefName = CodeAnalysis.MetadataHelpers.BuildQualifiedName(namespaceTypeDef.NamespaceName, typeDefName); } this.lastTypeDef = td; this.lastTypeDefName = typeDefName; } pchTypeDef = (uint)typeDefName.Length; if (pchTypeDef >= cchTypeDef) { pchTypeDef = cchTypeDef - 1; } char *pointerTypeDef = (char *)stringTypeDef.ToPointer(); for (int i = 0; i < pchTypeDef; i++) { *(pointerTypeDef + i) = typeDefName[i]; } *(pointerTypeDef + pchTypeDef) = (char)0; uint *pointerFlags = (uint *)pdwTypeDefFlags.ToPointer(); *pointerFlags = this.writer.GetTypeDefFlags(t.GetResolvedType(this.writer.Context)); return(0); }