在IntelliJ中查找自引用代码

时间:2014-06-04 19:58:12

标签: intellij-idea

在IntelliJ中,当代码未在任何地方使用时,它将变为灰色。"有没有办法看看是否有一组课程没有在任何地方使用过?

我有这组相互引用的类,因此IntelliJ正在计算这组使用的类。在这种情况下,我知道代码是无用的,但有能力自动检测这种事情会很好。这样做的逻辑并不是很难......有没有人知道IntelliJ中是否可以这样做?

1 个答案:

答案 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是灰色的。让我们来一个"未使用的声明"检查:

enter image description here

enter image description here

在这里,检查显示,我们未使用的自引用类集群无法访问:

enter image description here

但是,您应该知道,始终存在以隐式方式引用代码的方法:反射,本机调用,运行时代码生成,SPI实现,框架配置文件的引用等。因此,没有静态的anlisys工具可以是100检测死码时准确度为%。