Ejemplo n.º 1
0
        public IList <AssignmentTree> PerformBacktrackingSearch(Instruction instruction, MethodDefinition methodOfInstruction,
                                                                ISourceDetector nameSourceDetector,
                                                                List <GoToInstancePattern> permittedToGoInstancePatterns,
                                                                List <string> searchBaseConstructorPatterns)
        {
            _goToInstancePatterns          = permittedToGoInstancePatterns;
            _searchBaseConstructorPatterns = searchBaseConstructorPatterns;

            var assignmentTrees = new List <AssignmentTree>();

            CreateStartTraceSection(methodOfInstruction.FullName + " : " + instruction);

            var instructionKey = InstructionKeyService.GetInstructionKey(instruction, methodOfInstruction);
            var startingKeys   = _tripleStore.GetToViaInstructionKey(instructionKey);

            foreach (var start in startingKeys)
            {
                Print(instructionKey, 0);

                var exploreTreeNode = new ExploreTreeNode()
                {
                    FullSignature = start.ToString()
                };
                var rootNode       = new AssignmentTreeNode(start);
                var assignmentTree = new AssignmentTree();
                assignmentTree.RootNode = rootNode;
                var counter = new BacktrackCounter();

                _instructionKeyStack = new Stack <string>();
                BacktrackingSearch(start, start, nameSourceDetector, counter, assignmentTree, rootNode, false, exploreTreeNode, 0);

                assignmentTrees.Add(assignmentTree);
            }



            return(assignmentTrees);
        }