У меня есть несколько перечислений, которые содержат много значений, и я знаю, что большинство из них не используются.
Я пытаюсь написать запрос 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? Или, что еще лучше, способ добиться того, чего я хочу?
Спасибо!