/// <summary> /// Check every type in the current Assembly. /// </summary> public void Run() { if (!_isInitialized) { throw new Exception("AssemblyAnalyzer must be initialized. Please Call Init() first."); } foreach (TypeDefinition type in Assembly.MainModule.Types) { HashSet <string> unsupportedMethodsInCurrentType; _unsupportedMethodsInCurrentAssembly.TryGetValue(type.Name, out unsupportedMethodsInCurrentType); //we want to check the type only if we know there is unsupported stuff in it. if (unsupportedMethodsInCurrentType != null) { ClassAnalyzer.Set(type, unsupportedMethodsInCurrentType);//, 0); ClassAnalyzer.Run(); } } }
/// <summary> /// Initialize the AssemblyAnalyzer. Must be call once (and only once). /// </summary> /// <param name="unsupportedMethods"></param> /// <param name="modules"></param> /// <param name="outputOptions"></param> private void Init(string coreASsemblyFolder, Dictionary <string, Dictionary <string, HashSet <string> > > unsupportedMethods, List <ModuleDefinition> modules, OutputOptions outputOptions = null) { if (!_isInitialized) { if (outputOptions == null) { _outputOptions = new OutputOptions(); } else { _outputOptions = outputOptions; } _unsupportedMethods = unsupportedMethods; _modules = modules; ClassAnalyzer = new ClassAnalyzer(coreASsemblyFolder, _unsupportedMethods, _modules, _outputOptions); _isInitialized = true; } }
/// <summary> /// Initialize the MethodAnalyzer. Must be call once. /// </summary> /// <param name="unsupportedMethods"></param> /// <param name="modules"></param> /// <param name="parentClassAnalyzer"></param> /// <param name="outputOptions"></param> private void Init(Dictionary <string, Dictionary <string, HashSet <string> > > unsupportedMethods, List <ModuleDefinition> modules, ClassAnalyzer parentClassAnalyzer, OutputOptions outputOptions = null) { if (!_isInitialized) { if (outputOptions == null) { _outputOptions = new OutputOptions(); } else { _outputOptions = outputOptions; } _implementedMethods = new Dictionary <string, Dictionary <string, HashSet <MethodSignature> > >(); _parentClassAnalyzer = parentClassAnalyzer; _unsupportedMethods = unsupportedMethods; _modules = modules; _declaringTypeHasAnIndexer = false; _isInitialized = true; } }
internal MethodAnalyzer(Dictionary <string, Dictionary <string, HashSet <string> > > unsupportedMethods, List <ModuleDefinition> modules, ClassAnalyzer parentClassAnalyzer, OutputOptions outputOptions = null) { Init(unsupportedMethods, modules, parentClassAnalyzer, outputOptions); }