Browse Source

Add MetadataToken property to type system.

pull/1108/head
Daniel Grunwald 7 years ago
parent
commit
bd85b7644b
  1. 4
      ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs
  2. 2
      ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs
  3. 3
      ICSharpCode.Decompiler/TypeSystem/CecilLoader.cs
  4. 19
      ICSharpCode.Decompiler/TypeSystem/IEntity.cs
  5. 4
      ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs
  6. 13
      ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedEntity.cs
  7. 4
      ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs
  8. 4
      ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs
  9. 2
      ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs

4
ICSharpCode.Decompiler/CSharp/Resolver/CSharpOperators.cs

@ -115,7 +115,9 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver @@ -115,7 +115,9 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
{
return null;
}
public Mono.Cecil.MetadataToken MetadataToken => default(Mono.Cecil.MetadataToken);
ITypeDefinition IEntity.DeclaringTypeDefinition {
get { return null; }
}

2
ICSharpCode.Decompiler/CSharp/Resolver/ReducedExtensionMethod.cs

@ -271,6 +271,8 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver @@ -271,6 +271,8 @@ namespace ICSharpCode.Decompiler.CSharp.Resolver
#region IEntity implementation
public Mono.Cecil.MetadataToken MetadataToken => baseMethod.MetadataToken;
public SymbolKind SymbolKind {
get {
return baseMethod.SymbolKind;

3
ICSharpCode.Decompiler/TypeSystem/CecilLoader.cs

@ -841,6 +841,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -841,6 +841,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
{
string name = ReflectionHelper.SplitTypeParameterCountFromReflectionName(typeDefinition.Name);
var td = new DefaultUnresolvedTypeDefinition(typeDefinition.Namespace, name);
td.MetadataToken = typeDefinition.MetadataToken;
if (typeDefinition.HasGenericParameters)
InitTypeParameters(typeDefinition, td.TypeParameters);
return td;
@ -1109,6 +1110,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -1109,6 +1110,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
{
this.loader = loader;
this.cecilTypeDef = typeDefinition;
this.MetadataToken = typeDefinition.MetadataToken;
this.SymbolKind = SymbolKind.TypeDefinition;
this.namespaceName = typeDefinition.Namespace;
this.Name = ReflectionHelper.SplitTypeParameterCountFromReflectionName(typeDefinition.Name);
@ -1695,6 +1697,7 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -1695,6 +1697,7 @@ namespace ICSharpCode.Decompiler.TypeSystem
#region FinishReadMember / Interning
void FinishReadMember(AbstractUnresolvedMember member, MemberReference cecilDefinition)
{
member.MetadataToken = cecilDefinition.MetadataToken;
member.ApplyInterningProvider(interningProvider);
member.Freeze();
RegisterCecilObject(member, cecilDefinition);

19
ICSharpCode.Decompiler/TypeSystem/IEntity.cs

@ -26,6 +26,15 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -26,6 +26,15 @@ namespace ICSharpCode.Decompiler.TypeSystem
/// </summary>
public interface IUnresolvedEntity : INamedElement, IHasAccessibility
{
/// <summary>
/// Gets the metadata token for this entity.
/// </summary>
/// <remarks>
/// The token is only valid within the context of the assembly defining this entity.
/// Token may be 0 if this is a generated member.
/// </remarks>
Mono.Cecil.MetadataToken MetadataToken { get; }
/// <summary>
/// Gets the entity type.
/// </summary>
@ -77,6 +86,16 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -77,6 +86,16 @@ namespace ICSharpCode.Decompiler.TypeSystem
/// </summary>
public interface IEntity : ISymbol, ICompilationProvider, INamedElement, IHasAccessibility
{
/// <summary>
/// Gets the metadata token for this entity.
/// </summary>
/// <remarks>
/// The token is only valid within the context of the assembly defining this entity.
/// Token may be 0 if this is a generated member.
/// Note: specialized members will return the token of the member definition.
/// </remarks>
Mono.Cecil.MetadataToken MetadataToken { get; }
/// <summary>
/// Gets the short name of the entity.
/// </summary>

4
ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractResolvedEntity.cs

@ -39,7 +39,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation @@ -39,7 +39,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
this.parentContext = parentContext;
this.Attributes = unresolved.Attributes.CreateResolvedAttributes(parentContext);
}
public Mono.Cecil.MetadataToken MetadataToken => unresolved.MetadataToken;
public SymbolKind SymbolKind {
get { return unresolved.SymbolKind; }
}

13
ICSharpCode.Decompiler/TypeSystem/Implementation/AbstractUnresolvedEntity.cs

@ -36,7 +36,8 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation @@ -36,7 +36,8 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
string name = string.Empty;
IList<IUnresolvedAttribute> attributes;
Mono.Cecil.MetadataToken metadataToken;
// 1 byte per enum + 2 bytes for flags
SymbolKind symbolKind;
Accessibility accessibility;
@ -119,7 +120,15 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation @@ -119,7 +120,15 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
{
FreezableHelper.ThrowIfFrozen(this);
}
public Mono.Cecil.MetadataToken MetadataToken {
get { return metadataToken; }
set {
ThrowIfFrozen();
metadataToken = value;
}
}
public SymbolKind SymbolKind {
get { return symbolKind; }
set {

4
ICSharpCode.Decompiler/TypeSystem/Implementation/DefaultResolvedTypeDefinition.cs

@ -111,7 +111,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation @@ -111,7 +111,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
public IReadOnlyList<IUnresolvedTypeDefinition> Parts {
get { return parts; }
}
public Mono.Cecil.MetadataToken MetadataToken => parts[0].MetadataToken;
public SymbolKind SymbolKind {
get { return parts[0].SymbolKind; }
}

4
ICSharpCode.Decompiler/TypeSystem/Implementation/SpecializedMember.cs

@ -153,7 +153,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation @@ -153,7 +153,9 @@ namespace ICSharpCode.Decompiler.TypeSystem.Implementation
this.returnType = value;
}
}
public Mono.Cecil.MetadataToken MetadataToken => baseMember.MetadataToken;
public bool IsVirtual {
get { return baseMember.IsVirtual; }
}

2
ICSharpCode.Decompiler/TypeSystem/VarArgInstanceMethod.cs

@ -118,6 +118,8 @@ namespace ICSharpCode.Decompiler.TypeSystem @@ -118,6 +118,8 @@ namespace ICSharpCode.Decompiler.TypeSystem
get { return baseMethod.TypeArguments; }
}
public Mono.Cecil.MetadataToken MetadataToken => baseMethod.MetadataToken;
public bool IsExtensionMethod {
get { return baseMethod.IsExtensionMethod; }
}

Loading…
Cancel
Save