Exemplo n.º 1
0
        private BacktrackResult BacktrackingSearchFromInstanceProperty(Triple startTriple,
                                                                       Triple triple,
                                                                       ISourceDetector nameSourceDetector,
                                                                       AssignmentTree assignmentTree,
                                                                       AssignmentTreeNode lastNode,
                                                                       BacktrackCounter counter,
                                                                       bool inReturnScope,
                                                                       ExploreTreeNode exploreTreeNode,
                                                                       int depth)
        {
            Print("Check for instance property assignments", depth);
            var result = BacktrackResult.BranchFailure;

            var instanceMemberAssignments = _tripleStore.GetToViaInstanceOwnerKey(triple.To.InstanceOwnerKey);

            if (instanceMemberAssignments.Any())
            {
                if (instanceMemberAssignments.Count() > 1 && instanceMemberAssignments.Any(x => x.ParentAssembly.Equals(triple.ParentAssembly)))
                {
                    instanceMemberAssignments = instanceMemberAssignments.Where(x => x.ParentAssembly.Equals(triple.ParentAssembly)).ToList();
                }

                foreach (var instanceAssignment in instanceMemberAssignments)
                {
                    if (instanceAssignment.To.ObjectKey.Equals(startTriple.To.ObjectKey))
                    {
                        continue;
                    }

                    var childExploreTreeNode = CreateExploreTreeNode(instanceAssignment, "InstanceMemberAssignment", exploreTreeNode);
                    var assignmentNode       = new AssignmentTreeNode(instanceAssignment);
                    assignmentNode.IsRegressionToInstance = true;
                    Print("Gone to instance property assignment " + instanceAssignment, depth);
                    var branchResult = BacktrackingSearch(startTriple, instanceAssignment, nameSourceDetector, counter, assignmentTree, assignmentNode, inReturnScope, childExploreTreeNode, depth);
                    if (branchResult == BacktrackResult.Success)
                    {
                        lastNode.Children.Add(assignmentNode);
                        result = BacktrackResult.Success;
                    }
                    else if (branchResult == BacktrackResult.Stop)
                    {
                        return(branchResult);
                    }
                }
            }

            return(result);
        }