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

У меня есть исключение времени выполнения, которое я создал в своем проекте, и я хочу убедиться, что оно перехвачено в одном из моих классов, чтобы вся программа не взорвалась, когда это произойдет (т. заявление, которое я хочу знать, если что-то в сборке или инструменты статического анализа не работают). К сожалению, поскольку java не заставляет меня иметь оператор try/catch для этого непроверенного исключения, нет никакого способа применить его во время компиляции. (Я не могу изменить свое исключение на проверенное исключение).

Мне интересно, есть ли способ применить оператор try/catch в определенном классе, возможно, с использованием пользовательских правил checkstyle/pmd/findbugs. (проверьте, что конкретный метод в конкретном классе имеет оператор try catch для моего исключения во время выполнения).

Спасибо.


person sakis kaliakoudas    schedule 01.10.2014    source источник


Ответы (2)


В Checkstyle, FindBugs или PMD (или их вспомогательных пакетах) нет детектора, который делал бы то, что вы хотите. Так что придется крутить самостоятельно.

Самый простой способ решить эту проблему без фактического программирования — написать правило PMD XPath, который ищет метод X в классе Y и блок catch, который перехватывает ваше исключение во время выполнения под ним.

В противном случае следующей по простоте будет пользовательская проверка Checkstyle, но она требует небольшого программирования. и вам придется впоследствии везде развернуть свою кастомную проверку.

Вы также можете написать свой собственный детектор FindBugs, как предложено в другом ответе, но, поскольку вы не будете использовать какие-либо конкретные функции FindBugs (например, анализ байтового кода), мне это кажется излишним.

person barfuin    schedule 01.10.2014
comment
Я решил провести некоторые тесты, которые вызывают это исключение и ожидают, что оно будет обработано, а не достигнет результатов теста. Было слишком много хлопот, чтобы написать собственное правило. - person sakis kaliakoudas; 04.10.2014

Идея исключений во время выполнения заключается в том, что вам не нужно указывать предложение «throws XYException».

Однако вы можете проверить findbugs-contrib. Если это не решит проблему, вы можете написать свой собственный детектор ошибок. Вот некоторые отправные точки:

person Lonzak    schedule 01.10.2014
comment
Да, моя проблема заключается в том, что я не могу использовать проверенные исключения, но я хочу принудительно обрабатывать непроверенные исключения. Похоже, у findbugs нет правила, которое я мог бы использовать из коробки. Я посмотрю на ссылки позже, но мне кажется, что слишком много работы, чтобы заставить это работать, возможно, мне просто придется согласиться с огромным ********* ПРЕДУПРЕЖДЕНИЕ, НЕ УДАЛАЙТЕ TRY/CATCH ******** комментарий :) - person sakis kaliakoudas; 01.10.2014
comment
Обратите внимание, что findbugs != findbugscontrib. Findbugs-contrib — это дополнительные шаблоны ошибок для findbugs. У них есть некоторые дополнительные ошибки, обнаруживающие, какой деак с обработкой исключений... - person Lonzak; 01.10.2014
comment
Я просмотрел тот список, который вы упомянули: › - person sakis kaliakoudas; 01.10.2014