C# 使用Roslyn按执行顺序获取语法树节点
是否有任何方法或解决方法可以使用Roslyn的任何方法在文件/类中按执行顺序获取SyntaxTree节点。输入方法是已知的 例如:C# 使用Roslyn按执行顺序获取语法树节点,c#,.net,roslyn,C#,.net,Roslyn,是否有任何方法或解决方法可以使用Roslyn的任何方法在文件/类中按执行顺序获取SyntaxTree节点。输入方法是已知的 例如: class myClass { void EntryMethod() { CallMethod1(); CallMethod2(); AnotherMethod(); CallMethod3(); } void AnotherMethod() { C
class myClass
{
void EntryMethod() {
CallMethod1();
CallMethod2();
AnotherMethod();
CallMethod3();
}
void AnotherMethod()
{
CallMethod4();
CallMethod5();
}
}
需要的结果如下:
List<ExpressionStatementSyntax or InvocationExpressionSyntax>
{CallMethod1, CallMethod2, CallMethod4, CallMethod5, CallMethod3}
列表
{CallMethod1,CallMethod2,CallMethod4,CallMethod5,CallMethod3}
没有用于此的内置API,因为在一般情况下是不可能的。不过,您可以使用基本的Roslyn API自己编写代码。如果您有循环或if语句怎么办?这相当于停止问题。@SLaks我认为在我的例子中,方法内部的出现顺序足够多,那么你可以自己用一个简单的DFS来完成。但是要注意递归。如果您的语句之一是对接受委托的方法的调用,而参数是lambda,并且lambda包含表达式或语句,该怎么办?相对于方法中的表达式和语句,您希望以什么顺序枚举lambda中的表达式或语句?对于这些表达式的执行时间没有任何保证,如果有的话。@EricLippert感谢您的评论!我不需要任何代码库的通用解决方案,将要分析的代码库对我来说是众所周知的,我确信没有任何lambda或委托表达式。我的任务是收集特定自定义方法及其参数的所有调用。我尝试使用基本的Roslyn API来完成此操作,请检查我认为我尝试的方式完全错误。我知道代码不好,但它只是为了获得主要思想而起草的