2016-08-29 92 views
0

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

回答

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代表的树。

+0

它像一个魅力工作!感谢您的帮助! –

1

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

然后你可以从他们得到PSI files(PsiManager#findFile),检查他们是否是Java(instanceof PsiJavaFile)并做任何你喜欢的事情。

如果您不需要PSI,你可以查看文件类型

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

相关问题