Comment trouver toutes les classes inutilisées dans Intellij Idea?

126

Il y a une inspection "Déclaration non utilisée" qui peut trouver tout le code inutilisé dans Intellij Idea. (voir cette question ) Mais je veux trouver toutes les classes inutilisées, pas les méthodes, les variables etc. Seulement les classes. (il est difficile de ne trouver que des classes dans la liste de 3000 résultats). Comment puis-je faire ça?

Cerise
la source
Exécutez simplement l'inspection, cliquez sur le bouton droit et voyez cela dans la liste du menu.
Cherry
Ce sont deux questions - ce serait mieux en tant que questions séparées. SerialVersionXXX est également une mauvaise idée pour la plupart des projets.
Ingénieur logiciel
C'est une mauvaise idée car très peu de développeurs savent à quoi cela sert et il est presque toujours mal utilisé. Il est extrêmement rare en Java d'utiliser le mécanisme de sérialisation pour lire et écrire des objets au niveau des octets, et si vous le faites, la version série par défaut est généralement suffisante pour assurer la sécurité. Une serialVersion codée en dur doit être mise à jour manuellement à chaque fois que l'interface d'une classe change, et à chaque fois que la liste de champs change - invariablement, les développeurs ne le font pas parce qu'ils ne comprennent tout simplement pas à quoi sert la serialVersion. La principale raison pour laquelle vous le voyez dans le code est à cause de l'éclipse.
Software Engineer

Réponses:

218
  • Appuyez sur Ctrl+ Shift+ A(sous Mac Command+ Shift+ A)
  • Entrez "déclaration non utilisée"
  • Double-cliquez sur "Déclaration non utilisée"

Les paramètres s'afficheront

  • Cliquez sur Java / Redondance des déclarations / Déclaration non utilisée
  • en bas à droite, sélectionnez "Paramètres de l'éditeur à la volée"
  • décochez les champs de contrôle, ..., vérifiez les paramètres. Seules les classes de contrôle doivent être cochées.
  • appuyer sur OK

Paramètres se ferme

  • Dans la barre de menu, cliquez sur Analyser / Exécuter l'inspection par nom (ou Ctrl+ Alt+ Shift+ I- sous Mac Command+ Option+ Shift+ I)
  • Insérer le texte "Déclaration inutilisée"
  • Sélectionnez "Déclaration non utilisée Java | Redondance des déclarations"

La recherche commence

  • Vérifiez l'état du travail en bas de Idea, une fois terminé: profitez des résultats et de la sensation agréable de nettoyer le code en désordre. :)
BlondCode
la source
En affichant à peu près la même réponse en quelques minutes à plusieurs questions, suggérez que l'une d'elles soit un double de l'autre. veuillez les marquer comme tels.
Jaap
3
L'un d'eux est spécialement destiné à l'utilisation d'IntelliJ Idea, un autre est destiné à Java général. Je ne dirais pas que ce sont des duplications.
BlondCode
7
Il ignore la configuration "Only Check Classes", donc j'obtiens beaucoup, beaucoup de résultats indésirables (méthodes inutilisées, champs, etc., et, ce qui est pire, beaucoup d'entre eux sont des faux positifs, pour plusieurs raisons ...).
thelawnmowerman
6
Il y a un changement dans Studio 3.0 Seulement l'option de contrôle des classes vient après l'étape: Sélectionnez «Déclaration non utilisée Java | Redondance de déclaration»
Sourabh Saldi
4
Nous n'avons pas besoin de modifier les paramètres globaux pour exécuter une inspection avec différents paramètres. L'action Exécuter l'inspection par nom affiche les paramètres de l'inspection.
TWiStErRob
11

Je ne pense pas que ce soit faisable. Je soupçonne que cette fonctionnalité est intentionnellement laissée en dehors des IDE car elle ne peut pas être utilisée en toute sécurité comme le peuvent les autres refactorisations "supprimer XXX inutilisées".

Les déclarations inutilisées recherchées par IDEA (et AFAIK, NetBeans) concernent des membres privés et des variables locales: des choses qui ne sont pas accessibles, même dynamiquement, depuis l'extérieur de cette classe ou de cette portée. (Eh bien, au moins sans faire des choses avec Reflection ou le piratage JVM que vous n'êtes pas censé faire.) Peu importe ce que le code extérieur fait avec votre bibliothèque, cela ne provoquera pas l'utilisation de ces choses, car leur portée est limitée et le IDE peut tout voir. Le compilateur peut déterminer cela en examinant uniquement votre code.

Pour les classes, même si elles n'y ont pas publicaccès, elles peuvent être référencées dynamiquement avec Class.forName(), et cela se produit en fait dans le code en direct. Ainsi, même s'ils ne sont apparemment pas utilisés dans le code de votre projet, ils peuvent être utilisés en fonction de ce que vous ou du code externe utilisant votre bibliothèque exécute. L'EDI ne peut donc pas garantir que la suppression de ces classes ne changera pas le comportement observable de l'extérieur.

C'est pourquoi je pense qu'IDEA ne fournit tout simplement pas ce comportement: cela pourrait donner aux utilisateurs de fausses attentes en matière de sécurité, et les supprimer n'est pas une refactorisation sûre.

Andrew Janke
la source
6
Eh bien, il grise le nom de la classe lors de la visualisation du fichier et vous donne une action d'intention de "supprimer la classe inutilisée", tout ce qui manque est de pouvoir les trouver automatiquement. Certes, il y a des moyens qui pourraient casser les choses, mais c'est vrai pour de nombreuses refactorisations.
Rob Fletcher
2
Class.forName () n'est sans doute pas différent, du point de vue de la sécurité de l'analyse, de l'utilisation de la réflexion pour lire / définir des champs privés sur une classe. Donc, si IntelliJ le fera pour les champs, ce n'est pas une réponse acceptable pour expliquer pourquoi il ne le fera pas pour les classes également. Dans les deux cas, le résultat de l'analyse n'est pas garanti à 100%.
Chiens
1

Vous devriez peut-être examiner l' Unused Symbolinspection avec les paramètres suivants:

entrez la description de l'image ici

Vic
la source
Ha! Semble pas :-) J'ai désactivé tout dans le groupe "déclaration non utilisée" et ne laisse que "symbole inutilisé" avec "classes de contrôle" seulement. Mais les résultats ne changent pas. :-(
Cherry
@Cherry, désolé d'entendre ... Peut-être que vous devriez signaler un défaut à jetbrains
Vic
1

Je ne sais pas si cela répondra à votre question mais j'ai utilisé un outil dans le passé comme Fortify pour exécuter des règles de révision de code sur le projet, qui pointe précisément vers les importations inutilisées, le code mort, les classes inutilisées, etc. C'est un logiciel payant mais je Je suis sûr qu'il y aura des plugins / logiciels gratuits disponibles pour le même.

ensoleillé
la source