void DoDisassemble(IDnlibDef item, ITextOutput output, ReflectionDisassembler disassembler) { if (item is ModuleDef) { var module = (ModuleDef)item; disassembler.WriteAssemblyReferences(module); if (module.Assembly != null) { disassembler.WriteAssemblyHeader(module.Assembly); } output.WriteLine(); disassembler.WriteModuleHeader(module); } else if (item is TypeDef) { disassembler.DisassembleType((TypeDef)item); } else if (item is MethodDef) { disassembler.DisassembleMethod((MethodDef)item); } else if (item is FieldDef) { disassembler.DisassembleField((FieldDef)item); } else if (item is PropertyDef) { disassembler.DisassembleProperty((PropertyDef)item); } else if (item is EventDef) { disassembler.DisassembleEvent((EventDef)item); } }
public static string Disassemble <T>(this T member) where T : class, IMemberDefinition { var writer = new PlainTextOutput(); var dasm = new ReflectionDisassembler(writer); if (typeof(T) == typeof(EventDefinition)) { dasm.DisassembleEvent(member as EventDefinition); } else if (typeof(T) == typeof(FieldDefinition)) { dasm.DisassembleField(member as FieldDefinition); } else if (typeof(T) == typeof(PropertyDefinition)) { dasm.DisassembleProperty(member as PropertyDefinition); } else if (typeof(T) == typeof(MethodDefinition)) { dasm.DisassembleMethod(member as MethodDefinition); } else if (typeof(T) == typeof(TypeDefinition)) { dasm.DisassembleType(member as TypeDefinition); } else { throw new NotImplementedException($"the type {typeof(T).FullName} cannot be disassembled."); } return(writer.ToString()); }
void DoDisassemble(IDnlibDef item, ITextOutput output, ReflectionDisassembler disassembler) { if (item is ModuleDef) { var module = (ModuleDef)item; disassembler.WriteAssemblyReferences(module); if (module.Assembly != null) disassembler.WriteAssemblyHeader(module.Assembly); output.WriteLine(); disassembler.WriteModuleHeader(module); } else if (item is TypeDef) { disassembler.DisassembleType((TypeDef)item); } else if (item is MethodDef) { disassembler.DisassembleMethod((MethodDef)item); } else if (item is FieldDef) { disassembler.DisassembleField((FieldDef)item); } else if (item is PropertyDef) { disassembler.DisassembleProperty((PropertyDef)item); } else if (item is EventDef) { disassembler.DisassembleEvent((EventDef)item); } }
public static bool Write(IDecompilerOutput output, IMemberRef member) { var method = member as IMethod; if (method != null && method.IsMethod) { method.WriteMethodTo(output); return true; } var field = member as IField; if (field != null && field.IsField) { field.WriteFieldTo(output); return true; } var prop = member as PropertyDef; if (prop != null) { var dis = new ReflectionDisassembler(output, false, new DisassemblerOptions(new System.Threading.CancellationToken(), null)); dis.DisassembleProperty(prop, false); return true; } var evt = member as EventDef; if (evt != null) { var dis = new ReflectionDisassembler(output, false, new DisassemblerOptions(new System.Threading.CancellationToken(), null)); dis.DisassembleEvent(evt, false); return true; } var type = member as ITypeDefOrRef; if (type != null) { type.WriteTo(output, ILNameSyntax.TypeName); return true; } return false; }
public static bool Write(ITextOutput output, IMemberRef member) { var method = member as IMethod; if (method != null && method.IsMethod) { method.WriteMethodTo(output); return(true); } var field = member as IField; if (field != null && field.IsField) { field.WriteFieldTo(output); return(true); } var prop = member as PropertyDef; if (prop != null) { var dis = new ReflectionDisassembler(output, false, new DisassemblerOptions(new System.Threading.CancellationToken(), null)); dis.DisassembleProperty(prop, false); return(true); } var evt = member as EventDef; if (evt != null) { var dis = new ReflectionDisassembler(output, false, new DisassemblerOptions(new System.Threading.CancellationToken(), null)); dis.DisassembleEvent(evt, false); return(true); } var type = member as ITypeDefOrRef; if (type != null) { type.WriteTo(output, ILNameSyntax.TypeName); return(true); } return(false); }
public override void DecompileEvent(EventDefinition ev, ITextOutput output, DecompilationOptions options) { ReflectionDisassembler rd = new ReflectionDisassembler(output, detectControlStructure, options.CancellationToken); rd.DisassembleEvent(ev); if (ev.AddMethod != null) { output.WriteLine(); rd.DisassembleMethod(ev.AddMethod); } if (ev.RemoveMethod != null) { output.WriteLine(); rd.DisassembleMethod(ev.RemoveMethod); } foreach (var m in ev.OtherMethods) { output.WriteLine(); rd.DisassembleMethod(m); } }
public override void DecompileEvent(EventDef ev, ITextOutput output, DecompilationOptions options) { ReflectionDisassembler rd = CreateReflectionDisassembler(output, options, ev); rd.DisassembleEvent(ev); if (ev.AddMethod != null) { output.WriteLine(); rd.DisassembleMethod(ev.AddMethod); } if (ev.RemoveMethod != null) { output.WriteLine(); rd.DisassembleMethod(ev.RemoveMethod); } foreach (var m in ev.OtherMethods) { output.WriteLine(); rd.DisassembleMethod(m); } }
public override void DecompileEvent(EventDefinition ev, ITextOutput output, DecompilationOptions options) { ReflectionDisassembler rd = new ReflectionDisassembler(output, detectControlStructure, options.CancellationToken); rd.DisassembleEvent(ev); if (ev.AddMethod != null) { output.WriteLine(); rd.DisassembleMethod(ev.AddMethod); } if (ev.RemoveMethod != null) { output.WriteLine(); rd.DisassembleMethod(ev.RemoveMethod); } foreach (var m in ev.OtherMethods) { output.WriteLine(); rd.DisassembleMethod(m); } }
public override void Decompile(EventDef ev, IDecompilerOutput output, DecompilationContext ctx) { ReflectionDisassembler rd = CreateReflectionDisassembler(output, ctx, ev); rd.DisassembleEvent(ev, addLineSep: true); if (ev.AddMethod != null) { output.WriteLine(); rd.DisassembleMethod(ev.AddMethod, true); } if (ev.RemoveMethod != null) { output.WriteLine(); rd.DisassembleMethod(ev.RemoveMethod, true); } foreach (var m in ev.OtherMethods) { output.WriteLine(); rd.DisassembleMethod(m, true); } }
public static bool Write(IDecompilerOutput output, IMemberRef member) { if (member is IMethod method && method.IsMethod) { method.WriteMethodTo(output); return(true); } if (member is IField field && field.IsField) { field.WriteFieldTo(output); return(true); } if (member is PropertyDef prop) { var dis = new ReflectionDisassembler(output, false, new DisassemblerOptions(0, new System.Threading.CancellationToken(), null)); dis.DisassembleProperty(prop, false); return(true); } if (member is EventDef evt) { var dis = new ReflectionDisassembler(output, false, new DisassemblerOptions(0, new System.Threading.CancellationToken(), null)); dis.DisassembleEvent(evt, false); return(true); } if (member is ITypeDefOrRef type) { type.WriteTo(output, ILNameSyntax.TypeName); return(true); } return(false); }