private static FanoutSearchDescriptor ConstructFanoutSearchDescriptor(List <FSDescCallchainElement> fs_callchain) { FanoutSearchDescriptor fs_desc = ConstructFanoutSearchOrigin(fs_callchain.First()); for (int idx = 1; idx < fs_callchain.Count; ++idx) { FSDescCallchainElement visitNode = fs_callchain[idx]; FSDescCallchainElement followEdge = null; FanoutSearch.Action defaultAction = Action.Continue; if (visitNode.Method == s_LIKQ_FollowEdge) { ThrowIf(++idx >= fs_callchain.Count, "The query expression cannot end with '" + s_LIKQ_FollowEdge + "'", visitNode.SyntaxNode); followEdge = visitNode; visitNode = fs_callchain[idx]; if (visitNode.Method == s_LIKQ_FollowEdge) { // two consequtive FollowEdge, use default traverse action. --idx; visitNode = null; } } if (idx + 1 >= fs_callchain.Count) { // The last element should have default action Action.Return defaultAction = Action.Return; } ThrowIf(visitNode.Method != s_LIKQ_VisitNode, "Expecting '" + s_LIKQ_VisitNode + "'", visitNode.SyntaxNode); fs_desc = ConstructFanoutSearchBody(fs_desc, visitNode, followEdge, defaultAction); } return(fs_desc); }
public void Test16() { FanoutSearch.Action a = FanoutSearch.Action.Continue, b = FanoutSearch.Action.Return; var paths = KnowledgeGraph.StartFrom(1).VisitNode(_ => a & b); paths.ToList(); }