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