在IntelliJ中,当代码未在任何地方使用时,它将变为灰色。"有没有办法看看是否有一组课程没有在任何地方使用过?
我有这组相互引用的类,因此IntelliJ正在计算这组使用的类。在这种情况下,我知道代码是无用的,但有能力自动检测这种事情会很好。这样做的逻辑并不是很难......有没有人知道IntelliJ中是否可以这样做?
答案 0 :(得分:3)
这个"灰色" mark仅反映其他源代码文件或框架配置文件中的声明用法。声明用法搜索无法检测孤立的类集群,因为这些类是正式引用的。
有一种技术可能会有所帮助:定义一些入口点的根集(main()
方法,web.xml
声明等)并跟踪所有引用,有效地构建已使用类的图形/方法。图表完成后,您可以将未访问的类视为死代码。非常类似于Java垃圾收集器在年轻人收集期间所做的事情。实时代码分析非常困难且耗费资源,因此Intellij将其作为可以手动运行的单独检查实现。
为了演示它,我们创建一个包含以下代码的新项目:
public class Main {
public static void main(String[] args) {
System.out.println(new Used());
}
}
class Used {}
class ObviouslyUnused {}
class TrickyUnused1 {
TrickyUnused1() {
System.out.println(new TrickyUnused2());
}
}
class TrickyUnused2 {
TrickyUnused2() {
System.out.println(new TrickyUnused1());
}
}
在编辑器中我们可以看到,只有ObvoiuslyUnused是灰色的。让我们来一个"未使用的声明"检查:
在这里,检查显示,我们未使用的自引用类集群无法访问:
但是,您应该知道,始终存在以隐式方式引用代码的方法:反射,本机调用,运行时代码生成,SPI实现,框架配置文件的引用等。因此,没有静态的anlisys工具可以是100检测死码时准确度为%。