Як знайти усі невикористані класи в Intellij Idea?


126

Існує інспекція "Невикористана декларація", в якій можна знайти весь невикористаний код в Intellij Idea. (див. це питання ) Але я хочу знайти всі невикористані класи, а не методи, змінні тощо. Тільки класи. (важко знайти лише класи в 3000 списку результатів). Як я можу це зробити?


Просто запустіть огляд, натисніть праву кнопку і побачте це у списку меню.
Вишня

Це два питання - вони будуть краще окремими питаннями. Також serialVersionXXX є поганою ідеєю для більшості проектів.
Інженер програмного забезпечення

Це погана ідея, тому що дуже мало розробників знає, що це таке, і майже завжди її зловживають. В java вкрай рідко використовувати механізм серіалізації для читання та запису об'єктів на рівні байтів, і якщо ви робите серійну версію за замовчуванням, зазвичай, достатньо для забезпечення безпеки. Жорстко кодований serialVersion повинен оновлюватися вручну кожного разу, коли змінюється інтерфейс класу, і кожного разу, коли список полів змінюється - незмінно розробники цього не роблять, оскільки вони просто не розуміють, для чого саме serialVersion. Основна причина, яку ви бачите в коді, - це через затемнення.
інженер програмного забезпечення

Відповіді:


218
  • Натисніть Ctrl+ Shift+ A(у Mac Command+ Shift+ A)
  • Введіть "невикористаний декларацію"
  • Двічі клацніть на "Невикористану декларацію"

Налаштування з’являться

  • Клацніть на надмірності Java / Декларації / Невикористану декларацію
  • праворуч внизу виберіть "Налаштування редактора"
  • зніміть прапорці,…, перевірте параметри. Потрібно поставити галочку лише для класів перевірки.
  • Натисніть OK

Налаштування закриваються

  • На панелі меню натисніть кнопку Аналіз / Запуск перевірки за назвою (або Ctrl+ Alt+ Shift+ I- в Mac Command+ Option+ Shift+ I)
  • Вставте текст "Невикористане оголошення"
  • Виберіть "Невикористане оголошення Java | Надмірність декларації"

Пошук починається

  • Перевірте стан завдання внизу ідеї, коли закінчите: насолоджуйтесь результатами та чудовим відчуттям при очищенні зіпсованого коду. :)

Опублікувавши майже таку ж відповідь протягом декількох хвилин на кілька запитань, припустимо, що одне з них є дублікатом іншого. будь ласка, позначте їх як таких.
Яап

3
Один з них спеціально для використання IntelliJ Idea, інший - для загальної Java. Я б не сказав, що це дублювання.
BlondCode

7
Він ігнорує конфігурацію "Тільки перевірити класи", тому я отримую багато і багато небажаних результатів (невикористані методи, поля тощо), і, що ще гірше, багато з них є помилковими, з кількох причин ...).
thelawnmowerman

6
У студії 3.0 змінюється опція перевірки лише класів після кроку: виберіть "Невикористане декларація Java | надмірність декларації"
Sourabh Saldi

4
Нам не потрібно змінювати глобальні налаштування, щоб запустити перевірку з різними параметрами. Дія Запустити перевірку за назвою з’явиться параметри інспекції.
TWiStErRob

11

Я не думаю, що це можливо. Я підозрюю, що ця функція навмисно залишається без IDE, тому що її не можна безпечно використовувати так, як можуть інші "видалити невикористані XXX" рефактори.

Невикористані декларації IDEA (і AFAIK, NetBeans) шукають приватні члени та локальні змінні: речі, які не є доступними, навіть динамічно, за межами цього класу чи області. (Ну, принаймні, не роблячи речі з Reflection або злому JVM, які вам не належать.) Незалежно від того, що зовнішній код робить з вашою бібліотекою, це не спричинить використання цих речей, оскільки їх обсяг обмежений, а IDE може бачити все це. Компілятор може визначити це, переглянувши лише свій код.

Для класів, навіть якщо вони не мають publicдоступу, на них можна динамічно посилатися Class.forName(), і це фактично відбувається в реальному коді. Тож навіть якщо вони, мабуть, не використовуються в коді вашого проекту, вони можуть використовуватися залежно від того, який ви або зовнішній код використовуєте у вашій бібліотеці. Таким чином, IDE не може гарантувати, що видалення цих класів не змінить зовнішнє спостережуване поведінку.

Ось чому я вважаю, що IDEA просто не забезпечує такої поведінки: це може дати користувачам помилкові очікування щодо безпеки, а видалення їх не є безпечним рефакторингом.


6
Добре, що він перефарбовує ім'я класу, коли він переглядає файл і дає вам намір зробити «видалити невикористаний клас», все, чого не вистачає, - мати можливість їх автоматично знайти. Звичайно, існують способи, які можуть зламати речі, але це правда для багатьох рефактори.
Роб Флетчер

2
Class.forName () з точки зору безпеки аналізу, мабуть, не відрізняється, ніж використання відображення для читання / встановлення приватних полів класу. Отже, якщо IntelliJ зробить це для полів, це не прийнятна відповідь, чому він не зробить це і для класів. В будь-якому випадку результат аналізу не на 100% гарантовано є безпечним.
Собаки

1

Можливо, вам слід переглянути Unused Symbolінспекцію з такими налаштуваннями:

введіть тут опис зображення


Га! Здається, що немає :-) Я вимкнув що-небудь у групі "невикористана декларація" і залишив лише "Невикористаний символ" лише "Перевірити класи". Але результати не змінюються. :-(
Вишня

@Cherry, вибачте, почувши ... Можливо, вам слід подати дефект у реактивні монети
Vic

1

Я не впевнений, чи це відповість на ваше запитання, але я раніше використовував інструмент Fortify для запуску правил перегляду коду проекту, який точно вказує на невикористаний імпорт, мертвий код, невикористані класи тощо. Це платне програмне забезпечення, але я я впевнений, що буде кілька безкоштовних плагінів / програмне забезпечення буде доступне для того ж.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.