Пожалуй, я уже готов выложить плагин для Intellij Idea для общего доступа (исходный код будет открыт завтра после окончания CodeChef Long Contest)
Что делает данный плагин:
- Инлайнит классы из вашей библиотеки в один файл
- Убирает неиспользуемый код
- Позволяет вбить один раз тесты и запускать на всех тестах одной кнопкой
Что он не делает:
Плагин находится в стадии альфа-тестирования. Известны следующие баги:
- Иногда при нажатии на Delete task не удаляется файл самой таски. Можно удалить руками
- Не удаляет циклические вызовы методов, а так же циклическое использование классов в конструкторе
- Не удаляет методы, которые исполняют какой-либо интерфейс/являются переопределением методов наследуемых классов. Естественно, если наследуемый класс удален сам или данный класс нигде не используется метод будет удален вместе с классом. Пример - если вы используете класс из библиотеки с определенным методом toString то он не будет удален даже если не используется в коде
- Не удаляет метод с именем main независимо от сигнатуры
- Не поддерживаются static imports
Конечно, используете вы плагин на свой страх и риск
Плагин поставляется вместе с проектом, подготовленным для совместного использования. Плагин рассчитывает, что вы будете пользоваться именно этим проектом. В проекте есть 3 таски в качестве примера использования - 2 обычных и 1 для TopCoder.
Инструкция:
- Добавить на toolbar кнопки плагина (Customize Menus and Toolbars -> Main Toolbar -> Add after... -> Plug-ins -> Contest helper)
- Нажать кнопку New Task. Ввести имя таски, выбрать тип тестов (Single - один тест на файл, Multi Number - первым токеном дано число тестов, Multi EOF - ввод до конца файла либо до теста с нулевыми значениями), тип ввода/вывода (StdIn - стандартный поток, File Task Id - id таски в нижнем регистре + .in/.out, File Custom - какие либо другие названия файлов)
- Будет создан и открыт файл, в котором надо непосредственно писать решение. Функции в качестве параметров передадут номер теста в файле (начиная с 1), входной поток (InputReader, о нем ниже) и выходной поток (PrintWriter). Так же будет создан файл чекера, по умолчанию он просто сравнивает токены
- Кнопка Edit Tests позволяет вбить тесты. Ваш КО
- Когда вы дописали код и вбили тесты - нажимаете кнопку Run Task. Она потупит некоторое время и создаст все необходимые файлы. После этого можно запускать конфигурацию Tester Debug для работы непосредственно в модуле main/lib или Tester Run если вы хотите посмотреть, как будет вести себя непосредственно то, что вы пошлете на сервер
- Не забывайте нажимать на кнопку Run Task каждый раз, как вы сделали изменения в вашем коде/добавили тесты. Не стоит менять что-то в классе Main который лежит в модуле test - при следующем запуске Run Task эти изменения потеряются
- На сервер надо отсылать файл Main из модуля test
Для топкодера все чуть проще - вам достаточно настроить moj (или любой другой плагин, который генерит сурцы) на корневую папку модуля topcoder. Файл в модуле main будет автоматически сгенерирован, затем нужно будет только нажать Run Task и можно будет нажимать Compile в арене.
Кнопка Delete Task просто удалит таску, а Archive - скопирует все файлы таски в package unsorted модуля archive.
Ваши библиотечные классы должны лежать в модуле lib не в default package и не в package с именем, совпадающем с каким-либо из дефолтных package java (например - java.util)
Ссылки для скачивания:
Update: Про InputReader. В модуле utils в package net.egork.io лежит обрезанная версия моего класса для ввода достаточная для работы плагина. Сделано это чтобы вас не обвинили в использовании чужого кода. Можете дописывать туда все, что вам нужно - этот ввод очень быстро работает
Update 2: Еще замечание - если пишете COCI - не называйте таску так же, как она называется у них. Связано с особенностью их тестера
Update 3: Исходный код
тут. Писалось по ночам, не судите строго
И да, хоть кто-нибудь поставил? Если да, то как впечатления? Чего не хватает?
Update 4: Вышла новая версия. Для скачивания доступен плагин и проект. В проекте изменились фалы main/Tester.java, test/Tester.java и utils/main/net/egork/utils/checker/Checker.java, если вы уже скачивали проект вам надо обновить только их
Изменения:
Добавлена кнопка Restore Task которая восстанавливает таски из package unsorted (выдается список, где можно выбрать конкретную таску)
Файл таски синхронизируется перед Run Task
Можно добавить тесты из кода - для этого надо изменить метод generateTests чекера
Есть возможность запустить только на определенных тестах из набора - для этого тестеру в качестве аргументов командной строки надо передать номера тестов. Номера идут с нуля, сначала тесты введенные из GUI, потом тесты из генератора
Update 5: Вышел маленький некритичный фикс. Обновление только для плагина, заново скачивать проект не надо