public AbstractSyntaxTreeNode GatherCallExpressions(MethodExtractorObj obj, AbstractSyntaxTreeNode methodNode, AbstractSyntaxTreeNode root, string methodHashCode) { var hasCodes = new List <string>(); foreach (var callExpressionNode in obj.CallExpressions) { var visitor = new AbstractSyntaxTreeWordSearchVisitor(Splitter, "MemberExpr"); callExpressionNode.BreadthFirst(visitor); if (!visitor.Found) { continue; } var hashCode = Splitter.Split(visitor.Node.Value).Last(); if (hashCode.Equals(methodHashCode) || hasCodes.Contains(hashCode)) { continue; } hasCodes.Add(hashCode); var callNode = GetCallNodeOrDefault(root, hashCode); if (callNode == null) { continue; } methodNode.Append(callNode); } return(methodNode); }
public AbstractSyntaxTreeNode ExtractOrDefault(AbstractSyntaxTreeNode root, MethodDeclaration methodDeclaration) { var extractorObj = new MethodExtractorObj(); var methodExtractorVisitor = new MethodExtractorVisitor(extractorObj, Splitter, methodDeclaration.AstType); root.PreOrder(methodExtractorVisitor); var methodNode = GetMethodOrDefault(extractorObj, methodDeclaration, out var hashCode); if (methodNode == null) { return(null); } var callExpressionExtractorVisitor = new CallExpressionExtractorVisitor(extractorObj, Splitter); methodNode.PreOrder(callExpressionExtractorVisitor); var node = GatherCallExpressions(extractorObj, methodNode, root, hashCode); return(node); }
public AbstractSyntaxTreeNode GetMethodOrDefault(MethodExtractorObj obj, MethodDeclaration methodDeclaration, out string hashCode) { var root = new AbstractSyntaxTreeNode("Root"); foreach (var methodNode in obj.Methods) { if (!NodeIsMethod(methodNode, methodDeclaration)) { continue; } hashCode = GetMethodHashCodeOrDefault(methodNode, methodDeclaration.AstType); if (hashCode == null) { continue; } if (methodNode.Value.EndsWith("default")) { root.Append(methodNode); return(root); } var visitor = new AbstractSyntaxTreeWordSearchVisitor(Splitter, "CompoundStmt"); methodNode.BreadthFirst(visitor); if (!visitor.Found) { continue; } root.Append(methodNode); return(root); } hashCode = null; return(null); }
public CallExpressionExtractorVisitor(MethodExtractorObj extractorObj, ILineSplitter splitter) { ExtractorObj = extractorObj; Splitter = splitter; }
public MethodExtractorVisitor(MethodExtractorObj extractorObj, ILineSplitter splitter, string type) { ExtractorObj = extractorObj; Splitter = splitter; Type = type; }