如何遍历 IntelliJ 插件项目中的所有文件?

How to iterate through all files in IntelliJ plugin project?

我正在尝试创建一个 IntelliJ 插件,它遍历项目文件夹中的所有文件并解析所有 .java 文件,然后对它们进行一些更改。问题是在阅读文档后我不清楚如何在整个项目文件夹中迭代文件,我想我可能会使用 PSI 文件但我不确定。有谁知道或知道如何完成此操作?

一种可能的方法是使用 AllClassesGetter,像这样:

Processor<PsiClass> processor = new Processor<PsiClass>() {
    @Override
    public boolean process(PsiClass psiClass) {
        // do your actual work here
        return true;
    }
};

AllClassesGetter.processJavaClasses(
        new PlainPrefixMatcher(""),
        project,
        GlobalSearchScope.projectScope(project),
        processor
);

processJavaClasses() 将在给定范围内查找与给定前缀匹配的 类。通过使用空前缀和 GlobalSearchScope.projectScope(),您应该能够迭代项目中声明的所有 类,并在 processor 中处理它们。请注意,处理器处理 PsiClass 的实例,这意味着您不必手动解析文件。要修改类,你只需要改变这些PsiClass代表的树。

要迭代项目内容中的所有文件,可以使用ProjectFileIndex.SERVICE.getInstance(project).iterateContent

然后你可以从他们(PsiManager#findFile)那里得到PSI files,检查他们是否是Java(PsiJava文件的实例)并做任何你想做的事情。

如果不需要PSI,直接检查文件类型即可

(VirtualFile#getFileType == JavaFileType.INSTANCE) 并通过文档 (FileDocumentManager#getDocument(file)) or VFS (LoadTextUtil#loadText, VfsUtil#saveText).

执行修改