Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 public CallExpressionExtractorVisitor(MethodExtractorObj extractorObj, ILineSplitter splitter)
 {
     ExtractorObj = extractorObj;
     Splitter     = splitter;
 }
Exemplo n.º 5
0
 public MethodExtractorVisitor(MethodExtractorObj extractorObj, ILineSplitter splitter, string type)
 {
     ExtractorObj = extractorObj;
     Splitter     = splitter;
     Type         = type;
 }