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); }