private async Task GetInitialCodeExecutionPaths(Solution solution, IProgress <ExtractionProgress> progressIndicator) { Dictionary <MethodDeclarationSyntax, HashSet <ISymbol> > methodDecAndTheirSymbolsContainingDbAccessingMethodCalls = GetMethodDeclarationsAndTheirSymbolsForDbAccessingMethodCalls(); //int totalForProgress = GetTotalAmountForProgress(solution, methodDecAndTheirSymbolsContainingDbAccessingMethodCalls); //int counter = 0; foreach (var project in solution.Projects) { foreach (var document in project.Documents) { // counter++; //progressIndicator.Report(new ExtractionProgress(counter * 100 / totalForProgress)); SyntaxNode root = await document.GetSyntaxRootAsync(); SemanticModel semanticModel = await document.GetSemanticModelAsync(); var invocations = root.DescendantNodes().OfType <InvocationExpressionSyntax>(); foreach (var methodDeclarationAndSymbol in methodDecAndTheirSymbolsContainingDbAccessingMethodCalls) { if (invocations != null && invocations.Count() > 0) { foreach (var symbolToMethodDeclarationOnClassOrInterface in methodDeclarationAndSymbol.Value) { var methodInvocations = invocations.Where(i => semanticModel.GetSymbolInfo(i).Symbol == symbolToMethodDeclarationOnClassOrInterface); foreach (var invocation in methodInvocations) { var methodCall = new MethodCall(methodDeclarationAndSymbol.Key, invocation.GetCompilationInfo(semanticModel)); CodeExecutionPath codeExecutionPath = new CodeExecutionPath(); codeExecutionPath.AddModel(methodCall); CodeExecutionPaths.Add(codeExecutionPath); } } } } } } }
public OneByOneProcessingAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel) : base(codeExecutionPath, referenceModel) { }
public SlowBulkUpdateAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel) : base(codeExecutionPath, referenceModel) { }
public InefficientLazyLoadingAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel) : base(codeExecutionPath, referenceModel) { }
public DuplicateObjectTrackingAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel) : base(codeExecutionPath, referenceModel) { }
public SameQueryExecutionAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel) : base(codeExecutionPath, referenceModel) { }
public bool AppliesToModelTree(CodeExecutionPath codeExecutionPath) { this.CodeExecutionPath = codeExecutionPath; return(GetRuleFunction().Invoke()); }
public AntiPatternBase(CodeExecutionPath codeExecutionPath, Model referenceModel) { CodeExecutionPath = codeExecutionPath; ReferenceModel = referenceModel; }
public UnnecessaryObjectTrackingAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel) : base(codeExecutionPath, referenceModel) { }
internal CodeExecutionPathGenerator() { _codeExecutionPath = new CodeExecutionPath(); }
public ExcessiveDataAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel) : base(codeExecutionPath, referenceModel) { }