コード例 #1
0
        private BacktrackResult GoToBaseConstructor(Triple startTriple,
                                                    Triple triple,
                                                    ISourceDetector nameSourceDetector,
                                                    AssignmentTree assignmentTree,
                                                    AssignmentTreeNode lastNode,
                                                    BacktrackCounter counter,
                                                    bool inReturnScope,
                                                    ExploreTreeNode exploreTreeNode,
                                                    int depth)
        {
            var baseClass      = triple.To.InheritsFromConcreteClass;
            var baseClassCtors = _tripleStore.GetAllTriples().Where(x => x.To.ObjectKey.IndexOf(baseClass) > -1 &&
                                                                    x.To.ObjectKey.IndexOf(".ctor") > -1);

            foreach (var baseClassCtorTriple in baseClassCtors)
            {
                if (baseClassCtorTriple.To.InstanceOwnerKey.Equals(triple.To.MemberName))
                {
                    var childExploreTreeNode = CreateExploreTreeNode(baseClassCtorTriple, "ViaBaseConstructor", exploreTreeNode);
                    var branchResult         = BacktrackingSearchMatches(startTriple, triple, new List <Triple>()
                    {
                        baseClassCtorTriple
                    }, nameSourceDetector, assignmentTree, lastNode, counter, inReturnScope, true, childExploreTreeNode, depth);
                    if (branchResult != BacktrackResult.BranchFailure)
                    {
                        return(branchResult);
                    }
                }
            }

            return(BacktrackResult.BranchFailure);
        }