private void WriteMethodLocals(MethodDefinition definition, ISourceCodeOutput output) { if (definition == null || !definition.HasBody || !definition.Body.InitLocals) { return; } var body = definition.Body; output.WriteLine(".locals init ("); output.Indent(); for (int i = 0; i < body.Variables.Count; i++) { var variable = body.Variables[i]; if (i > 0) { output.WriteLine(","); } output.Write("[{0}] {1} {2}", variable.Index, variable.VariableType.ToShortTypeName(), variable); } output.WriteLine(")"); output.Unindent(); }
private void CloseBlock(ISourceCodeOutput output) { output.Unindent(); output.WriteLine("}"); }
public void WriteType(TypeDefinition definition, ISourceCodeOutput output, DecompilerOptions options) { output.WriteDefinition(".class ", definition); //if (definition.IsClass || definition.IsInterface) builder.AppendFormat("{0}.class ", indent); if (definition.IsPublic || definition.IsNestedPublic) { output.Write("public "); } if (definition.IsNotPublic || definition.IsNestedPrivate) { output.Write("private "); } if (definition.IsInterface) { output.Write("interface "); } if (definition.IsAbstract) { output.Write("abstract "); } if (definition.IsSequentialLayout) { output.Write("sequential "); } if (definition.IsAutoLayout) { output.Write("auto "); } if (definition.IsAnsiClass) { output.Write("ansi "); } if (definition.IsSealed) { output.Write("sealed "); } if (definition.IsNested) { output.Write("nested "); } if (definition.IsNestedFamily) { output.Write("family "); } if (definition.IsBeforeFieldInit) { output.Write("beforefieldinit "); } output.Write(definition.ToShortTypeName()); if (definition.BaseType != null) { output.WriteLine(); output.Indent(); output.Write("extends {0}", definition.BaseType.ToShortTypeName()); output.Unindent(); } if (definition.HasInterfaces) { output.WriteLine(); output.Indent(); output.Write("implements "); for (int i = 0; i < definition.Interfaces.Count; i++) { if (i > 0) { output.Write(", "); } output.Write(definition.Interfaces[i].FullName); } output.Unindent(); } OpenBlock(output); if (definition.HasCustomAttributes) { WriteCustomAttributes(definition.CustomAttributes, output); output.WriteLine(); } if (options != null && options.FullDecompilation) { if (definition.HasNestedTypes) { foreach (var nestedType in definition.NestedTypes.OrderBy(t => t.Name)) { WriteType(nestedType, output, options); output.WriteLine(); } } if (definition.HasMethods) { foreach (var method in definition.Methods.OrderBy(m => m.Name)) { if (method.IsGetter || method.IsSetter) { continue; } if (method.IsAddOn || method.IsRemoveOn) { continue; } WriteMethod(method, output, null); output.WriteLine(); } } if (definition.HasProperties) { foreach (var property in definition.Properties.OrderBy(p => p.Name)) { WriteProperty(property, output, null); output.WriteLine(); } } if (definition.HasEvents) { foreach (var eventDefinition in definition.Events.OrderBy(e => e.Name)) { WriteEvent(eventDefinition, output, null); output.WriteLine(); } } if (definition.HasFields) { foreach (var field in definition.Fields.OrderBy(f => f.Name)) { WriteField(field, output, null); output.WriteLine(); } } } CloseBlock(output); }
public void WriteType(TypeDefinition definition, ISourceCodeOutput output, DecompilerOptions options) { output.WriteDefinition(".class ", definition); //if (definition.IsClass || definition.IsInterface) builder.AppendFormat("{0}.class ", indent); if (definition.IsPublic || definition.IsNestedPublic) output.Write("public "); if (definition.IsNotPublic || definition.IsNestedPrivate) output.Write("private "); if (definition.IsInterface) output.Write("interface "); if (definition.IsAbstract) output.Write("abstract "); if (definition.IsSequentialLayout) output.Write("sequential "); if (definition.IsAutoLayout) output.Write("auto "); if (definition.IsAnsiClass) output.Write("ansi "); if (definition.IsSealed) output.Write("sealed "); if (definition.IsNested) output.Write("nested "); if (definition.IsNestedFamily) output.Write("family "); if (definition.IsBeforeFieldInit) output.Write("beforefieldinit "); output.Write(definition.ToShortTypeName()); if (definition.BaseType != null) { output.WriteLine(); output.Indent(); output.Write("extends {0}", definition.BaseType.ToShortTypeName()); output.Unindent(); } if (definition.HasInterfaces) { output.WriteLine(); output.Indent(); output.Write("implements "); for (int i = 0; i < definition.Interfaces.Count; i++) { if (i > 0) output.Write(", "); output.Write(definition.Interfaces[i].FullName); } output.Unindent(); } OpenBlock(output); if (definition.HasCustomAttributes) { WriteCustomAttributes(definition.CustomAttributes, output); output.WriteLine(); } if (options != null && options.FullDecompilation) { if (definition.HasNestedTypes) { foreach (var nestedType in definition.NestedTypes.OrderBy(t => t.Name)) { WriteType(nestedType, output, options); output.WriteLine(); } } if (definition.HasMethods) { foreach (var method in definition.Methods.OrderBy(m => m.Name)) { if (method.IsGetter || method.IsSetter) continue; if (method.IsAddOn || method.IsRemoveOn) continue; WriteMethod(method, output, null); output.WriteLine(); } } if (definition.HasProperties) { foreach (var property in definition.Properties.OrderBy(p => p.Name)) { WriteProperty(property, output, null); output.WriteLine(); } } if (definition.HasEvents) { foreach (var eventDefinition in definition.Events.OrderBy(e => e.Name)) { WriteEvent(eventDefinition, output, null); output.WriteLine(); } } if (definition.HasFields) { foreach (var field in definition.Fields.OrderBy(f => f.Name)) { WriteField(field, output, null); output.WriteLine(); } } } CloseBlock(output); }
private void WriteMethodLocals(MethodDefinition definition, ISourceCodeOutput output) { if (definition == null || !definition.HasBody || !definition.Body.InitLocals) return; var body = definition.Body; output.WriteLine(".locals init ("); output.Indent(); for (int i = 0; i < body.Variables.Count; i++) { var variable = body.Variables[i]; if (i > 0) output.WriteLine(","); output.Write("[{0}] {1} {2}", variable.Index, variable.VariableType.ToShortTypeName(), variable); } output.WriteLine(")"); output.Unindent(); }