Настройка компилятора в Eclipse

Я использовал OpenJDK, чтобы изменить компилятор Java для отображения дополнительных предупреждений. Теперь я хочу использовать этот компилятор в Eclipse.

Согласно ответу это Eclipse использует инкрементный компилятор. Есть ли способ отключить инкрементный компилятор и указать путь к моему пользовательскому компилятору? Можно ли это с помощью плагина?

В качестве альтернативы, если это было невозможно, как вы можете собрать Eclipse самостоятельно?

Вы не можете изменить «компилятор», который использует редактор Eclipse Java, поскольку он очень тесно интегрирован с редактором. Вы можете отключить автоматические сборки и использовать что-то вроде maven для сборки с вашим компилятором, но это не будет отображаться в редакторе.

greg-449 15.08.2018 09:29

@deHaar Таким образом можно установить только среду выполнения, но не компилятор

BlobbyBob 15.08.2018 09:31

@ greg-449 Конечно, у него открытый исходный код, и у меня есть на это время;)

BlobbyBob 15.08.2018 09:31

Под «изменением» я подразумеваю просто переход на компилятор типа «javac». Редактор Eclipse широко использует Абстрактное синтаксическое дерево JDT. Конечно, вы можете изменить исходный код JDT. Репозитории Eclipse GIT находятся по адресу git.eclipse.org/c

greg-449 15.08.2018 09:35

@ greg-449 Я уже думал об этом, но я не нашел руководства по полной сборке Eclipse после того, как отредактировал JDT (см. мой последний вопрос).

BlobbyBob 15.08.2018 09:37

@BlobbyBob Совершенно верно, спасибо. Я удалю свой неуместный комментарий.

deHaar 15.08.2018 09:45

Какую часть компилятора Java вы изменили? Ищете ли вы ошибки в абстрактном синтаксическом дереве, сгенерированном компилятором, или на более позднем этапе, когда генерируется байт-код?

howlger 15.08.2018 11:22

Чтобы ответить на ваш последний вопрос: Eclipse можно построить e. г. с помощью Eclipse IDE или headless с помощью расширения Maven Tycho (которое используется самим проектом Eclipse, например JDT).

howlger 15.08.2018 11:29

@howlger После парсинга я анализирую AST на предмет определенных правил (стиль PMD). Где взять сценарий сборки Maven (ссылка)?

BlobbyBob 15.08.2018 12:04

@GhostCat Я не принимал ответы, потому что они недостаточны / бесполезны для вопроса. Вы можете улучшить следующие аспекты: 1. Компилятор JDT / eclipse не является запеченный в eclipse, поскольку eclipse имеет модульную конструкцию (см. это) 2. Обходные пути не являются решением 3. Правильный ответ: напишите плагин, используя JDT CompilationParticipant точка расширения, которая не является основной частью вашего ответа.

BlobbyBob 16.08.2018 14:42

Ладно, меня устраивает ... может быть, тогда ты напишешь более подробный ответ.

GhostCat 16.08.2018 14:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
11
234
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я согласен с комментариями greg-449: насколько мне известно, компилятор, который используется для выделения синтаксиса и предупреждений в окне редактора eclipse, - это запеченный в eclipse. Помимо этого, eclipse JDT предоставляет точки расширения, которые с помощью мог позволяют делать некоторые из задуманных вами вещей. См. Их документация для получения дополнительной информации.

Тем не менее, мой категорический отказ: не делайте этого. Не изобретайте собственные элементы цепочки инструментов для улучшения качества кода. Они будут работать только на вас и на вашу особую настройку затмения.

Вместо этого: изучите существующие инструменты, чтобы дать вам то, что вы хотите, как в

  • Eclipse позволяет вам включить многих предупреждений / ошибок, которые по умолчанию javac не предоставляет
  • IntelliJ идет даже дальше этого. У вас есть тонны и тонны "проверок", доступных с этой IDE.
  • Рассмотрите возможность поиска в инструментах статического анализа кода, таких как PMD или findbugs.

Предупреждения / ошибки из вашего первого пункта звучат интересно, возможно, я мог бы добавить свои собственные предупреждения в этом месте. Возможно ли это с помощью плагина или мне нужно изменить исходный код Eclipse?

BlobbyBob 15.08.2018 09:35

@BlobbyBob Eclipse JDT предоставляет множество точек расширения, которые могут использовать плагины - например, org.eclipse.jdt.core.compiler.CompilationParticipant сообщает о различных этапах сборки и может добавлять ошибки. См. Руководство разработчика подключаемых модулей JDT в справке Eclipse.

greg-449 15.08.2018 09:46

Инкрементный компилятор Eclipse является основным компонентом Eclipse, поэтому его нелегко изменить или заменить. абстрактное синтаксическое дерево (AST) используется не только для компиляции исходного кода в bytecod и поиска ошибок в этом процессе, но также для выделения кода, навигации, поиска, рефакторинга и т. д.

В Eclipse абстрактное синтаксическое дерево - это общедоступный API и может быть создается без модификации или замены компилятора: см. Справка Eclipse - Руководство разработчика подключаемого модуля JDT - Управление кодом Java.

В качестве альтернативы вы можете использовать добавьте свои правила в SpotBugs, который можно рассматривать как преемника FindBugs. SpotBugs считывает байт-код (не исходный код) и создает AST на основе КАК М (который имеет другой AST API, чем Eclipse или компилятор OpenJDK). Преимущество использования SpotBugs состоит в том, что вам не нужно будет самостоятельно реализовывать отображение найденных ошибок и других элементов пользовательского интерфейса.

Чтобы также ответить на ваш последний вопрос (который не актуален, если вы используете общедоступный AST API Eclipse или SpotBugs): Eclipse может быть создан e. г. с помощью Eclipse IDE или headless с помощью расширения Maven Tycho (которое используется самим проектом Eclipse, например, от JDT через Jenkins на основе этого pom.xml).

Ответ принят как подходящий

Инкрементальный компилятор eclipse является частью модуля JDT. Его отключение также отключит такие функции, как подсветка синтаксиса, которые вы, вероятно, не захотите пропустить.

Однако вы можете использовать плагин для изменения инкрементного компилятора в JDT с помощью точки расширения compilationParticipant. При таком подходе вы можете разместить свой собственный код на различных этапах компиляции.

Хорошее решение, я не знал этой точки расширения. Только будьте осторожны, чтобы не вычислять здесь трудоемкие вещи из соображений производительности. Было бы неплохо, если бы вы могли опубликовать свою работу с открытым исходным кодом.

howlger 16.08.2018 15:34

Другие вопросы по теме