Являются ли ненужные ошибки синтаксиса точки с запятой? - PullRequest
4 голосов
/ 08 ноября 2019

Сегодня утром, после выполнения мерзавца, IntelliJ пожаловался, что мой проект больше не компилируется. Виновник:

import javax.naming.Context;;

IntelliJ жалуется:

Ошибка: (33, 29) Java: синтаксическая ошибка на токене ";", удалите этот токен

Этот код был добавлен человеком, который не использует IntelliJ, и он прошел нашу внутреннюю сборку.

Вопрос: виноват javac или IntelliJ? И что это за документ / спецификация, поясняющая, должен ли приведенный выше код быть ошибкой или предупреждением?

Это IntelliJ 2019.2 CE EAP, работающий на MacO.

И если быть точным: похоже, что существует несоответствие между IntelliJ «редактором компиляции» и результатом выполнения действия «сборки». Интересный факт: у нас есть «использовать eclipse compiler» в наших настройках проекта. Изменяя это, чтобы использовать javac решает проблему, двойной ;;это просто предупреждение.

Ответы [ 3 ]

4 голосов
/ 08 ноября 2019

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

Перепроверьте свой код. Это может быть также IntelliJ вины тоже. Его служба доставки может не рассматривать это как юридическое заявление.

Вопрос похож на this

Редактировать 1: В настройках IntelliJ есть опция, которая отправляет избыточные точки с запятой в качестве ошибки.

3 голосов
/ 08 ноября 2019

В соответствии с спецификацией языка Java §7.6 ; является допустимым объявлением типа:

Объявление типа верхнего уровня объявляет тип класса верхнего уровня (§8 (Классы) ) или тип интерфейса верхнего уровня ( §9 (Интерфейсы) ).

ТипDeclaration:

Доп. ";"токены, появляющиеся на уровне объявлений типов в модуле компиляции, не влияют на значение модуля компиляции. Паразитные точки с запятой разрешены в языке программирования Java исключительно как уступка программистам C ++, которые привыкли ставить ";"после объявления класса. Они не должны использоваться в новом коде Java.

Если в InteliJ нет настройки, которая могла бы изменить это поведение, то лишняя точка с запятой не должна выдавать ошибку.

3 голосов
/ 08 ноября 2019

Отказ от ответственности

Это не решает проблему, поскольку оказывается, что ошибка возникает в связи с использованием компилятора Eclipse (в отличие от значения по умолчанию)javac компилятор).

Это может быть полезно для устранения неполадок / выделения функции настройки проверки IntelliJ.


Вы можете установить уровень серьезности для ненужных точек с запятой (среди прочего) в IntelliJ в профиле Inspections.

Значением по умолчанию для избыточных точек с запятой является «предупреждение». Возможно, у вас установлено "Ошибка".

enter image description here

Это не должно влиять на компилятор Java, поскольку избыточные точки с запятой не являются синтаксической ошибкой.

...