如何识别方法调用的多层嵌套

时间:2019-04-01 12:25:43

标签: roslyn

我正在编写一个分析器,以检测抽象类中的某个方法是在特定方法中还是通过嵌套调用。

使用语义模型并通过方法声明语法,我可以找到它的第一个祖先:

private void MethodA()
{                   
    AbstractA();                      
}

如果在AbstractA()内部调用了MethodA(),我应该能够产生诊断信息。如果代码如上所示,则可以通过FirstAncestorOrSelf,但是,如果出现以下情况,则该怎么办

private void MethodA()
{                   
    MethodB();                      
} 

private void MethodB()
{
    AbstractA()
}

我必须能够检测是否通过AbstractA()中的MethodB()调用了MethodA()并产生诊断信息。

或者简单地说,如果从多层嵌套中调用AbstractA()

private void MethodA()
{                   
    MethodB();                      
} 

private void MethodB()
{ 
    MethodC();
}

private void MethodC()
{
    AbstractA();
}

在这种情况下,我也应该能够产生诊断信息。

0 个答案:

没有答案