Можно ли использовать NDepend для подсчета бросков?

У меня есть некоторый унаследованный код который имеет тенденцию передавать объекты как интерфейсы (например, IFoo), а затем в произвольных местах кода самопроизвольно приводить их к конкретным реализациям этих интерфейсов (скажем, MyConcreteFoo).

Вот глупый пример:

public bool IsThisFooScaredOfMonkeys(IFoo foo)
{
    if (foo is MyConcreteFoo)
    {
        return ((MyConcreteFoo)foo).BelievesMonkeysAreEvil;
    }
    return false;
}

То, что я хотел бы сделать, - это написать CQL-запрос NDepend, чтобы подобрать эти типы приведений и дать мне счетчик для метода, или для типа, или чего-либо еще. Просто кое-что, чтобы я знал, где я могу начать сосредотачивать свои усилия на избавлении от этой специфической глупости, а не на том, чтобы отправлять свою команду в разброс кода по случайной охоте на броски ...

Кто-нибудь знает, есть ли способ сделать это? Я предполагаю, что нет (не может быть слишком много людей, которым нужна эта конкретная функциональность), но я решил сначала спросить здесь ...: -)

Конечно, есть какие-то другие идеи о том, как Охота на актеров быстрее будет одинаково оценена.

8
задан Christine Salter 26 August 2010 в 17:52
поделиться

1 ответ

Это было бы очень хорошо, но NDepend ограничен набором сущностей, который не охватывает отдельные операторы.

Сущности NDepend

  1. Методы
  2. Поля
  3. Типы
  4. Пространства имен
  5. Сборки

Несмотря на это ограничение, NDepend по-прежнему великолепен! Возможно, это следующая функция версии.

Теперь Патрик Смакчиа мог бы сказать мне другое, поэтому я бы связался с ним по этому вопросу. Я ожидаю, что получу ответ быстро, так как он довольно хорошо разбирается в вещах.

Дополнительное примечание:

Если вы используете ReSharper 5.0, в нем есть структурный поиск, который позволит вам находить подобные заявления. Вам придется построить поиск самостоятельно, но это довольно мощный инструмент.

Этот шаблон соответствует приведенному выше примеру:

if($fooObject$ is $concreteFoo$)
{
    return (($concreteFoo$)$fooObject$).$anyIdentifier$;
}
2
ответ дан 6 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: