Intellij Idea Plugin 获取虚拟文件的class-file

Intellij Idea Plugin get class-file of virtual file

我正在编写 Intellij 扩展,因此我需要知道特定虚拟文件的 class 文件的位置。我正在通过以下方式加载虚拟文件:

public void actionPerformed(AnActionEvent e) {
    if (e.getProject() == null) return;
    FileEditorManager manager = FileEditorManager.getInstance(e.getProject());
    VirtualFile files[] = manager.getSelectedFiles();
    //Any files open?
    if (files.length == 0 || !files[0].getPath().toLowerCase().endsWith(".java"))
        return;
    analyse(files[0]);
}

在分析函数中,我想在 gui 中显示 class 文件的内容。

给定 java 文件或 psi 树是否可以从 j 接收 class 文件?

您可以使用FilenameIndex.getFilesByName()方法获取.class文件。由于您知道 .java 文件的名称,因此可以使用它来派生 .class 文件名。

但我不认为它会起作用,因为 .class 文件位于目标目录中,而 IDEA 不索引该目录。您可以使用VfsUtil.collectChildrenRecursively()方法获取target目录中的所有文件,然后过滤掉您需要的.class文件。