Jak znaleźć wszystkie nieużywane klasy w Intellij Idea?


126

Istnieje inspekcja „Niewykorzystana deklaracja”, dzięki której można znaleźć cały niewykorzystany kod w Intellij Idea. (zobacz to pytanie ) Ale chcę znaleźć wszystkie nieużywane klasy, a nie metody, zmienne itp. Tylko klasy. (na liście wyników 3000 trudno znaleźć tylko klasy). Jak mogę to zrobić?


Po prostu uruchom inspekcję, kliknij prawym przyciskiem myszy i zobacz to na liście menu.
Cherry

To dwa pytania - lepiej by były jako oddzielne pytania. Również serialVersionXXX jest złym pomysłem w przypadku większości projektów.
Inżynier oprogramowania,

To zły pomysł, ponieważ niewielu programistów wie, do czego służy, i prawie zawsze jest nadużywany. W Javie niezwykle rzadko używa się mechanizmu serializacji do odczytu i zapisu obiektów na poziomie bajtów, a jeśli to zrobisz, domyślna wersja szeregowa jest zwykle wystarczająca, aby zapewnić bezpieczeństwo. Zakodowana na stałe wersja serialVersion musi być aktualizowana ręcznie za każdym razem, gdy zmienia się interfejs klasy i za każdym razem, gdy zmienia się lista pól - niezmiennie programiści nie robią tego, ponieważ po prostu nie rozumieją, do czego służy serialVersion. Głównym powodem, dla którego widzisz to w kodzie, jest zaćmienie.
Inżynier oprogramowania

Odpowiedzi:


218
  • Naciśnij Ctrl+ Shift+ A(w Mac Command+ Shift+ A)
  • Wpisz „nieużywana deklaracja”
  • Kliknij dwukrotnie „Niewykorzystana deklaracja”

Ustawienia pojawią się

  • Kliknij Java / Deklaracja nadmiarowości / Nieużywana deklaracja
  • w prawym dolnym rogu wybierz „Ustawienia edytora w locie”
  • odznacz pola wyboru, ..., sprawdź parametry. Należy zaznaczyć tylko klasy kontrolne.
  • wciśnij OK

Ustawienia zostaną zamknięte

  • Na pasku menu kliknij Analizuj / Uruchom inspekcję według nazwy (lub Ctrl+ Alt+ Shift+ I- w Mac Command+ Option+ Shift+ I)
  • Wstaw tekst „Nieużywana deklaracja”
  • Wybierz „Nieużywana deklaracja Java | Nadmiarowość deklaracji”

Rozpoczyna się wyszukiwanie

  • Po zakończeniu sprawdź stan zadania u dołu Pomysłu: ciesz się wynikami i wspaniałym uczuciem czyszczenia pomieszanego kodu. :)

Opublikowanie prawie tej samej odpowiedzi w ciągu kilku minut na kilka pytań sugeruje, że jedno z nich jest duplikatem drugiego. oznacz je jako takie.
Jaap,

3
Jeden z nich jest przeznaczony specjalnie do użytku z IntelliJ Idea, a drugi dla ogólnej Javy. Nie powiedziałbym, że to duplikaty.
BlondCode,

7
Ignoruje konfigurację „Only Check Classes”, więc otrzymuję mnóstwo niechcianych wyników (nieużywane metody, pola itp., A co gorsza, wiele z nich to fałszywe alarmy z kilku powodów ...).
thelawnmowerman

6
Nastąpiła zmiana w Studio 3.0 Opcja sprawdzania tylko klas następuje po kroku: Wybierz "Nieużywana deklaracja Java |
Nadmiar

4
Nie musimy zmieniać ustawień globalnych, aby przeprowadzić inspekcję z innymi parametrami. Akcja Uruchom inspekcję według nazwy spowoduje wyświetlenie ustawień inspekcji.
TWiStErRob

11

Nie sądzę, żeby to było wykonalne. Podejrzewam, że ta funkcja jest celowo pomijana w IDE, ponieważ nie można jej bezpiecznie używać tak, jak inne refaktoryzacje typu „usuń nieużywane XXX”.

Nieużywane deklaracje, których szuka IDEA (i AFAIK, NetBeans), dotyczą prywatnych członków i zmiennych lokalnych: rzeczy, które nie są dostępne, nawet dynamicznie, spoza tej klasy lub zakresu. (Cóż, przynajmniej bez robienia rzeczy z Reflection lub hakowania JVM, których nie powinieneś robić.) Bez względu na to, co zewnętrzny kod robi z twoją biblioteką, nie spowoduje to użycia tych rzeczy, ponieważ ich zakres jest ograniczony, a IDE może to wszystko zobaczyć. Kompilator może to ustalić, patrząc tylko na Twój kod.

W przypadku klas, nawet jeśli nie mają publicdostępu, można do nich dynamicznie odwoływać się za pomocą Class.forName(), co faktycznie dzieje się w kodzie aktywnym. Więc nawet jeśli najwyraźniej nie są używane w kodzie projektu, mogą być używane w zależności od tego, co Ty lub kod zewnętrzny korzystający z biblioteki działa. Więc IDE nie może zagwarantować, że usunięcie tych klas nie zmieni zachowania obserwowalnego zewnętrznie.

Dlatego uważam, że IDEA po prostu nie zapewnia takiego zachowania: może dać użytkownikom fałszywe oczekiwania dotyczące bezpieczeństwa, a ich usunięcie nie jest bezpieczną refaktoryzacją.


6
Cóż, wyszarza nazwę klasy podczas faktycznego przeglądania pliku i daje zamiar „usunięcia nieużywanej klasy”. Brakuje tylko możliwości ich automatycznego znalezienia. Z pewnością istnieją sposoby, które mogą zepsuć sytuację, ale dotyczy to wielu refaktoryzacji.
Rob Fletcher

2
Class.forName () zapewne nie różni się, z punktu widzenia bezpieczeństwa analizy, od używania refleksji do odczytu / ustawienia pól prywatnych w klasie. Więc jeśli IntelliJ zrobi to dla pól, to nie jest akceptowalna odpowiedź, dlaczego nie zrobi tego również dla klas. W obu przypadkach wynik analizy nie gwarantuje 100% bezpieczeństwa.
Dogs

1

Może powinieneś przyjrzeć się Unused Symbolinspekcji z następującymi ustawieniami:

wprowadź opis obrazu tutaj


Ha! Chyba nie :-) Wyłączyłem wszystko w grupie "nieużywana deklaracja" i zostawiłem tylko "Nieużywany symbol" tylko z "sprawdź klasy". Ale wyniki się nie zmieniają. :-(
Cherry

@Cherry, przykro mi to słyszeć ... Może powinieneś zgłosić usterkę do jetbrains
Vic

1

Nie jestem pewien, czy to odpowie na twoje pytanie, ale w przeszłości korzystałem z narzędzia Fortify do uruchamiania reguł przeglądu kodu w projekcie, które precyzyjnie wskazuje na niewykorzystane importy, martwy kod, nieużywane klasy itp. Jest to płatne oprogramowanie, ale ja Jestem pewien, że będą dostępne darmowe wtyczki / oprogramowanie do tego samego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.