Параметр конфигурации Javac для неиспользуемых включаемых предупреждений? - PullRequest
4 голосов
/ 06 апреля 2011

Имеется ли параметр командной строки Sun для предоставления предупреждений (или ошибок) в отношении неиспользованных import операторов? Встроенный javac-компилятор eclipse выдает такие предупреждения, но если компилятор Sun / Oracle использует его в качестве одного из аргументов -Xlint:XXX, он недостаточно документирован.

Я хочу очистить существующую базу кода Java, которая собирается из командной строки с использованием Ant, и я хотел бы интегрировать отслеживание и отчетность по таким операторам в ночные сборки.

Некоторые полагают, что импорт не влияет на процесс компиляции, однако просмотр операций компилятора (с флагом -verbose) показывает, что компилятор безоговорочно загружает импортированные классы, даже если они не используются в записанном выводе. Таким образом, удаление неиспользованного импорта, по-видимому, дает больше преимуществ, чем просто понимание кода.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

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

1 голос
/ 15 мая 2012

Используйте checkstyle и настройте модуль UnusedImports для использования (или выберите конфигурацию по умолчанию, которая уже использует его).

Checkstyle определяет неиспользуемый импорт как:

  1. Импорт без подстановочных знаков, на который нет ссылки в файле.
  2. Импорт, который является дубликатом другого импорта.
  3. Импорт из пакета java.lang.
  4. Импорт из того же пакета, что и класс.
  5. (Необязательно) импорт, необходимый только для разрешения ссылки JavaDoc.

На практике этосоздает отчет о том, что java.awt.Component не используется (вместе с номером строки).

import java.awt.Component;
class FooBar {
    ...
}

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

Из документации, касающейся ограничения

import java.awt.Component;
class FooBar {
    private Object Component; // IMHO bad practice
    ...
}

не помечает Component как неиспользованный.

...