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

时间:2016-08-29 08:48:54

标签: java parsing intellij-idea plugins intellij-plugin

我正在尝试创建一个IntelliJ插件,该插件迭代项目文件夹中的所有文件并解析所有.java文件,然后对其进行一些更改。问题是,在阅读文档后,我不清楚如何在整个项目文件夹中迭代文件,我想我可能会使用PSI文件,但我不确定。有没有人知道或有想法如何实现这个目标?

2 个答案:

答案 0 :(得分:1)

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

然后你可以从PSI files获取(PsiManager#findFile),检查它们是否是Java(psiJavaFile的实例)并做你喜欢的任何事情。

如果您不需要PSI,只需检查文件类型

即可

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

答案 1 :(得分:0)

可能的方法是使用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 es。

所代表的树