Wie finde ich alle nicht verwendeten Klassen in Intellij Idea?

125

Es gibt eine Überprüfung "Nicht verwendete Deklaration", bei der der gesamte nicht verwendete Code in Intellij Idea gefunden werden kann. (siehe diese Frage ) Aber ich möchte alle nicht verwendeten Klassen finden, keine Methoden, Variablen usw. Nur Klassen. (Es ist schwierig, nur Klassen in der 3000-Ergebnisliste zu finden.) Wie kann ich das machen?

Kirsche
quelle
Führen Sie einfach die Inspektion aus, klicken Sie auf die rechte Schaltfläche und sehen Sie dies in der Menüliste.
Cherry
Das sind zwei Fragen - sie wären besser als separate Fragen. Auch serialVersionXXX ist für die meisten Projekte eine schlechte Idee.
Software Engineer
Es ist eine schlechte Idee, da nur sehr wenige Entwickler wissen, wofür es ist, und es wird fast immer missbraucht. In Java ist es äußerst selten, dass der Serialisierungsmechanismus zum Lesen und Schreiben von Objekten auf Byte-Ebene verwendet wird. In diesem Fall reicht die serielle Standardversion normalerweise aus, um die Sicherheit zu gewährleisten. Eine fest codierte serialVersion muss jedes Mal manuell aktualisiert werden, wenn sich die Schnittstelle einer Klasse ändert und wenn sich die Feldliste ändert. Entwickler tun dies ausnahmslos nicht, weil sie einfach nicht verstehen, wofür die serialVersion gedacht ist. Der Hauptgrund, warum Sie es im Code sehen, ist die Sonnenfinsternis.
Software Engineer

Antworten:

216
  • Drücken Sie Ctrl+ Shift+ A(in Mac Command+ Shift+ A)
  • Geben Sie "unbenutzte Deklaration" ein
  • Doppelklicken Sie auf "Nicht verwendete Deklaration".

Die Einstellungen werden angezeigt

  • Klicken Sie auf Java / Deklarationsredundanz / Nicht verwendete Deklaration
  • Wählen Sie rechts unten "On the Fly Editor-Einstellungen".
  • Kontrollkästchen deaktivieren, ..., Parameter prüfen. Es sollten nur Prüfklassen angekreuzt werden.
  • drücke OK

Einstellungen werden geschlossen

  • Klicken Sie in der Menüleiste auf Inspektion nach Namen analysieren / ausführen (oder Ctrl+ Alt+ Shift+ I- in Mac Command+ Option+ Shift+ I).
  • Text einfügen "Unbenutzte Dekla"
  • Wählen Sie "Nicht verwendete Deklaration Java | Deklarationsredundanz".

Die Suche beginnt

  • Überprüfen Sie den Auftragsstatus unten in Idea, wenn Sie fertig sind: Genießen Sie die Ergebnisse und das großartige Gefühl, den durcheinandergebrachten Code zu bereinigen. :) :)
BlondCode
quelle
Wenn Sie innerhalb weniger Minuten fast dieselbe Antwort auf mehrere Fragen veröffentlichen, schlagen Sie vor, dass eine davon ein Duplikat der anderen ist. Bitte markieren Sie sie als solche.
Jaap
3
Eine davon ist speziell für die Verwendung von IntelliJ Idea vorgesehen, eine andere für allgemeines Java. Ich würde nicht sagen, dass dies Duplikate sind.
BlondCode
7
Die Konfiguration "Nur Prüfklassen" wird ignoriert, sodass ich viele, viele unerwünschte Ergebnisse erhalte (nicht verwendete Methoden, Felder usw. und, was noch schlimmer ist, viele davon aus mehreren Gründen falsch positiv sind ...).
Thelawnmowerman
6
Es gibt eine Änderung in Studio 3.0. Nur die Option "Klassen prüfen" kommt nach Schritt: Wählen Sie "Nicht verwendete Deklaration Java | Deklarationsredundanz"
Sourabh Saldi
4
Wir müssen die globalen Einstellungen nicht ändern, um eine Inspektion mit unterschiedlichen Parametern durchzuführen. Mit der Aktion Inspektion nach Namen ausführen werden die Einstellungen für die Inspektion angezeigt.
TWiStErRob
11

Ich denke nicht, dass dies machbar ist. Ich vermute, dass diese Funktion absichtlich in IDEs weggelassen wurde, da sie nicht so sicher verwendet werden kann wie andere Refactorings zum Entfernen nicht verwendeter XXX.

Die nicht verwendeten Deklarationen, nach denen IDEA (und AFAIK, NetBeans) suchen, gelten für private Mitglieder und lokale Variablen: Dinge, auf die auch außerhalb dieser Klasse oder dieses Bereichs nicht dynamisch zugegriffen werden kann. (Nun, zumindest ohne Dinge mit Reflection oder JVM-Hacking zu tun, die Sie nicht tun sollten.) Unabhängig davon, was externer Code mit Ihrer Bibliothek macht, werden diese Dinge nicht verwendet, da ihr Umfang begrenzt ist und die IDE kann alles sehen. Der Compiler kann dies feststellen, indem er nur Ihren Code betrachtet.

Selbst wenn Klassen keinen publicZugriff haben, können sie dynamisch mit referenziert werden Class.forName(), und dies geschieht tatsächlich im Live-Code. Selbst wenn sie anscheinend nicht im Code Ihres Projekts verwendet werden, können sie abhängig davon verwendet werden, was Sie oder externer Code, der Ihre Bibliothek verwendet, ausführen. Daher kann die IDE nicht garantieren, dass das Entfernen dieser Klassen das extern beobachtbare Verhalten nicht ändert.

Aus diesem Grund denke ich, dass IDEA dieses Verhalten einfach nicht bietet: Es kann den Benutzern falsche Erwartungen an die Sicherheit geben, und das Entfernen dieser Sicherheiten ist kein sicheres Refactoring.

Andrew Janke
quelle
6
Nun, der Klassenname wird beim tatsächlichen Anzeigen der Datei ausgegraut, und Sie erhalten die Absicht, "nicht verwendete Klasse zu entfernen". Alles, was fehlt, ist, sie automatisch finden zu können. Sicher gibt es Möglichkeiten, die Dinge kaputt machen könnten, aber das gilt für viele Refactorings.
Rob Fletcher
2
Class.forName () unterscheidet sich vom Standpunkt der Analysesicherheit wohl nicht von der Verwendung von Reflection zum Lesen / Festlegen privater Felder in einer Klasse. Wenn IntelliJ dies für Felder tut, ist dies keine akzeptable Antwort dafür, warum dies nicht auch für Klassen gilt. In beiden Fällen ist das Analyseergebnis nicht zu 100% sicher.
Hunde
1

Vielleicht sollten Sie sich die Unused SymbolInspektion mit den folgenden Einstellungen ansehen :

Geben Sie hier die Bildbeschreibung ein

Vic
quelle
Ha! Scheint nicht :-) Ich habe alles in der Gruppe "Nicht verwendete Deklaration" ausgeschaltet und nur "Nicht verwendetes Symbol" mit "Klassen prüfen" belassen. Die Ergebnisse ändern sich jedoch nicht. :-(
Cherry
@Cherry, tut mir leid zu hören ... Vielleicht sollten Sie einen Defekt bei Jetbrains einreichen
Vic
1

Ich bin nicht sicher, ob dies Ihre Frage beantworten wird, aber ich habe in der Vergangenheit ein Tool als Fortify verwendet, um Codeüberprüfungsregeln für das Projekt auszuführen, die genau auf nicht verwendete Importe, toten Code, nicht verwendete Klassen usw. verweisen. Es ist eine kostenpflichtige Software, aber ich Ich bin mir sicher, dass es einige kostenlose Plugins / Software geben wird.

sonnig
quelle