public MethodReferenceVisitor(TypeHandler typeHandler, DataCollector dataCollector, PdbLocator pdbLocator) { this.typeHandler = typeHandler ?? throw new ArgumentNullException(nameof(typeHandler)); this.dataCollector = dataCollector ?? throw new ArgumentNullException(nameof(dataCollector)); this.pdbLocator = pdbLocator ?? throw new ArgumentNullException(nameof(pdbLocator)); }
private void AddSymbolsFromBinary(string binary, bool resolveMainMethod = false) { string pdb = PdbLocator.FindPdbFile(binary, _settings.GetPathExtension(_executable), _logger); if (pdb == null) { _logger.DebugWarning($"No .pdb file found for '{binary}'"); return; } AddSymbolsFromBinary(binary, pdb, resolveMainMethod); }
private void AddSymbolsFromBinary(string binary) { string pdb = PdbLocator.FindPdbFile(binary, _pathExtension, _logger); if (pdb == null) { _logger.DebugWarning($"No .pdb file found for '{binary}'"); return; } AddSymbolsFromBinary(binary, pdb); }
public TypeHandler(Assembly[] assemblies, NamespaceFilter nameFilter, NamespaceFilter namespaceFollowFilter, DataCollector dataCollector, PdbLocator pdbLocator) { this.assemblies = assemblies; this.nameFilter = nameFilter; this.namespaceFollowFilter = namespaceFollowFilter; this.dataCollector = dataCollector; this.pdbLocator = pdbLocator; foreach (var assembly in assemblies) { Cache.CollectedAssemblies.Add(assembly, 1); } }
public void Index(string outputFileName) { // create the Sourcetrail data collector var dataCollector = new DataCollector(outputFileName); var pdbLocator = new PdbLocator(); // set up the type handler var typeHandler = new TypeHandler(assemblies, nameFilter, namespaceFollowFilter, dataCollector, pdbLocator); typeHandler.MethodCollected += (sender, args) => collectedMethods.Add(args.CollectedMethod); foreach (var assembly in assemblies) { Console.WriteLine("Indexing assembly {0}{1}", assembly.Location, Environment.NewLine); pdbLocator.AddAssembly(assembly); try { Console.WriteLine("Collecting types..."); // collect all types first foreach (var type in assembly.GetTypes()) { typeHandler.AddToDbIfValid(type); } } catch (Exception ex) { Console.WriteLine("Exception indexing assemby '{0}'\r\n{1}", assembly.Location, ex); } } Console.WriteLine("{1}Collected {0} types{1}", Cache.CollectedTypes.Count, Environment.NewLine); // set up the visitor for parsed methods var referenceVisitor = new MethodReferenceVisitor(typeHandler, dataCollector, pdbLocator); var ilParser = new ILParser(referenceVisitor); referenceVisitor.ParseMethod += (sender, args) => CollectReferencesFromILCode( ilParser, args.CollectedMethod.Method, args.CollectedMethod.MethodId, args.CollectedMethod.ClassId); // parse IL of colected methods HandleCollectedMethods(ilParser); dataCollector.Dispose(); }