构建基于 CDT 的编辑器,第 5 部分: 将 PDOM 用于代码完成
2009-12-19 00:00:00 来源:WEB开发网查找 ASTCompletionNode
要提出这些建议,光知道刚输入了哪些字符是不够的。CCompletionProcessor2 需要确定这段文本适合总体代码结构的哪部分。具体地说,它需要找到文本相应的 AST 节点,即补全节点 。有了补全节点,它就能够收集额外信息,如节点的范围和绑定。
为获取此节点,处理器确定当前 WorkingCopy 的 ILanguage 并调用 ILanguage.getCompletionNode()。这和索引器通过调用 ILanguage.getASTTranslationUnit() 开始解析过程类似。事实上,这两个方法都让 ILanguage 的解析器重新解析文档。
但首先,处理器让 DOMScanner 在其达到代码完成点时停止扫描。在重新解析过程中,扫描器一探测到标识符就检查这个偏移量。当达到代码完成点时,扫描器将该标识符作为 IToken.tCOMPLETION 这类标记的一部分返回并停止扫描。
在 第 4 部分 中,介绍了新解析器如何为节点中的标识符创建 IASTName。每次创建 IASTName 时,解析器也会检查当前标记是否是 IToken.tCOMPLETION 类型。如果是,它会创建一个 ASTCompletionNode。与给定补全节点相关联的 IASTName 也许有多个。
生成代码完成建议
有了补全节点之后,CCompletionProcessor2 就会创建一个空的 ArrayList 来包含 CCompletionProposal。然后,它会查找能够填充这个列表的类。具体地说,它为 CDT 扩展点 org.eclipse.cdt.ui.completionContributors 查找扩展。
根据该模式,扩展必需具备一个 <contributor> 元素,该元素包含所需的 <class> 和一个可选的 <id> 和 <priority>。默认情况下,CDT 提供五种这样的扩展,如清单 1 所示。
清单 1. 默认的代码完成扩展
<extension point="org.eclipse.cdt.ui.completionContributors">
<contributor
class="org.eclipse.cdt.internal.ui.text.contentassist.DOMCompletionContributor"
id="DOM"
priority="1"/>
<contributor
class="org.eclipse.cdt.internal.ui.text.template.TemplateEngine"
id="CodeTemplates"
priority="2"/>
<contributor
class="org.eclipse.cdt.internal.ui.text.contentassist.PDOMCompletionContributor"
id="PDOM"
priority="3"/>
<contributor
class="org.eclipse.cdt.internal.ui.text.contentassist.KeywordCompletionContributor"
id="Keywords"
priority="10"/>
<contributor
class="org.eclipse.cdt.internal.ui.text.contentassist.HelpCompletionContributor"
id="Help"
priority="99"/>
</extension>
- ››基于IP地址的vsftp服务器
- ››构建Windows 8风格应用23-App Bar概述及使用规范
- ››基于MySQL 水平分区的优化示例
- ››基于CentOS5的Linux下pptp和openvpn的搭建及配置
- ››构建域名服务器(DNS)
- ››基于JavaScript的网页版塔防游戏
- ››基于Android平台 QQ大战360手机游戏爆红
- ››构建Android平台Google Map应用
- ››基于Windows Azure的云计算应用设计
- ››构建WinForm 通用速选(全选、反选、清空)组件
- ››基于AES算法实现对数据的加密
- ››基于SoPC目标板Flash编程设计的创建及应用
更多精彩
赞助商链接