2012-04-19 3 views
3

Возможно ли обнаружить недостижимый код или другие встроенные предупреждения компиляции с использованием Roslyn?Возможно ли обнаружить недостижимый код или другие встроенные предупреждения компиляции с использованием Roslyn

private void DoSomething() 
{ 
    string a = "TEST"; 

    throw new Exception("Why would I throw an exception here?"); 

    a = "This will never be reached"; //this is a compile time warning for unreachable code...Can I detect it? 

} 

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

ответ

7

Вы можете обнаружить это, используя метод AnalyzeRegionControlFlow семантической модели. Вы вызываете эту передачу в текстовом диапазоне, который соответствует запросам, которые вас интересуют. AnalyzeRegionControlFlow возвращает вам структуру данных, которая имеет свойство RegionEndPointIsReachable, она также расскажет вам обо всех утверждениях, которые либо прыгают в регион, либо выходят из него.

Если вы хотите узнать, как найти фактическую диагностику, которую должен сообщить компилятор, вам необходимо использовать метод GetDiagnostics для семантической модели.

+0

Спасибо, я не видел использования AnalyzeRegionControlFlow в моем использовании Roslyn до этого момента. Прекрасно работает. – Jay