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