扩展Eclipse Java搜索

时间:2015-12-13 06:52:21

标签: java eclipse search eclipse-plugin eclipse-jdt

我正在开发一个eclipse插件,用户可以在给定一些文本查询的情况下搜索java代码,类似于eclipse中常用的java搜索对话框。

Java Search Image

我正在使用以下代码搜索用户提供的文字

SearchPattern pattern = SearchPattern.createPattern("<search_string>",
            IJavaSearchConstants.TYPE, IJavaSearchConstants.PARAMETER_DECLARATION_TYPE_REFERENCE,
            SearchPattern.R_EXACT_MATCH);

    // step 2: Create search scope
    // IJavaSearchScope scope = SearchEngine.createJavaSearchScope(packages);
    IJavaSearchScope scope = SearchEngine.createWorkspaceScope();

    // step3: define a result collector
    SearchRequestor requestor = new SearchRequestor()
    {
        public void acceptSearchMatch(SearchMatch match) 
        {
            System.out.println(match.getElement());
        }
    };

    // step4: start searching
    SearchEngine searchEngine = new SearchEngine();
    try {
        searchEngine.search(pattern, new SearchParticipant[] { SearchEngine
                        .getDefaultSearchParticipant() }, scope, requestor,
                        null);
    } catch (CoreException e) {
        e.printStackTrace();
    }

此外,我还可以将搜索对话框中的查询字符串传递给实现ISearchPage的类。Search Dialog page Image

    public class QuerySearchPage extends DialogPage implements ISearchPage 
{
    ...
    public boolean performAction() 
    {
        System.out.println(txtQuery.getText());

        search();//search using the SearchEngine
        SearchOperation so = new SearchOperation(iFileSet);
        IRunnableWithProgress query = so;
        try 
        {
            container.getRunnableContext().run(true, true, query);
        } 
        catch (InvocationTargetException | InterruptedException e)
        {
            e.printStackTrace();
        }
        return true;
    }
}

最后我遇到了需要将搜索结果传递给ISearchResultView的问题。基本上,我有两个问题:

  1. 匹配结果的类型为Object。如何将这些结果传递给以IFile为输入的ISearchResultView?
  2. 如何以下列格式获得结果?
  3. Search Result View Image

    我已经浏览了以下链接:

    非常欢迎任何帮助。

2 个答案:

答案 0 :(得分:1)

通常,您将实现能够显示搜索结果的ISearchResultPage。在其createControl()方法中,您需要创建一个知道如何呈现匹配项的查看器。

ISearchResultPage的常用抽象实现是AbstractTextSearchViewPage。此类使用TableViewerTreeViewer来显示这些工具,具体取决于它们是否是分层的。如果您使用后者,请实施其configureTreeViewer()和/或configureTableViewer()方法,以便查看者配备标签提供者和内容提供者,这些提供者和内容提供者知道代表匹配的特定类型,即您提到的作为'对象的匹配结果'。

必须告诉AbstractTextSearchViewPage构造函数它支持哪种布局:FLAG_LAYOUT_FLAT和/或FLAG_LAYOUT_TREE。可以使用setLayout()更改实际表示。

首先,您可以将搜索视图页面限制为 flat 布局并实现其configureTableViewer(),如下所示:

viewer.setLabelProvider( new MyLabelProvider() );
viewer.setContentProvider( new MyContentProvider() );

内容提供商的输入是您的ISearchResult实施。因此MyContentProvider可以从搜索结果中获取要显示的元素。

@Override
public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) {
  searchResult = ( MySearchResult )newInput;
}

@Override
public Object[] getElements( Object inputElement ) {
  return searchResult.getElements();
}

答案 1 :(得分:0)

以下链接似乎相关。我希望它有所帮助:https://wiki.eclipse.org/FAQ_How_do_I_implement_a_search_operation%3F