Eclipse SWT领域类建议机制的实现

Eclipse SWT领域类建议机制的实现,eclipse,swt,Eclipse,Swt,我知道如何使用field assist和搜索模式实现它,但每次该机制都会触发新的搜索。例如,我不确定该机制是如何在开放类型中实现的(我认为是通过索引实现的)。如何使用此缓存进行实时类路径搜索 这几乎是我的全部解决方案。每次调用createProposalData时 private TreeSet<String> data; private SearchParticipant[] participants = new SearchParticipant[] { SearchEngine

我知道如何使用field assist和搜索模式实现它,但每次该机制都会触发新的搜索。例如,我不确定该机制是如何在开放类型中实现的(我认为是通过索引实现的)。如何使用此缓存进行实时类路径搜索

这几乎是我的全部解决方案。每次调用createProposalData时

private TreeSet<String> data;
private SearchParticipant[] participants = new SearchParticipant[] { SearchEngine
        .getDefaultSearchParticipant() };
private SearchPattern pattern;
private IJavaProject prj;
private JavaSearchScope scope;
private SearchEngine searchEngine = new SearchEngine();
private SearchRequestor requestor = new SearchRequestor() {

    @Override
    public void acceptSearchMatch(SearchMatch match) throws CoreException {
        String text = getText(match.getElement());

        if (text != null) {
            data.add(text);
        }

    }
    public String getText(Object element) {
        ...
        }
};

public ProposalEngine(IJavaProject prj) {
    super();
    this.prj = prj;
    scope = new JavaSearchScope();
    try {
        scope.add(prj);
    } catch (JavaModelException e) {
        //
    }
}

public Collection<String> createProposalData(final String patternText) {
    data = new TreeSet<String>();
    try {
        pattern = getPatternForSeach(patternText);
        searchEngine.search(pattern, participants, scope, requestor, null);
    } catch (Exception e) {
        // skip
    }
    return data;
}

protected SearchPattern getPatternForSeach(String patternText) {
    return SearchPattern.createPattern(patternText,
            IJavaSearchConstants.CLASS_AND_INTERFACE,
            IJavaSearchConstants.DECLARATIONS,
            SearchPattern.R_CAMELCASE_MATCH);
}
私有树集数据;
private SearchParticipant[]参与者=新的SearchParticipant[]{SearchEngine
.getDefaultSearchParticipant()};
私有搜索模式;
私人项目prj;
私有JavaSearchScope范围;
私有搜索引擎SearchEngine=新搜索引擎();
私有搜索请求者请求者=新搜索请求者(){
@凌驾
public void acceptSearchMatch(SearchMatch匹配)引发CoreException异常{
String text=getText(match.getElement());
如果(文本!=null){
数据。添加(文本);
}
}
公共字符串getText(对象元素){
...
}
};
公共提案工程(IJavaProject prj){
超级();
this.prj=prj;
scope=新的JavaSearchScope();
试一试{
范围。添加(prj);
}catch(javamodele异常){
//
}
}
公共集合createProposalData(最终字符串模式文本){
数据=新树集();
试一试{
pattern=getPatternForSeach(patternText);
搜索(模式、参与者、范围、请求者、空);
}捕获(例外e){
//跳过
}
返回数据;
}
受保护的SearchPattern getPatternForSeach(字符串模式文本){
返回SearchPattern.createPattern(patternText,
IJavaSearchConstants.CLASS_和_接口,
IJavaSearchConstants.DECLARATIONS,
搜索模式。R\u CAMELCASE\u匹配);
}

我相信您所做的正是Open Type对话框所做的。在JDT API下进行索引以加速搜索。

您是如何实现现场协助的?您是否调用JDT API来查找可用的类型?是的,我使用JDT搜索API(quiestion由我的solutin编辑)是否可以轻松使用此加速功能我的观点是,我不认为您需要做任何额外的事情来从JDT在封面下所做的索引中获益。