Как часто выполняется инкрементная компиляция на Java в Eclipse/ Intellij?
Я понимаю, что Eclipse использует свой собственный компилятор для Java (ECJ), который может выполнять инкрементную компиляцию. Из большинства прочитанных мною чтений эта компиляция обычно запускается действием сохранения, но, похоже, это не согласуется с тем фактом, что вы получаете сообщение об ошибке по ошибкам компиляции почти сразу после ввода одной единицы / слова кода, Я не нашел какой-либо документации или литературы, в которой говорится, с какой степенью детализации это срабатывает (т.е. каждое слово, буква, строка)? Есть ли дополнительный анализ кода какого-то рода происходит? Несмотря на обнаружение ошибок в синтаксисе, я не вижу, как это могло бы обнаружить семантические ошибки, которые могут быть обнаружены только в процессе компиляции.
0 ответов
Тесная интеграция компилятора позволяет Eclipse вызывать компилятор во всех ситуациях, две из которых актуальны для этого вопроса:
Термин "инкрементная компиляция" обычно относится к компиляции при сохранении, которая может затем инициировать компиляцию большего количества файлов, которые зависят от измененного файла. В техническом жаргоне это называется "сборка", которая читает файлы.java и создает файлы.class.
Еще более немедленная обратная связь дается компиляцией по типу. Такая компиляция основана на рабочих копиях в памяти, а не на файлах. Вы даже можете редактировать несколько зависимых файлов без сохранения, и при компиляции уже видны изменения, внесенные в другие рабочие копии. На техническом жаргоне это называется "примирение". Хотя эта функция реализована с помощью вызова полного компилятора, согласование не приводит к созданию файлов классов.
Что касается первоначального вопроса о гранулярности триггера: согласование работает в очереди редактора "грязных областей". Запись грязных областей запускается нажатием клавиш в редакторе. Затем очередь опрашивается с задержкой по умолчанию 500 мс.
В дополнение к более немедленной обратной связи пользователи будут сталкиваться с тем, что при согласовании создаются маркеры ошибок только в редакторе, а при построении эти маркеры дополнительно отображаются в представлениях " Проблемы" или " Маркеры".