Java 検索エンジンの使用

プラグインは JDT API を使用して、メソッド参照、フィールド宣言、インターフェースのインプリメンターなどの Java エレメントのワークスペースで、Java プロジェクトを検索できます。

Java 検索のエントリー・ポイントは SearchEngine クラスです。 Java エレメント内の特定パターンを検索したり、検索を特定のエレメントに限定することができます。 検索パターンは、createSearchPattern を使用して作成できます。 パターンは createJavaSearchScope を使用して有効範囲を決めることができます。 パターンと有効範囲を定義すると、search メソッドを使用して結果を収集します。

検索結果は、結果にアクセスするためにインプリメントする必要がある IJavaSearchResultCollector に報告されます。

検索の準備

検索操作では、検索の性質を記述するためのパターンと、調査の範囲を制限するための有効範囲の両方が使用されます。

Java 検索パターンの作成

検索パターンは、検索結果を見つける方法を定義します。 検索パターンは、Java エレメント (createSearchPattern(IJavaElement, int) を参照) またはストリング (createSearchPattern(String, int, int, boolean) を参照) のどちらからでも作成できます。 後者の方法はワイルドカード ('*' など) をサポートし、幅広い検索結果を得るために使用できます。

例えば、指定のメソッドへの参照を検索するための検索パターンは、次のように作成します。

    // Get the method
    IMethod method = ...;
    
    // Create search pattern
    ISearchPattern pattern = SearchEngine.createSearchPattern(method, IJavaSearchConstants.REFERENCES);

また、"Obj" で始まるすべての型の宣言を検索するための検索パターンは、次のように作成します。

    // Create search pattern
    ISearchPattern pattern = SearchEngine.createSearchPattern("Obj*", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, true);

サポートされている検索パターンは以下のとおりです。

Java 検索有効範囲の作成

指定のプロジェクトまたは指定のパッケージの検索結果を知りたい場合、 あるいは検索結果が指定の型の階層にのみ含まれていることがわかっている場合、 createJavaSearchScope(IJavaElement[]) または createHierarchyScope(IType) を使用して適切な検索有効範囲を作成できます。

例えば、指定のパッケージの検索有効範囲は、次のように作成します。

    // Get the package
    IPackageFragment pkg = ...;

    // Create search scope
    IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {pkg});

また、指定の型の階層の検索有効範囲は、次のように作成します。

    // Get the type
    IType type = ...;

    // Create search scope
    IJavaSearchScope scope = SearchEngine.createHierarchyScope(type);

ワークスペース全体の検索有効範囲も作成できます。

    // Create search scope
    IJavaSearchScope scope = SearchEngine.createWorkspaceScope();

検索

検索パターンと検索有効範囲を作成し、 IJavaSearchResultCollector をインプリメントすると、以下のように検索照会を開始できます。

    // Get the search pattern
    ISearchPattern pattern = ...;

    // Get the search scope
    IJavaSearchScope scope = ...;

    // Get the search result collector
    IJavaSearchResultCollector collector = ...;

    // Search
    SearchEngine searchEngine = new SearchEngine();
    searchEngine.search(ResourcesPlugin.getWorkspace(), pattern, scope, collector);

検索が開始されたという通知が、 aboutToStart メソッドを使用して検索結果コレクターに送信されます。 次に、各検索結果が、 accept  メソッドを使用して報告されます。 最後に、終了により、 検索が終了したことが示されます。

検索結果の収集

検索結果は、 accept メソッドを使用して報告されます。 以下で、このメソッドのそれぞれの引き数について詳しく説明します。

リソースおよび Java エレメント

検索結果は Java エレメント (型宣言など) に一致するか、または Java エレメント (メソッド内の型への参照など) に組み込まれています。 検索エンジンは常に、検索結果に一致する、または検索結果を含む、最も深い所にある Java エレメントを見つけようとします。 例えば、型宣言を名前で検索すると、ローカル型宣言が見つかる場合があります。 Java モデルはローカル型を表現しないため、このローカル型宣言を含むモデルは結果コレクターに提供されます。

また、検索エンジンは、Java エレメントを含むリソースを結果コレクターに与えようとします。 このため、Java エレメントがコンパイル単位内のメソッドの場合、リソースは対応する IFile になります。 エレメントが .jar ファイルに含まれている場合、リソースは .jar ファイルになり、この場合、この .jar ファイルはワークスペース内にあります。 これが外部 .jar ファイルの場合、リソースは ヌルです。

ソース位置

ソース位置は、検索結果を含むコンパイル単位に対する相対位置として与えられます。 検索結果が .jar ファイルに含まれる場合、ソース位置は添付されたソースに対する相対位置です。 .jar ファイルにソースが添付されていない場合、相対位置は (-1, -1) です。

正確な検索結果と不正確な検索結果

多くの場合、検索結果は正確で、検索エンジンは意図どおりの判別ができたことになります。 ただし、検索エンジンがこの判別を行うことができない場合もあり、この場合、一致は不正確なものになります。 一致が不正確である理由については、以下が考えられます。

Copyright IBM Corporation and others 2000, 2003. All Rights Reserved.