Ejemplo n.º 1
0
        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)
 {
 }
Ejemplo n.º 3
0
 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)
 {
 }
Ejemplo n.º 6
0
 public SameQueryExecutionAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel)
     : base(codeExecutionPath, referenceModel)
 {
 }
Ejemplo n.º 7
0
 public bool AppliesToModelTree(CodeExecutionPath codeExecutionPath)
 {
     this.CodeExecutionPath = codeExecutionPath;
     return(GetRuleFunction().Invoke());
 }
 public AntiPatternBase(CodeExecutionPath codeExecutionPath, Model referenceModel)
 {
     CodeExecutionPath = codeExecutionPath;
     ReferenceModel    = referenceModel;
 }
Ejemplo n.º 9
0
 public UnnecessaryObjectTrackingAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel)
     : base(codeExecutionPath, referenceModel)
 {
 }
 internal CodeExecutionPathGenerator()
 {
     _codeExecutionPath = new CodeExecutionPath();
 }
 public ExcessiveDataAntiPattern(CodeExecutionPath codeExecutionPath, Model referenceModel)
     : base(codeExecutionPath, referenceModel)
 {
 }