如何在Intellij Idea中查找所有未使用的类?


125

有一个检查“未使用的声明”,可以在Intellij Idea中找到所有未使用的代码。(请参阅此问题)但是我想查找所有未使用的类,而不是方法,变量等。查找类。(很难在3000个结果列表中找到类)。我该怎么做?


只需运行检查,单击右键即可在菜单列表中看到。
2014年

这是两个问题-将它们作为单独的问题会更好。对于大多数项目来说,serialVersionXXX也不是一个好主意。
软件工程师

这是一个坏主意,因为很少有开发人员知道它的用途,并且几乎总是被滥用。在Java中,很少使用串行化机制在字节级别读取和写入对象,如果这样做,默认的串行版本通常足以提供安全性。每次类的接口更改和字段列表每次更改时,都必须手动更新硬编码的serialVersion-始终,开发人员不会这样做,因为他们只是不了解serialVersion的用途。您在代码中看到它的主要原因是因为日食。
软件工程师

Answers:


217
  • Ctrl+ Shift+ A(在Mac Command+ Shift+ A
  • 输入“未使用的声明”
  • 双击“未使用的声明”

设置将弹出

  • 单击Java /声明冗余/未使用的声明
  • 在右下角选择“即时编辑器设置”
  • 取消选中检查字段,...,检查参数。仅应勾选检查类别。
  • 按确定

设置关闭

  • 在菜单栏上,单击按名称分析/运行检查(或Ctrl+ Alt+ Shift+ I-在Mac Command+ Option+ Shift+ I
  • 插入文字“未使用的decla”
  • 选择“未使用的声明Java |声明冗余”

搜索开始

  • 完成后,在Idea的底部检查作业状态:享受结果和清理混乱代码的感觉。:)

在几分钟之内将几乎完全相同的答案发布到几个问题,建议其中一个与另一个问题重复。请这样标记它们。
Jaap'7

3
其中一个专用于IntelliJ Idea的使用,另一个用于通用Java。我不会说这些是重复的。
BlondCode'7

7
它忽略了“仅检查类”配置,因此我得到了很多不想要的结果(未使用的方法,字段等,而且更糟糕的是,由于多种原因,其中许多是误报...)。
thelawnmowerman

6
Studio 3.0中只有更改检查选项选项会在步骤之后出现:选择“未使用的声明Java |声明冗余”
Sourabh Saldi

4
我们无需更改全局设置即可使用不同的参数运行检查。“按名称运行检查”操作将弹出检查设置。
TWiStErRob '18年

11

我认为这不可行。我怀疑此功能是故意遗漏在IDE中的,因为无法像其他“删除未使用的XXX”重构那样安全地使用它。

IDEA(以及AFAIK,NetBeans)寻找未使用的声明是针对私有成员和局部变量的:从该类或范围之外无法访问甚至动态访问的东西。(好吧,至少在您不应该使用反射或JVM黑客操作的情况下,这是不应该的。)无论您的库使用什么外部代码,它都不会导致这些东西被使用,因为它们的范围是有限的,并且IDE可以看到所有内容。编译器可以通过仅查看您的代码来确定这一点。

对于类,即使它们没有public访问权限,也可以使用来动态引用它们Class.forName(),而这实际上发生在实时代码中。因此,即使您的项目代码中未明显使用它们,也可能会根据您使用的内容或使用库运行的外部代码来使用它们。因此,IDE无法保证删除这些类不会改变外部可观察到的行为。

这就是为什么我认为IDEA不能提供这种行为的原因:它可能会给用户带来错误的安全期望,而删除它们并不是安全的重构。


6
好吧,在实际查看文件时,它确实将类名显示为灰色,并为您提供了“删除未使用的类”的有意操作,因此缺少的是能够自动找到它们。当然,有可能破坏事物的方法,但是在许多重构中都是如此。
罗布·弗莱彻

2
从分析安全的角度来看,Class.forName()可以说与使用反射来读取/设置类的私有字段没有什么不同。因此,如果IntelliJ将对字段执行此操作,那么对于为什么它对类也不会执行此操作,这不是可接受的答案。无论哪种情况,都不能保证100%的分析结果都是安全的。

1

也许您应该Unused Symbol使用以下设置来检查检查:

在此处输入图片说明


哈!似乎不是:-)我关闭了“未使用的声明”组中的所有内容,仅将“未使用的符号”保留为“检查类”。但是结果并没有改变。:-(
樱桃

@Cherry,很抱歉听到您的消息……也许您应该向jetbrains提出缺陷
Vic

1

我不确定这是否能回答您的问题,但是我过去曾使用过一个工具作为Fortify在项目上运行代码审查规则,该规则精确地指向未使用的导入,无效代码,未使用的类等。这是一个付费软件,但我肯定会有一些免费的插件/软件可供选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.