Поиск мертвых значений перечисления с помощью NDepend

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

Я пытаюсь написать запрос NDepend CQLinq, чтобы вернуть значения перечисления, которые используются в моей базе кода. Найдя этот вопрос SO, я основывал свой запрос на один из стандартных запросов, предоставляемых NDepend:

// <Name>Used enum values</Name>
warnif count > 0
from f in JustMyCode.Fields where
    f.ParentNamespace.Name == "My.Namespace" &&
    f.NbMethodsUsingMe > 0 && 
    f.IsPublic &&     // Although not recommended, public fields might be used by client applications of your assemblies.
    f.IsEnumValue &&  // The IL code never explicitely uses enumeration value.
    f.Name !=  "value__"  && // Field named 'value__' are relative to enumerations and the IL code never explicitely uses them.
   !f.HasAttribute("NDepend.Attributes.IsNotDeadCodeAttribute".AllowNoMatch()) &&
   !f.IsGeneratedByCompiler // If you don't want to link NDepend.API.dll, you can use your own IsNotDeadCodeAttribute and adapt this rule.
select f

Однако NDepend считает, что ни одно из значений перечисления не используется. Как только я заменю

f.NbMethodsUsingMe > 0 &&

с участием

f.NbMethodsUsingMe == 0 && 

перечислены все мои значения перечисления, поэтому я знаю, что все остальные пункты запроса в порядке.

Я заметил эти два комментария к исходному запросу:

    f.IsEnumValue &&  // The IL code never explicitely uses enumeration value.
    f.Name !=  "value__"  && // Field named 'value__' are relative to enumerations and the IL code never explicitely uses them.

что может означать, что NDepend не может обнаружить использование значения перечисления.

Кто-нибудь знает, является ли это ограничением NDepend? Или, что еще лучше, способ добиться того, чего я хочу?

Спасибо!


person Rodolfo Grave    schedule 24.10.2014    source источник
comment
Да, это фактическое ограничение NDepend, инструмент не может обнаружить использование значения перечисления, потому что значения перечисления скомпилированы в числа и больше не печатаются в коде IL. Однако эту информацию можно вывести из кода IL с помощью некоторых эвристик, так что это, безусловно, функция будущего.   -  person Patrick from NDepend team    schedule 24.10.2014