基于 JFace Text Framework 构建全功能代码编辑器: 第 7 部分:Quick Assistant
2010-03-18 00:00:00 来源:WEB开发网当你在 Problem 视图中右键点击一个错误的时候,弹出菜单中有一个 Quick Fix 的菜单项,如果 canFix()返回 false,那么这个菜单项就会变灰而不可用了。由于我的例子中没有创建 Marker,所以这个方法用处有限。
canAssist 方法给了你一个检查不同上下文的机会,这样你就可以通过不同的上下文信息激活不同的快速帮助了。computeQuickAssistProposals 方法比较简单,除了名字和参数不同,它和内容提示中的 computeCompletionProposals 基本类似。
其它的方法都和内容提示类似,来看看例子中是怎么实现这个接口的,我只列出了 computeQuickAssistProposals,其它方法的实现都非常简短,在此省略。
清单4. ExprQuickAssistProcessor 实现了 IQuickAssistProcessor 接口
public class ExprQuickAssistProcessor implements IQuickAssistProcessor {
// other code
…
public ICompletionProposal[] computeQuickAssistProposals(
IQuickAssistInvocationContext invocationContext) {
// get viewer
ISourceViewer viewer = invocationContext.getSourceViewer();
// get annotation
Annotation anno = getAnnotation(viewer, invocationContext.getOffset());
if(anno == null || !canFix(anno))
return null;
// get doc
IDocument doc = viewer.getDocument();
// get tree
Tree tree = TreeManager.getTree(doc);
if(tree == null)
return null;
// get all declared variables
List<String> variables = TreeHelper.getVariables(tree);
// create proposals
Position pos = viewer.getAnnotationModel().getPosition(anno);
List<ICompletionProposal> proposals = new ArrayList<ICompletionProposal>();
for(String var : variables) {
proposals.add(new CompletionProposal(
var, pos.getOffset(), pos.getLength(), var.length(),
null, var, null, "Add your info here"));
}
return proposals.toArray(new ICompletionProposal[proposals.size()]);
}
}
更多精彩
赞助商链接