3

JDT SearchEngineを使用して、特定のオブジェクトへの参照を検索しようとしています。しかし、org.eclipse.jdt.core.search.SearchEngineの「search」メソッドを呼び出しているときに「NullPointerException」が発生します。

エラートレースは次のとおりです。

org.eclipse.jdt.internal.core.search.BasicSearchEngine.search(BasicSearchEngine.java:515)のorg.eclipse.jdt.internal.core.search.BasicSearchEngine.findMatches(BasicSearchEngine.java:214)のjava.lang.NullPointerException )org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:582)で

そして、以下は私が検索を実行するために使用している方法です:

private static void search(String elementName) { //elementName -> a method Name
        try {
            SearchPattern pattern = SearchPattern.createPattern(elementName, IJavaSearchConstants.METHOD,
                    IJavaSearchConstants.REFERENCES, SearchPattern.R_PATTERN_MATCH);

            IJavaSearchScope scope = SearchEngine.createWorkspaceScope();

            SearchRequestor requestor = new SearchRequestor() {
                @Override
                public void acceptSearchMatch(SearchMatch match) {
                    System.out.println("Element - " + match.getElement());
                }
            };

            SearchEngine searchEngine = new SearchEngine();
            SearchParticipant[] searchParticipants = new SearchParticipant[] { SearchEngine
                    .getDefaultSearchParticipant() };
            searchEngine.search(pattern, searchParticipants, scope, requestor, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

次のスナップショットの「変数」ウィンドウを参照して、「searchEngine.search()」に渡される引数の値を確認してください。

ここに画像の説明を入力してください

問題は「スコープ」の値によるものだと思います[上記の「黒」で強調表示]。つまり、この場合、「SearchEngine.createWorkspaceScope()」は期待値を返しません。

注:これは、JDT APIを使用して(JDT-ASTを使用して)特定のソースコードを解析するスタンドアロンのJavaプログラム(Eclipseプラグインではない)として実行される私のプログラムの一部であることに注意してください。

そのような場合(Eclipseプラグインプログラムではない)にJDT SearchEngineを使用することはできませんか、それとも他の理由によるこの問題ですか?これについてのあなたの答えに本当に感謝します。

4

1 に答える 1

3

いいえ。ワークスペースを開かずに検索エンジンを使用することはできません。IResourceその理由は、SearchEngineがeclipseファイルシステムの抽象化( 、、、など)IFileに依存しているためですIFolder。これは、ワークスペースが開いている場合にのみ使用できます。

于 2012-12-27T18:19:19.097 に答える