2015-12-13 94 views
3

我開發一個Eclipse插件,用戶可以在搜索給出了一些文本查詢,類似於日食通常的Java搜索對話框一個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. 如何獲得以下格式的結果?

Search Result View Image

我已經通過以下鏈接了:

任何幫助是非常歡迎。

+0

不推薦使用'ISearchResultView',推薦使用'org.eclipse.search.searchResultViewPages'聲明'ISearchResultPage'。 –

+0

感謝您指出,但它沒有多大幫助。 –

回答

1

通常,你會實現一個能夠顯示搜索結果的ISearchResultPage。在其createControl()方法中,您需要創建知道如何呈現匹配的查看器。

常用的抽象實現的ISearchResultPageAbstractTextSearchViewPage。該班級使用TableViewerTreeViewer來顯示這些圖紙,具體取決於它們是否是分層的。如果您在使用後,實施其configureTreeViewer()和/或configureTableViewer()方法,使觀衆都配有標籤提供商和內容提供商知道代表的匹配,即你提到什麼作爲「Object類型的匹配結果的特定類型」。

必須告知AbstractTextSearchViewPage構造函數它支持哪種佈局:FLAG_LAYOUT_FLAT和/或FLAG_LAYOUT_TREE。實際表示可以用setLayout()更改。

首先,你可以限制對佈局搜索視圖頁面並執行其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(); 
} 
+0

好吧,我創建了一個類FileSearchResultContentProvider實現ITreeContentProvider,IStructuredContentProvider並修改SearchResultPage來擴展AbstractTextSearchViewPage,但我應該如何實現configureTreeViewer方法和其他需要的方法在類FileSearchResultContentProvider中重寫。 –

+0

我做了所提及的任何更改,但仍然無法遵循您的建議。你可以在這裏查看我的代碼 - https://github.com/payamrastogi/searchprovider –

+0

你的'SearchResultPage'覆蓋'createControl()'。如果你看看超類,你可能會注意到這不是你想要的。 –