Come trovare tutte le classi inutilizzate in Intellij Idea?


126

C'è un'ispezione "Dichiarazione inutilizzata" che può trovare tutto il codice non utilizzato in Intellij Idea. (vedi questa domanda ) Ma voglio trovare tutte le classi inutilizzate, non metodi, variabili ecc. Solo classi. (è difficile trovare solo classi nella lista dei risultati 3000). Come posso farlo?


Basta eseguire l'ispezione, fare clic sul pulsante destro e visualizzarlo nell'elenco dei menu.
Cherry

Sono due domande: sarebbero migliori come domande separate. Anche serialVersionXXX è una cattiva idea per la maggior parte dei progetti.
Software Engineer

È una cattiva idea perché pochissimi sviluppatori sanno a cosa serve, ed è quasi sempre abusato. È estremamente raro in java utilizzare il meccanismo di serializzazione per leggere e scrivere oggetti a livello di byte, e se lo fai la versione seriale predefinita di solito è sufficiente per fornire sicurezza. Una serialVersion hardcoded deve essere aggiornata manualmente ogni volta che l'interfaccia di una classe cambia e ogni volta che l'elenco dei campi cambia - invariabilmente, gli sviluppatori non lo fanno perché semplicemente non capiscono a cosa serve serialVersion. Il motivo principale per cui lo vedi nel codice è a causa di eclipse.
Software Engineer

Risposte:


218
  • Premi Ctrl+ Shift+ A(in Mac Command+ Shift+ A)
  • Inserisci "dichiarazione inutilizzata"
  • Fare doppio clic su "Dichiarazione non utilizzata"

Appariranno le impostazioni

  • Fare clic su Java / Dichiarazione ridondanza / Dichiarazione non utilizzata
  • in basso a destra seleziona "Impostazioni editor al volo"
  • deselezionare i campi di controllo, ..., controllare i parametri. Devono essere spuntate solo le classi di controllo.
  • premere OK

Le impostazioni si chiudono

  • Sulla barra dei menu, fai clic su Analizza / Esegui ispezione per nome (o Ctrl+ Alt+ Shift+ I- in Mac Command+ Option+ Shift+ I)
  • Inserisci il testo "Decla inutilizzata"
  • Seleziona "Dichiarazione inutilizzata Java | Dichiarazione ridondanza"

Inizia la ricerca

  • Al termine, controlla lo stato del lavoro nella parte inferiore di Idea: goditi i risultati e la fantastica sensazione di ripulire il codice incasinato. :)

Pubblicando quasi la stessa identica risposta entro un paio di minuti a diverse domande, suggerisci che una di esse è un duplicato dell'altra. si prega di contrassegnarli come tali.
Jaap

3
Uno di questi è appositamente per l'utilizzo di IntelliJ Idea, un altro è per Java generale. Non direi che si tratta di duplicazioni.
BlondCode

7
Ignora la configurazione "Controlla solo classi", quindi ottengo molti, molti risultati indesiderati (metodi, campi, ecc. Inutilizzati e, quel che è peggio, molti di loro sono falsi positivi, per diversi motivi ...).
theelawnmowerman il

6
C'è una modifica in Studio 3.0 L'opzione Controlla solo le classi viene dopo il passaggio: Seleziona "Dichiarazione inutilizzata Java | Dichiarazione ridondanza"
Sourabh Saldi

4
Non è necessario modificare le impostazioni globali per eseguire un'ispezione con parametri diversi. L'azione Esegui ispezione per nome farà apparire le impostazioni per l'ispezione.
TWiStErRob

11

Non penso che sia fattibile. Sospetto che questa funzione sia stata intenzionalmente esclusa dagli IDE perché non può essere utilizzata in modo sicuro come possono fare altri refactoring "rimuovi XXX inutilizzati".

Le dichiarazioni inutilizzate che IDEA (e AFAIK, NetBeans) cerca sono per membri privati ​​e variabili locali: cose che non sono accessibili, anche dinamicamente, dall'esterno di quella classe o ambito. (Beh, almeno senza fare cose con Reflection o JVM hacking che non dovresti.) Indipendentemente da ciò che il codice esterno fa con la tua libreria, non farà sì che quelle cose vengano utilizzate, perché il loro ambito è limitato e il IDE può vederlo tutto. Il compilatore può determinarlo guardando solo il tuo codice.

Per le classi, anche se non hanno publicaccesso, è possibile fare riferimento dinamicamente con Class.forName(), e questo accade effettivamente nel codice live. Quindi, anche se apparentemente non vengono utilizzati all'interno del codice del progetto, potrebbero essere utilizzati a seconda di ciò che viene eseguito da te o dal codice esterno che utilizza la tua libreria. Quindi l'IDE non può garantire che la rimozione di quelle classi non cambierà il comportamento osservabile esternamente.

Ecco perché penso che IDEA semplicemente non fornisca questo comportamento: potrebbe dare agli utenti false aspettative di sicurezza e rimuoverle non è un refactoring sicuro.


6
Ebbene, rende grigio il nome della classe quando si visualizza effettivamente il file e ti dà un'azione intenzionale per "rimuovere la classe inutilizzata", tutto ciò che manca è essere in grado di trovarli automaticamente. Certamente ci sono modi che potrebbero rompere le cose, ma questo è vero per molti refactoring.
Rob Fletcher

2
Class.forName () probabilmente non è diverso, dal punto di vista della sicurezza dell'analisi, dall'uso della riflessione per leggere / impostare campi privati ​​su una classe. Quindi, se IntelliJ lo farà per i campi, questa non è una risposta accettabile per il motivo per cui non lo farà anche per le classi. In entrambi i casi, il risultato dell'analisi non è garantito al 100% per essere sicuro.
Cani

1

Forse dovresti esaminare l' Unused Symbolispezione con le seguenti impostazioni:

inserisci qui la descrizione dell'immagine


Ha! Sembra di no :-) Ho disattivato tutto nel gruppo "dichiarazione inutilizzata" e ho lasciato solo "Simbolo non utilizzato" con "controlla classi". Ma i risultati non cambiano. :-(
Cherry

@Cherry, mi dispiace sentire ... Forse dovresti presentare un difetto a jetbrains
Vic

1

Non sono sicuro che questo risponderà alla tua domanda, ma in passato ho utilizzato uno strumento come Fortify per eseguire le regole di revisione del codice sul progetto, che punta precisamente alle importazioni inutilizzate, al codice morto, alle classi inutilizzate ecc. È un software a pagamento ma io Sono sicuro che ci saranno alcuni plugin / software gratuiti disponibili per lo stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.