2017-03-13 56 views
0

是否有任何方法或解決方法可以按照使用任何Roslyn方法在file/class內執行的順序獲取SyntaxTree節點。入口方法是已知的。按照使用Roslyn的執行順序獲取語法樹節點

例子:

class myClass 
{ 
    void EntryMethod() { 
     CallMethod1(); 
     CallMethod2(); 
     AnotherMethod(); 
     CallMethod3(); 
    } 

    void AnotherMethod() 
    { 
     CallMethod4(); 
     CallMethod5(); 
    } 
} 

所需的結果是這樣的:

List<ExpressionStatementSyntax or InvocationExpressionSyntax> 
{CallMethod1, CallMethod2, CallMethod4, CallMethod5, CallMethod3} 
+0

如果你有循環或if語句怎麼辦?這相當於停機問題。 – SLaks

+0

@SLaks我認爲在我的情況下,在一個方法內的外觀順序就足夠了 –

+0

然後你可以用一個簡單的DFS自己做。雖然,請注意遞歸。 – SLaks

回答

1

有沒有內置的API爲這一點,因爲它是在一般情況下是不可能的。儘管你可以使用基本的Roslyn API自己編寫代碼。

+0

我正在嘗試使用基本的Roslyn API,請查看https://gist.github.com/rchaser/37b03d32a7de4e668203de5069939a26 我認爲我嘗試這樣做的方式完全錯誤。我知道代碼不好,但它只是爲了得到主要想法而提出的草案 –