Java 如何遍历IntelliJ插件项目中的所有文件?
我正在尝试创建一个IntelliJ插件,它迭代项目文件夹中的所有文件,解析所有的.java文件,然后对它们进行一些更改。问题是,在阅读文档后,我不清楚如何在整个项目文件夹中迭代文件,我想我可能会使用PSI文件,但我不确定。有人知道或有想法如何做到这一点吗?一种可能的方法是使用Java 如何遍历IntelliJ插件项目中的所有文件?,java,parsing,intellij-idea,plugins,intellij-plugin,Java,Parsing,Intellij Idea,Plugins,Intellij Plugin,我正在尝试创建一个IntelliJ插件,它迭代项目文件夹中的所有文件,解析所有的.java文件,然后对它们进行一些更改。问题是,在阅读文档后,我不清楚如何在整个项目文件夹中迭代文件,我想我可能会使用PSI文件,但我不确定。有人知道或有想法如何做到这一点吗?一种可能的方法是使用AllClassesGetter,如下所示: Processor<PsiClass> processor = new Processor<PsiClass>() { @Override
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
);
处理器=新处理器(){
@凌驾
公共布尔进程(PsiClass PsiClass){
//在这里做你的实际工作
返回true;
}
};
AllClassesGetter.processJavaClasses(
新的PlainPrefixMatcher(“”),
项目
全球搜索范围。项目范围(项目),
处理器
);
processJavaClasses()
将在给定范围内查找与给定前缀匹配的类。通过使用空前缀和GlobalSearchScope.projectScope()
,您应该能够迭代项目中声明的所有类,并在处理器中处理它们。请注意,处理器处理PsiClass
的实例,这意味着您不必手动解析文件。要修改类,只需更改由这些PsiClass
es表示的树。一种可能的方法是使用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
);
处理器=新处理器(){
@凌驾
公共布尔进程(PsiClass PsiClass){
//在这里做你的实际工作
返回true;
}
};
AllClassesGetter.processJavaClasses(
新的PlainPrefixMatcher(“”),
项目
全球搜索范围。项目范围(项目),
处理器
);
processJavaClasses()
将在给定范围内查找与给定前缀匹配的类。通过使用空前缀和GlobalSearchScope.projectScope()
,您应该能够迭代项目中声明的所有类,并在处理器中处理它们。注意,处理器处理PsiClass
,这意味着不必手动解析文件。要修改类,您只需更改这些类所表示的树。要迭代项目内容中的所有文件,您可以使用ProjectFileIndex.SERVICE.getInstance(project).iterateContent
然后您可以从它们那里获取PSI文件
(PsiManager#findFile)
,检查它们是否是Java(PsiJavaFile的实例)并执行任何您喜欢的操作
如果不需要PSI,只需检查文件类型即可
(VirtualFile#getFileType==JavaFileType.INSTANCE)
并通过document(FileDocumentManager#getDocument(file))或VFS(LoadTextUtil#loadText,VfsUtil#saveText)
执行修改。要迭代项目内容中的所有文件,可以使用ProjectFileIndex.SERVICE.getInstance(project).iteracement
然后您可以从它们那里获取PSI文件
(PsiManager#findFile)
,检查它们是否是Java(PsiJavaFile的实例)并执行任何您喜欢的操作
如果不需要PSI,只需检查文件类型即可
(VirtualFile#getFileType==JavaFileType.INSTANCE)
并通过document(FileDocumentManager#getDocument(file))或VFS(LoadTextUtil#loadText,VfsUtil#saveText)
执行修改