From 1887412c460a51adcd116096d38e321dfcc900c7 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Mon, 31 Jan 2022 00:39:44 +0100 Subject: [PATCH] Add ITypeDefinition.MetadataName --- ICSharpCode.Decompiler/TypeSystem/ITypeDefinition.cs | 11 +++++++++++ .../Implementation/MetadataTypeDefinition.cs | 3 ++- .../TypeSystem/Implementation/MinimalCorlib.cs | 6 +++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.Decompiler/TypeSystem/ITypeDefinition.cs b/ICSharpCode.Decompiler/TypeSystem/ITypeDefinition.cs index bd7bb1b3c..b21cc75c0 100644 --- a/ICSharpCode.Decompiler/TypeSystem/ITypeDefinition.cs +++ b/ICSharpCode.Decompiler/TypeSystem/ITypeDefinition.cs @@ -58,6 +58,17 @@ namespace ICSharpCode.Decompiler.TypeSystem /// FullTypeName FullTypeName { get; } + /// + /// Gets the short type name as stored in metadata. + /// That is, the short type name including the generic arity (`N) appended. + /// + /// + /// "Int32" for int + /// "List`1" for List<T> + /// "List`1" for List<string> + /// + string MetadataName { get; } + /// /// Gets/Sets the declaring type (incl. type arguments, if any). /// This property will return null for top-level types. diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs index b5e420f8c..e7542643a 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/MetadataTypeDefinition.cs @@ -70,6 +70,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation var td = metadata.GetTypeDefinition(handle); this.attributes = td.Attributes; this.fullTypeName = td.GetFullTypeName(metadata); + this.MetadataName = metadata.GetString(td.Name); // Find DeclaringType + KnownTypeCode: if (fullTypeName.IsNested) { @@ -349,7 +350,7 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation } public EntityHandle MetadataToken => handle; - + public string MetadataName { get; } public FullTypeName FullTypeName => fullTypeName; public string Name => fullTypeName.Name; diff --git a/ICSharpCode.Decompiler/TypeSystem/Implementation/MinimalCorlib.cs b/ICSharpCode.Decompiler/TypeSystem/Implementation/MinimalCorlib.cs index 04991c76c..e70e3abbc 100644 --- a/ICSharpCode.Decompiler/TypeSystem/Implementation/MinimalCorlib.cs +++ b/ICSharpCode.Decompiler/TypeSystem/Implementation/MinimalCorlib.cs @@ -148,7 +148,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation { this.corlib = corlib; this.typeCode = typeCode; - this.typeKind = KnownTypeReference.Get(typeCode).typeKind; + KnownTypeReference ktr = KnownTypeReference.Get(typeCode); + this.typeKind = ktr.typeKind; + this.MetadataName = ktr.Name + (ktr.TypeParameterCount > 0 ? "`" + ktr.TypeParameterCount : ""); } IReadOnlyList ITypeDefinition.NestedTypes => EmptyList.Instance; @@ -164,6 +166,8 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation public FullTypeName FullTypeName => KnownTypeReference.Get(typeCode).TypeName; + public string MetadataName { get; } + ITypeDefinition IEntity.DeclaringTypeDefinition => null; IType ITypeDefinition.DeclaringType => null; IType IType.DeclaringType => null;