获取在 IntelliJ 中打开的项目中所有 PsiFiles/VirtualFiles 的列表
Get a list of all PsiFiles/VirtualFiles in opened project in IntelliJ
我正在 IntelliJ 中开发一个插件,我试图在其中找到整个项目源代码中的所有评论。
我目前只能在打开或选定的文件中获取评论,而不能在所有项目文件中获取评论。这是通过以下代码完成的:
public void actionPerformed(AnActionEvent e) {
Editor editor = e.getData(PlatformDataKeys.EDITOR);
PsiFile psiFile = e.getData(LangDataKeys.PSI_FILE);
PsiElement element = psiFile.getFirstChild(); WORKS
for(PsiElement el : element.getParent().getChildren()){
for(PsiElement el2 : el.getChildren()){
if(el2 instanceof PsiComment){
这显然只给我在编辑器中打开的文件对应的PsiFile。
我发现我可以找到一个 VirtualFiles 列表,我可以从中提取 PsiElements,但是,使用:
VirtualFile[] vFiles = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY);
也只给我选定的文件,而不是所有的项目文件。
我是 PsiElements 和 VirtualFiles 的新手,因此甚至可能会误解它们的用法。但是,如果我之前列出的代码很接近,有没有办法获得项目的所有 PsiFiles/VirtualFiles?
感谢 Peter 的评论,我尝试了以下代码块:
ProjectFileIndex.SERVICE.getInstance(e.getProject()).iterateContent(new ContentIterator() {
@Override
public boolean processFile(VirtualFile fileInProject) {
System.out.println(fileInProject.getFileType());
PsiFile psiFile1 = PsiManager.getInstance(e.getProject()).findFile(fileInProject);
if (psiFile1 == null)
System.out.println("IT'S NULL!");
System.out.println(psiFile1.getText());
return true;
}
});
作为输出给我:
com.intellij.openapi.fileTypes.UnknownFileType@18cf8e97
它是空的!
意味着它只找到一个类型未知的 VirtualFile。
您可以使用 ProjectFileIndex.SERVICE.getInstance(project).iterateContent
遍历所有 VirtualFile
。然后你可以使用 PsiManager#findFile
得到一个 PsiFile
.
我正在 IntelliJ 中开发一个插件,我试图在其中找到整个项目源代码中的所有评论。
我目前只能在打开或选定的文件中获取评论,而不能在所有项目文件中获取评论。这是通过以下代码完成的:
public void actionPerformed(AnActionEvent e) {
Editor editor = e.getData(PlatformDataKeys.EDITOR);
PsiFile psiFile = e.getData(LangDataKeys.PSI_FILE);
PsiElement element = psiFile.getFirstChild(); WORKS
for(PsiElement el : element.getParent().getChildren()){
for(PsiElement el2 : el.getChildren()){
if(el2 instanceof PsiComment){
这显然只给我在编辑器中打开的文件对应的PsiFile。
我发现我可以找到一个 VirtualFiles 列表,我可以从中提取 PsiElements,但是,使用:
VirtualFile[] vFiles = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY);
也只给我选定的文件,而不是所有的项目文件。
我是 PsiElements 和 VirtualFiles 的新手,因此甚至可能会误解它们的用法。但是,如果我之前列出的代码很接近,有没有办法获得项目的所有 PsiFiles/VirtualFiles?
感谢 Peter 的评论,我尝试了以下代码块:
ProjectFileIndex.SERVICE.getInstance(e.getProject()).iterateContent(new ContentIterator() {
@Override
public boolean processFile(VirtualFile fileInProject) {
System.out.println(fileInProject.getFileType());
PsiFile psiFile1 = PsiManager.getInstance(e.getProject()).findFile(fileInProject);
if (psiFile1 == null)
System.out.println("IT'S NULL!");
System.out.println(psiFile1.getText());
return true;
}
});
作为输出给我: com.intellij.openapi.fileTypes.UnknownFileType@18cf8e97 它是空的!
意味着它只找到一个类型未知的 VirtualFile。
您可以使用 ProjectFileIndex.SERVICE.getInstance(project).iterateContent
遍历所有 VirtualFile
。然后你可以使用 PsiManager#findFile
得到一个 PsiFile
.