¿Cómo encontrar todas las clases no utilizadas en Intellij Idea?

126

Hay una inspección "Declaración no utilizada" que puede encontrar todo el código no utilizado en Intellij Idea. (vea esta pregunta ) Pero quiero encontrar todas las clases no utilizadas, no métodos, variables, etc. Solo clases. (es difícil encontrar solo clases en la lista de resultados 3000). ¿Como puedo hacer eso?

Cereza
fuente
Simplemente ejecute la inspección, haga clic en el botón derecho y vea esto en la lista del menú.
Cherry
Esas son dos preguntas: serían mejores como preguntas separadas. También serialVersionXXX es una mala idea para la mayoría de los proyectos.
Ingeniero de software
Es una mala idea porque muy pocos desarrolladores saben para qué sirve, y casi siempre se usa mal. Es extremadamente raro en Java utilizar el mecanismo de serialización para leer y escribir objetos a nivel de byte, y si lo hace, la versión serial predeterminada suele ser suficiente para proporcionar seguridad. Una serialVersion codificada debe actualizarse manualmente cada vez que cambia la interfaz de una clase, y cada vez que cambia la lista de campos, invariablemente, los desarrolladores no hacen esto porque simplemente no entienden para qué sirve la serialVersion. La razón principal por la que lo ve en el código es por el eclipse.
Ingeniero de software

Respuestas:

218
  • Presione Ctrl+ Shift+ A(en Mac Command+ Shift+ A)
  • Ingrese "declar no utilizado"
  • Haga doble clic en "Declaración no utilizada"

Aparecerá la configuración

  • Haga clic en Java / Declaración redundancia / Declaración no utilizada
  • en la parte inferior derecha, seleccione "Configuración del editor sobre la marcha"
  • desmarque los campos de verificación, ..., verifique los parámetros. Solo las clases de verificación deben estar marcadas.
  • presiona OK

La configuración se cierra

  • En la barra de menú, haga clic en Analizar / Ejecutar inspección por nombre (o Ctrl+ Alt+ Shift+ I- en Mac Command+ Option+ Shift+ I)
  • Insertar texto "Declaración no utilizada"
  • Seleccione "Declaración no utilizada Java | Declaración redundancia"

La búsqueda comienza

  • Verifique el estado del trabajo en la parte inferior de Idea, cuando termine: disfrute de los resultados y la excelente sensación de limpiar el código desordenado. :)
BlondCode
fuente
Al publicar casi la misma respuesta en un par de minutos a varias preguntas, sugiera que una de ellas sea un duplicado de la otra. por favor márquelos como tales.
Jaap
3
Uno de ellos es especialmente para uso IntelliJ Idea, otro es para Java en general. No diría que son duplicaciones.
BlondCode
77
Ignora la configuración de "Solo comprobar clases", por lo que obtengo muchos resultados no deseados (métodos no utilizados, campos, etc. y, lo que es peor, muchos de ellos son falsos positivos, por varias razones ...).
thelawnmowerman
66
Hay un cambio en Studio 3.0 Solo la opción de verificación de clases viene después del paso: Seleccione "Declaración no utilizada Java | Declaración redundancia"
Sourabh Saldi
44
No necesitamos cambiar la configuración global para ejecutar una inspección con diferentes parámetros. La acción Ejecutar inspección por nombre mostrará las configuraciones para la inspección.
TWiStErRob
11

No creo que esto sea factible. Sospecho que esta característica se deja fuera intencionalmente de los IDE porque no se puede usar de manera segura de la misma manera que otras refactorizaciones "eliminar XXX no utilizadas".

Las declaraciones no utilizadas que IDEA (y AFAIK, NetBeans) buscan son para miembros privados y variables locales: cosas que no son accesibles, incluso dinámicamente, desde fuera de esa clase o alcance. (Bueno, al menos sin hacer cosas con Reflection o pirateo de JVM que se supone que no debes hacer). No importa lo que haga el código externo con tu biblioteca, no hará que esas cosas se usen, porque su alcance es limitado y IDE puede verlo todo. El compilador puede determinar esto mirando solo su código.

Para las clases, incluso si no tienen publicacceso, se puede hacer referencia a ellas dinámicamente Class.forName(), y esto realmente sucede en el código en vivo. Entonces, incluso si aparentemente no se usan dentro del código de su proyecto, podrían usarse dependiendo de lo que usted o el código externo que use su biblioteca ejecute. Por lo tanto, el IDE no puede garantizar que eliminar esas clases no cambie el comportamiento externo observable.

Por eso creo que IDEA simplemente no proporciona este comportamiento: podría dar a los usuarios falsas expectativas de seguridad, y eliminarlos no es una refactorización segura.

Andrew Janke
fuente
66
Bueno, atenúa el nombre de la clase cuando realmente ve el archivo y le da una acción intencional para "eliminar la clase no utilizada", todo lo que falta es poder encontrarlos automáticamente. Ciertamente, hay maneras de romper las cosas, pero eso es cierto en muchas refactorizaciones.
Rob Fletcher
2
Class.forName () podría decirse que no es diferente, desde el punto de vista de seguridad de análisis, que usar la reflexión para leer / establecer campos privados en una clase. Entonces, si IntelliJ hará esto para los campos, esa no es una respuesta aceptable de por qué no lo hará también para las clases. En cualquier caso, el resultado del análisis no está 100% garantizado como seguro.
Perros
1

Tal vez debería examinar la Unused Symbolinspección con la siguiente configuración:

ingrese la descripción de la imagen aquí

Vic
fuente
¡Decir ah! Parece que no :-) Apagué todo en el grupo "declaración no utilizada" y dejo solo "Símbolo no utilizado" con "clases de verificación" solamente. Pero los resultados no cambian. :-(
Cherry
@Cherry, lamento escuchar ... Tal vez deberías presentar un defecto a jetbrains
Vic
1

No estoy seguro de si esto responderá a su pregunta, pero utilicé una herramienta en el pasado como Fortify para ejecutar reglas de revisión de código en el proyecto, que apunta con precisión a las importaciones no utilizadas, el código muerto, las clases no utilizadas, etc. Es un software pago pero yo Estoy seguro de que habrá algunos complementos / software gratuitos disponibles para el mismo.

soleado
fuente