Я вернулся в Хилтон (Continental Ballroom 4), чтобы посетить презентацию « Птицы перьев » Яна Лаходы ( Oracle / NetBeans) «Пользовательский статический анализ кода». Ранее я писал о подмножестве функциональных возможностей, описанных Lahoda, в статье Создание настраиваемой подсказки NetBeans 7.1 . В этом посте я рассмотрел написание пользовательских подсказок для NetBeans с использованием пользовательского декларативного языка рефакторинга, который Лахода обсуждал в своей презентации.
Лахода пояснил, что язык пользовательских декларативных рефакторингов был основан в 2000 году для «улучшения IDE и способов разработки разработчиков». NetBeans 6.0 ( анонс ) принял свою модель записи в 2006 году и был восстановлен для NetBeans 7.1 с Project Jackpot 3.0 . Это специализированный Java-подобный язык DSL на основе AST, который «позволяет определять рефакторинги (почти) декларативно». Его можно использовать для «проверки на наличие паттернов» и «для определения того, сколько клиентов вызывает определенный метод для указанного контекста».
Джекпот можно запустить вне среды IDE NetBeans в командной строке с помощью инструмента « Джекпот» . Лахода заявил, что этот автономный инструмент на основе командной строки может даже применять предупреждения NetBeans.
У Лаходы было несколько слайдов, охватывающих параметры и синтаксис для определения правил статического анализа кода . Информация о многих из этих слайдов доступна на вики-странице JavaDeclarativeHintsFormat, на которую ссылается Лахода. Lahoda также ссылается на примеры джекпота онлайн .
Лахода предоставил шаблон того, как работает язык декларативных подсказок:
<source-pattern> :: <conditions> => <target-pattern> :: <conditions> => <target-pattern> :: <conditions> ;;
Лахода заявил, что вы можете поместить «любое количество таких правил в файл», а затем поместить файл .hint в META-INF / upgrade. См Geertjan Wielenga «s сообщение Oh No Vector! об этой конкретной детали.
Узоры были еще одной темой, которую Лахода освещал в своей презентации. У него была пуля, утверждающая, что шаблоны могут применяться к «выражениям, операторам, классам и методам Java». Он объяснил значение $, которое перед шаблоном означает замену одной вещи, а один в конце означает множественные экземпляры этой вещи. Вот правила использования $ для шаблонов, которые он показал на своем слайде:
утверждение | $ выписка $ выписка $ |
0 или 1 | if ($ cond) $ тогда; еще $ еще $ |
Модификаторы | $ mods $ $ type $ $ variableName; |
Несколько уловов | try {} $ ловит $ finally {} |
Лахода покрыл условия. Он заявил, что существует три типа условий: язык (instanceof, в противном случае), стандартные (предопределенные) и пользовательские. Результат условия может быть отменен (!), И && работает с результатами условия.
Пример использования instanceof в Lahoda показан ниже (оценивается как true, если выражение, связанное с $ variable, имеет тип <type>):
$variable instanceof <type>
Ключевое слово else используется при назначении исправлений и имеет значение true, если никакое другое исправление не доступно для определенного правила.
Лахода заявил, что «подобные вызовы методов» имеют вид:
hasModifier($variable, PRIVATE)
В заключение Лахода напомнил аудитории о ситуациях, в которых этот подход к пользовательскому статическому анализу кода может быть полезен:
- Пользовательский рефакторинг NetBeans для проверки на наличие антипаттернов
- Checking for violations during continuous build
- Producing standard NetBeans warnings
When I wrote my post Creating a NetBeans 7.1 Custom Hint, one of the biggest challenges was finding documentation outside the sparse online NetBeans documentation regarding use of the custom rules language. Lahoda’s presentation and the newer Wiki pages and other documentation he has been a major contributor to in recent months have helped to reduce this hurdle. This is one of several things I’ve seen or heard more about at JavaOne 2012 that I hope to blog on in the future.