Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何遍历IntelliJ插件项目中的所有文件?_Java_Parsing_Intellij Idea_Plugins_Intellij Plugin - Fatal编程技术网

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

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

我正在尝试创建一个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
);
处理器=新处理器(){
@凌驾
公共布尔进程(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)
执行修改