WEB开发网
开发学院软件开发Java 构建基于 CDT 的编辑器,第 1 部分: C/C++ 开发工具... 阅读

构建基于 CDT 的编辑器,第 1 部分: C/C++ 开发工具模型

 2009-12-19 00:00:00 来源:WEB开发网   
核心提示: 在核心插件中,plugin.xml 保存着不同类型的 C/C++ 文件的扩展名,构建基于 CDT 的编辑器,第 1 部分: C/C++ 开发工具模型(7),并将每一个 contentType 和一个文件后缀联合起来,在 UI 插件中,CDT 模型会在接下来的文章中变得更为清晰,因为我讨论了 T

在核心插件中,plugin.xml 保存着不同类型的 C/C++ 文件的扩展名,并将每一个 contentType 和一个文件后缀联合起来。在 UI 插件中,plugin.xml 将 CEditor 和这些 contentType 关联起来。BBCDT 识别具有 .bbc、.bbcpp、.bbh 和 .bbhpp 后缀的文件。当您创建或双击一个这样的文件时,工作台会将 IFile 转换为 IEditorInput 并使用它来初始化 CEditor。

编辑器被初始化后,CDocumentProvider 会执行三项重要任务:

使用输入的 IFile 来创建 TranslationUnit 和 TranslationUnitInfo 对象。

用 IEditorInput 中的信息为编辑器创建一个 IDocument。

为 TranslationUnit 及其缓冲构造 WorkingCopy。

要创建新的 CDT 元素,提供者调用 CoreModel, CoreModel 调用 CModelManager。这些工作空间操作(如CreateWorkingCopyOperation 和 DestroyWorkingCopyOperation)都实现了 IWorkspaceRunnable 接口。它们异步运行,并使工作空间阻止了其他操作对资源修改的妨碍。

像 CProject 一样,每个 TranslationUnit 都具有自己的配置信息,比如注释。但提供者并不会创建一个独立的 CDescriptor。相反,它使数据保持在 IEditorInput 的 FileInfo 对象中。这样,下一次激活输入时,提供者不用从头开始来访问该单元信息。

运行 BBCDT

我将 BBCDT 作为一个插件或插件项目来提供。因为这个工具的主要目的是为以后的工作提供一个基础,所以我建议您引入这个项目,而不是将其功能添加到您的 Eclipse 安装中。

为使 BBCDT 尽可能简单,我省去了 PathEntryManager,这意味着该工具不使用 SourceEntry 对象,甚至是 SourceRoot 对象。因而,您必须将源文件(.bbc、.bbh、.bbcc 和 .bbhh 文件)直接添加到项目中。为创建 BBCDT 资源,我在 org.dworks.bbcdt.ui.wizards 包中创建了一组新的向导/页面类。要创建项目,请单击 File > New > Project 并选择 C 或 C++ 选项。要创建文件,请单击 New > Other 并选择 C 或 C++ 选项。图 3 显示了 BBCDT 项目及编辑器的外观。


图 3. BBCDT
构建基于 CDT 的编辑器,第 1 部分:  C/C++ 开发工具模型

结束语

如果您访问过 Java 代码中的 IFile 和 IProject,CDT 模型中的元素就不是什么问题了。CModel 包含了一些 CProject,这些 CProject 中包含了一些 CSourceRoot。每个 TranslationUnit 对应于单个的 C/C++ 源文件,因而编辑器通过访问并修改这些元素来与 CDT 模型进行交互。

功能越强大,其内容越复杂。这个编辑器也许太详细了,但您会在开始构建自己的 C/C++ 编辑器时发现它的用处。您可以通过研究 BBCDT 源代码来更好地理解 CDT 的运行机制。我建议您用添加、移除及修改来对其操作进行实验。

CDT 模型会在接下来的文章中变得更为清晰,因为我讨论了 TranslationUnit 和 WorkingCopy 与 CEditor 及其 UI 类进行交互的多种方式。第 2 部分会对 Document 如何管理事件、分块如何发生及这些分块如何提供语法着色进行深入介绍。

本文示例源代码或素材下载

上一页  2 3 4 5 6 7 

Tags:构建 基于 CDT

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接