public async Task ExtractsORMModelTree_When_MethodHasADbAccessingMethodCallStatement() { //Arrange var solGen = new RoslynComplexSolutionGenerator(); var solution = solGen.GetRoslynSolution(); SyntaxNode rootNodeCustomerRepository = await solGen.GetRootNodeForCustomerRepositoryClassDocument(); IEnumerable <MethodDeclarationSyntax> methodDeclarations = rootNodeCustomerRepository.DescendantNodes().OfType <MethodDeclarationSyntax>(); SemanticModel model = await solGen.GetSemanticModelForCustomerRepositoryClass(); await ExtractEntityDeclarations(solution); var dbQueryExtractor = new LINQToSQLDatabaseQueryExtractor(model, dbEntityDeclarations); dbQueryExtractor.Visit(rootNodeCustomerRepository); var databaseQueries = dbQueryExtractor.DatabaseQueries; target = new RoslynORMModelTreeExtractor(databaseQueries); //Act ORMModelTree result = target.Extract(methodDeclarations.First()); //Assert Assert.IsTrue(result.RootNode.Model is MethodDeclaration); Assert.IsTrue((result.RootNode as MethodDeclaration).MethodName == "GetCustomer"); Assert.IsTrue(result.RootNode.ChildNodes[0] is DatabaseAccessingMethodCallStatement <LINQToSQL>); }
public ORMModelTreeGenerator() { var rootMethodDeclaration = new MethodDeclaration("Main", null); var rootNode = new ORMModelNode(rootMethodDeclaration); Tree = new ORMModelTree(rootNode); }
private void Visit(MethodDeclarationBase model) { if (this.ORMModelTree.RootNode != null) { throw new ArgumentException("There can only be one MethodDeclaration in an ORMModelTree."); } var rootNode = new ORMModelNode(model); this.ORMModelTree = new ORMModelTree(rootNode); SetLastVisitedNode(rootNode); }
public ORMModelTree Extract(MethodDeclarationSyntax methodDeclarationSyntaxNode) { var methodDeclaration = new MethodDeclaration(methodDeclarationSyntaxNode.Identifier.Text, methodDeclarationSyntaxNode.GetCompilationInfo()); this._ORMModelTree = new ORMModelTree(new ORMModelNode(methodDeclaration)); var extractor = new LINQToSQLDatabaseAccessingMethodCallExtractor(null, null, _databaseQueries.ToList(), null, null, null); extractor.Visit(methodDeclarationSyntaxNode); foreach (var dbAccessingMethodCall in extractor.DatabaseAccessingMethodCalls) { var ORMModelNode = new ORMModelNode(dbAccessingMethodCall); _ORMModelTree.RootNode.ChildNodes.Add(ORMModelNode); } return(_ORMModelTree); }
private async Task GenerateORMModelTreeForEachDatabaseAccessingMethodAsync(Solution solution) { await Task.Run(() => { foreach (var databaseAccessingMethodCallSyntaxNode in DatabaseAccessingMethodCalls.Values) { SyntaxNode parentMethodDeclaration = databaseAccessingMethodCallSyntaxNode.Parent; while (!(parentMethodDeclaration is MethodDeclarationSyntax)) { parentMethodDeclaration = parentMethodDeclaration.Parent; } var modelTreeExtractor = new RoslynORMModelTreeExtractor(this.DatabaseQueries); ORMModelTree tree = modelTreeExtractor.Extract((MethodDeclarationSyntax)parentMethodDeclaration); ORMModelTrees.Add(tree); } } ); }
public ExecutionCodePathGenerator() { ORMModelTree = new ORMModelTree(); }