获取IntelliJ

时间:2016-11-06 18:40:29

标签: java intellij-idea intellij-plugin

我正在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?

感谢彼得的评论,我尝试了以下代码块:

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 IT' S NULL!

意味着它只找到一个未知类型的VirtualFile。

1 个答案:

答案 0 :(得分:1)

您可以使用ProjectFileIndex.SERVICE.getInstance(project).iterateContent来迭代所有VirtualFile。然后,您可以使用PsiManager#findFile获取PsiFile