2016-11-06 9 views
1

IntelliJにプラグインを開発しています。このプロジェクトでは、プロジェクトのソースコード全体ですべてのコメントを検索しようとしています。IntelliJで開いているプロジェクトのすべてのPsiFiles/VirtualFilesのリストを取得します

私は、現在開いているか、選択したファイルではなく、すべてのプロジェクトファイルにコメントだけを取得することができています。これは、次のコードで行われます。

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のみを表示します。

は、私が使用して、しかし、私はPsiElementsを抽出することができるだろう、そこからVirtualFilesのリストを見つけることができることが判明:

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; 
     } 
    }); 

[email protected] をITがNULLです!それは未知のタイプで唯一のVirtualFileを見つけることだ意味

答えて

1

すべてVirtualFile Sを反復処理するためにProjectFileIndex.SERVICE.getInstance(project).iterateContentを使用することができます。次にPsiManager#findFileを使用してPsiFileを取得することができます。

+0

助けてくれてありがとう!私はiterateContent(new ContentIterator())を使ってみましたが、未知の型のVirtualFileが1つしかなく、PsiFileを取得しようとするとnullが返されます。私が行方不明のものは何か?私は新しいコードブロックで私の質問を更新しました:) – LordKail

+0

私は自分の間違いを認識し、必要に応じてすべてを完全に手に入れました!あなたに多くのおかげで、私はあなたの答えを正解として受け入れました。 – LordKail

関連する問題