2017-04-05 7 views
0

すべてのプロジェクトのソースディレクトリのすべてのJavaタイプ(classe、interface、enum、annotation)をワークスペースの名前として指定する必要があります。たとえば、 "Test"という入力は、すべてのプロジェクトのソースディレクトリに定義された "Test"で始まるすべてのJava型を返します。私は上記のコードは、Eclipseワークスペースではなく、いくつかのJava型を返さEclipse JDT:Java Search Engine

SearchPattern pattern = SearchPattern.createPattern("Test", 
      IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, 
      SearchPattern.R_PREFIX_MATCH); 
IJavaSearchScope scope = SearchEngine.createWorkspaceScope(); 
SearchRequestor requestor = new SearchRequestor() { 
     public void acceptSearchMatch(SearchMatch match) { 
      System.out.println("Found: " + match.getElement()); 
     } 
}; 
SearchEngine searchEngine = new SearchEngine(); 
try { 
     searchEngine.search(pattern, new SearchParticipant[] { SearchEngine 
         .getDefaultSearchParticipant() }, scope, requestor, 
         null); 
} catch (CoreException e) { 
     e.printStackTrace(); 
} 

次のようにJDTのSEARCHENGINEでこれを処理しようとしました。たとえば、次のように

見つかり:TestSimple(開かない)[TestSimple.classで[<デフォルトで>は、[/ホーム/私/テスト]]に]

TestSimple.javaでコマンドラインから作成されたファイルです私のホームディレクトリであり、Eclipseプロジェクトとは関係ありません。 (私のEclipseワークスペースは/ home/me/eclipse/workspaceで定義されています)なぜ検索結果にその理由が含まれているのかわかりません。 SearchEngineはこのシナリオを処理する最良の方法ですか、私はちょうどJavaの型名が必要なので、私はフィールド、メソッド、参照などのクラスの中に何も必要ありませんか?同様に参照されるライブラリから取得種類を避けるためにIPackageFragmentRoot#getKind()からK_SOURCEを返すのみを含むおかげ

+0

申し訳ありません私はパス/ home/me/testがEclipseの1つのテストプロジェクトのビルドパスにあることを確認しました。それは問題ではありません。 2番目の質問に対する提案は感謝しています。 – CMZS

+0

「SearchEngine」の代わりに、よりシンプルな['FileVisitor'](https://docs.oracle.com/javase/tutorial/essential/io/walk.html)を使用することを検討しましたか?とにかく必要ですか? –

答えて

0

あなたはおそらく、そのパッケージフラグメントルート(IJavaProject#getAllPackageFragmentRoots())のすべてについて、各IJavaProjectを求め、そして、より多くの限られた検索範囲を構築したいと。ちょうど名前の検索は、既に格納されているインデックスをヒットする以上に多くを行うべきではありません。内部クラスを完全に欠いてしまうので、ファイル名だけに頼ることはできません。

関連する問題