Затмение: двойная точка с запятой на импорт - PullRequest
3 голосов
/ 14 ноября 2011

Используя Eclipse, если у меня есть лишняя точка с запятой в строке импорта (не последняя строка импорта), я вижу синтаксическую ошибку в IDE.Однако это прекрасно компилируется за пределами IDE (в данном случае Maven).

Пример:

import java.util.ArrayList;; //notice extra semicolon
import java.util.List;

Кто-нибудь еще видит такое поведение?Почему это отображается как синтаксическая ошибка?Я работаю с кем-то, кто постоянно подталкивает их к управлению исходным кодом, и это меня раздражает (они явно не используют Eclipse).

Полное раскрытие ... Я использую SpringSource Tool Suite 2.8.0.

Ответы [ 3 ]

3 голосов
/ 15 ноября 2011

Это синтаксическая ошибка, потому что import является объявлением, а не утверждением;Вы не можете иметь операторы вне класса.

Подробнее см. JLS 7.5 , но по существу объявления импорта заканчиваются одним ;.

Напримероднотипный импорт:

SingleTypeImportDeclaration:
   import TypeName ;

В описании грамматики в JLS нет никакой двусмысленности, которая допускала бы пустой оператор импорта, и, кроме пакетов, ничто другое не может входить в premable блока компиляции.1012 *

CompilationUnit:
        [[Annotations] package QualifiedIdentifier   ;  ] {ImportDeclaration}
{TypeDeclaration}

ImportDeclaration:
     import [ static] Identifier {   .   Identifier } [   .     *   ] ;

Я понимаю, что Eclipse верен, JDK-компилятор неверен.

1 голос
/ 14 ноября 2011

Eclipse как IDE имеет функцию / опцию для идентификации потенциальных удалений кода и, таким образом, помечает это как ошибку.

Я думаю, это можно установить в настройках java -> compiler ->Пожалуйста, смотрите эту ссылку.

http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.user/reference/preferences/java/compiler/ref-preferences-errors-warnings.htm

Но я не пробовал.

1 голос
/ 14 ноября 2011

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

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

EDIT

Похоже, что Eclipse (по крайней мере, 3.6, я не тестировал 3.7) действительно сообщает о двойной точке с запятой после оператора импорта как ошибку компиляции, независимо от настроек «пустого оператора». Eclipse имеет свой собственный встроенный компилятор, отдельный от компилятора JDK. Так что если Eclipse это не нравится, но компилятор JDK таков, он предполагает, что у одного или другого из них есть ошибка (или, по крайней мере, другая интерпретация JLS!).

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

...