public override void Decompile(ICSharpCode.ILSpy.Language language, ITextOutput output, ICSharpCode.ILSpy.DecompilationOptions options)
{
//Switches on the token
switch (_tokenProvider.MetadataToken.TokenType)
{
case TokenType.Module:
language.DecompileModule((ModuleDefinition)_tokenProvider, output, options);
break;
case TokenType.Assembly:
language.WriteCommentLine(output, ((AssemblyNameReference)_tokenProvider).FullName);
break;
case TokenType.TypeDef:
language.DecompileType((TypeDefinition)_tokenProvider, output, options);
break;
case TokenType.Field:
language.DecompileField((FieldDefinition)_tokenProvider, output, options);
break;
case TokenType.Method:
language.DecompileMethod((MethodDefinition)_tokenProvider, output, options);
break;
case TokenType.Event:
language.DecompileEvent((EventDefinition)_tokenProvider, output, options);
break;
case TokenType.Property:
language.DecompileProperty((PropertyDefinition)_tokenProvider, output, options);
break;
case TokenType.MemberRef:
var memberRef = (MemberReference)_tokenProvider;
if (memberRef.DeclaringType != null && memberRef.DeclaringType is GenericInstanceType)
{
var giType = (GenericInstanceType)memberRef.DeclaringType;
var type = giType.ElementType.Resolve();
var memberDef = type.Fields.Cast <IMemberDefinition>()
.Concat(type.Methods)
.Concat(type.Properties)
.Concat(type.Events)
.FirstOrDefault(m => m.Name == memberRef.Name);
if (memberDef != null)
{
new ILEditTreeNode(memberDef, true).Decompile(language, output, options);
}
}
break;
default:
language.WriteCommentLine(output, (string)this.Text);
break;
}
}