Как известно, codeforces требует решения в виде одного файла. Это вызывает некоторые трудности использования своих классов-утилит. Также для java требуется, чтобы класс решения был в default package (а многие другие сайты требуют ещё, чтоб класс назывался Main и никак по-другому).
CHelper Egor'а — замечательный плагин, облегчающий жизнь java-программистов на этом и других сайтах. Только вот не все любят придерживаться определённого стиля написания контестов, тестирования, хранения архива и пр., особенно если этот стиль был определён не ими. Другие не любят сложный GUI. Третьи вообще предпочитают UNIX-way, когда любая программа или плагин выполняет только одну небольшую задачу, но делает это очень хорошо.
Одним словом, CHelper показался мне слишком сложным, но вдохновлённый им я решил сделать очень маленький плагин, который делает всего одну простую вещь — генерирует Main.java, включая в него зависимости и удаляя некоторый неиспользуемый код. GUI в пагине нет — только одна кнопка на панели с правой стороны. Если нажать эту волшебную кнопку, то из активного в данный момент файла сгенерируется класс Main в default package текущего модуля. Зависимые классы, исходники которых присутствуют в текущем проекте (в котором может быть несколько модулей), будут рекурсивно включены, некоторые неиспользуемые вложенные классы, методы и поля будут аккуратно удалены. Точкой входа считается метод public static void main(String[] args). Очевидно, что для SRM'ов topcoder-а смысла этого плагина нет.
Плагин использует исключительно лексический анализатор самой IDEA (называемый PSI), и поэтому в целом не привязан к конкретным правилам оформления кода. Единственная проблема, которая может возникнуть — это конфликт имён классов, потому что при внедрении классов теряется информация об имени пакетов (он может возникнуть, если у вас два используемых класса с одним названием в разных пакетах или же вы используете класс из default package текущего модуля). Это не считается багом, это очевидные издержки архитектуры. Потому будьте аккуратны, если используете классы с одинаковыми short name, но разными fully qualified name. Также рекомендую просматривать результирующий Main.java перед отправкой.
Других функций, кроме как генерить Main.java в плагине нет и не будет. Я думаю, что генерацию по шаблону стартовых классов-решений с тестирующим кодом (и даже с выдиранием примеров из условия) лучше каждый сделает сам для себя. Для этого не нужен плагин к IDEA — достаточно простого запускаемого класса.
Плагин можно скачать отсюда: http://plugins.intellij.net/plugin/?idea&id=6870. Также можно установить через репозиторий непосредственно из самой IDEA. На скриншоте смотреть особо нечего, но если сильно хочется, можно глянуть пример здесь.
P.S. Тем, кто хочет богатого функционала и любит GUI, советую CHelper.
А не поделитесь этим кодом под LGPL? Я бы с удовольствием интегрировал сборку и убирание неиспользуемого кода в свой плагин (они получше моих, конечно), а лицензию менять не хочу
Пожалуйста, я сменил лицензию с GPL на LGPL.
Один из вариантов использования: прописать в plugin.xml зависимость
<depends>Olymp Plugin</depends>
, а в коде вызывать GenerateMainAction.actionPerformed() — опциональным параметром можно передать имя результирующего класса (если оно отличается от Main). При желании можно оформить это сервисом (чтобы получать через ServiceManager.getService()) и сделать перегруженный метод, получающий PsiJavaFile вместо AnActionEvent.