Найдите количество строк, содержащихся в {}, которые не содержат определенную строку - PullRequest
0 голосов
/ 09 ноября 2011

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

Итак, такая строка:

catch (Exception e) { }

или

catch (Exception e) { 
    Do Something
}

или

 catch (Exception e) {

 }

Не включая, если строка "StackTrace" включена где-либо между {}

У меня есть

 catch\b\s*\(.*\)\s*\{.*\n*(?!stackTrace).*\n*\}

Который, кажется, в основном работает, за исключением нескольких строк ..

Кто-нибудь может помочь?

Спасибо

РЕДАКТИРОВАТЬ: Некоторые примеры сбоев .. Это имеет тенденцию терпеть неудачу на этом;

} catch (NameNotFoundException e) {

    }

Это работает для этого

} catch (JSONException e) {
        }

Ответы [ 3 ]

1 голос
/ 09 ноября 2011

Если вы хотите сделать автоматическую проверку кода, вы должны посмотреть на PMD и checkstyle.

http://pmd.sourceforge.net/

http://checkstyle.sourceforge.net/

На самом деле PMD уже имеет правило, определенное для "EmptyCatchBlock"

http://pmd.sourceforge.net/rules/basic.html

1 голос
/ 09 ноября 2011

Вот мое регулярное выражение для вас (немного некрасиво - но это работает! Любые улучшения приветствуются)

catch\s*\([^)]*\)[^{]*\{[^}]*StackTrace[^}]*\}
0 голосов
/ 09 ноября 2011

Я бы использовал регулярное выражение для нахождения каждого catch(...), а затем просматривал строку за строкой, считая открытые / закрывающие скобки до конца блока catch.В каждой строке сканирования используется регулярное выражение для проверки «StatckTrace».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...