Как распознать несколько уровней вложенности вызова метода - PullRequest
0 голосов
/ 01 апреля 2019

Я пишу анализатор, чтобы определить, вызывается ли определенный метод из абстрактного класса в конкретном методе или через вложенность.

Используя семантическую модель и синтаксис объявления метода, я могу достичь его первого предка:

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();
}

В этом случае я также смогу произвести диагностику.

...