public List<AssemblyObject> Read(List<string> assemblies) { List<AssemblyObject> result = new List<AssemblyObject>(); foreach (string assembly in assemblies) { string directory = Directory.GetCurrentDirectory(); if (assembly.StartsWith("System")) { // TODO: This needs more love before we include .Net modules //directory = RuntimeEnvironment.GetRuntimeDirectory(); continue; } Mono.Cecil.AssemblyDefinition definition = Mono.Cecil.AssemblyDefinition.ReadAssembly(System.IO.Path.Combine(directory, assembly)); foreach (Mono.Cecil.ModuleDefinition module in definition.Modules) { foreach (Mono.Cecil.TypeDefinition type in module.Types) { string name = type.Name; string ns = type.Namespace; bool found = false; foreach (string allowed in _Namespaces) { if (ns.StartsWith(allowed)) { found = true; break; } } if (!found) { continue; } AssemblyObject working = result.FirstOrDefault(a => a.Namespace == ns); if (working == null) { working = new AssemblyObject() { Name = ns, Namespace = ns }; result.Add(working); } AssemblyObject o = new AssemblyObject() { Name = name, Namespace = ns }; if (type.HasFields) { foreach (Mono.Cecil.FieldDefinition f in type.Fields) { if (f.IsPublic) { string fname = f.Name; o.Fields.Add(new AssemblyObject() { Name = fname }); } } } if (type.HasProperties) { foreach (Mono.Cecil.PropertyDefinition p in type.Properties) { string pname = p.Name; o.Properties.Add(new AssemblyObject() { Name = pname }); } } if (type.HasMethods) { foreach (Mono.Cecil.MethodDefinition m in type.Methods) { if (m.IsPublic) { string mname = m.Name; if (!mname.StartsWith("get_") || !mname.StartsWith("set_")) { continue; } AssemblyObject mo = new AssemblyObject() { Name = mname }; if (m.HasParameters) { foreach (Mono.Cecil.ParameterDefinition r in m.Parameters) { string rname = r.Name; mo.Methods.Add(new AssemblyObject() { Name = rname }); } } o.Methods.Add(mo); } } } working.Children.Add(o); } } } return result; }
public List <AssemblyObject> Read(List <string> assemblies) { List <AssemblyObject> result = new List <AssemblyObject>(); foreach (string assembly in assemblies) { string directory = Directory.GetCurrentDirectory(); if (assembly.StartsWith("System")) { // TODO: This needs more love before we include .Net modules //directory = RuntimeEnvironment.GetRuntimeDirectory(); continue; } Mono.Cecil.AssemblyDefinition definition = Mono.Cecil.AssemblyDefinition.ReadAssembly(System.IO.Path.Combine(directory, assembly)); foreach (Mono.Cecil.ModuleDefinition module in definition.Modules) { foreach (Mono.Cecil.TypeDefinition type in module.Types) { string name = type.Name; string ns = type.Namespace; bool found = false; foreach (string allowed in _Namespaces) { if (ns.StartsWith(allowed)) { found = true; break; } } if (!found) { continue; } AssemblyObject working = result.FirstOrDefault(a => a.Namespace == ns); if (working == null) { working = new AssemblyObject() { Name = ns, Namespace = ns }; result.Add(working); } AssemblyObject o = new AssemblyObject() { Name = name, Namespace = ns }; if (type.HasFields) { foreach (Mono.Cecil.FieldDefinition f in type.Fields) { if (f.IsPublic) { string fname = f.Name; o.Fields.Add(new AssemblyObject() { Name = fname }); } } } if (type.HasProperties) { foreach (Mono.Cecil.PropertyDefinition p in type.Properties) { string pname = p.Name; o.Properties.Add(new AssemblyObject() { Name = pname }); } } if (type.HasMethods) { foreach (Mono.Cecil.MethodDefinition m in type.Methods) { if (m.IsPublic) { string mname = m.Name; if (!mname.StartsWith("get_") || !mname.StartsWith("set_")) { continue; } AssemblyObject mo = new AssemblyObject() { Name = mname }; if (m.HasParameters) { foreach (Mono.Cecil.ParameterDefinition r in m.Parameters) { string rname = r.Name; mo.Methods.Add(new AssemblyObject() { Name = rname }); } } o.Methods.Add(mo); } } } working.Children.Add(o); } } } return(result); }