WEB开发网
开发学院软件开发Java 构建基于 CDT 的编辑器,第 5 部分: 将 PDOM 用于... 阅读

构建基于 CDT 的编辑器,第 5 部分: 将 PDOM 用于代码完成

 2009-12-19 00:00:00 来源:WEB开发网   
核心提示: 由于 BBCDT 不使用首选项,我硬编码了 ContentAssistant 使用的所有参数来定制代码完成过程,构建基于 CDT 的编辑器,第 5 部分: 将 PDOM 用于代码完成(7),我将清单 2 中显示的代码添加到 CSourceViewerConfiguration 类中,正如您所看到

由于 BBCDT 不使用首选项,我硬编码了 ContentAssistant 使用的所有参数来定制代码完成过程。我将清单 2 中显示的代码添加到 CSourceViewerConfiguration 类中。正如您所看到的那样,大多数配置都处理设置控件的颜色模式,为此,我访问了 Display 的系统颜色,它们在使用后不需要销毁。


清单 2. BBCDT 代码完成定制
// Create the content assistant 
ContentAssistant assistant = new ContentAssistant(); 
  
// Configure content assistant 
assistant.enableAutoInsert(true); 
assistant.enableAutoActivation(true); 
assistant.setAutoActivationDelay(500); 
assistant.enablePrefixCompletion(true); 
 
Display display = fEditor.getEditorSite().getShell().getDisplay(); 
assistant.setProposalSelectorForeground(display.getSystemColor(SWT.COLOR_CYAN)); 
assistant.setProposalSelectorBackground(display.getSystemColor(SWT.COLOR_BLACK)); 
assistant.setContextInformationPopupForeground(display.getSystemColor(SWT.COLOR_BLACK)); 
assistant.setContextSelectorForeground(display.getSystemColor(SWT.COLOR_BLACK)); 
assistant.setContextInformationPopupBackground(display.getSystemColor(SWT.COLOR_YELLOW)); 
assistant.setContextSelectorBackground(display.getSystemColor(SWT.COLOR_YELLOW)); 
assistant.setProposalPopupOrientation(IContentAssistant.PROPOSAL_OVERLAY);  
assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE); 
assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer)); 
  
// Create the assist processor 
IContentAssistProcessor processor = new CCompletionProcessor2(getEditor()); 
 
// Configure the assist processor 
((CCompletionProcessor2)processor).setCompletionProposalAutoActivationCharacters 
  (new char[] {'.', ':', '>'}); 
((CCompletionProcessor2)processor).allowAddingIncludes(false); 
((CCompletionProcessor2)processor).orderProposalsAlphabetically(true); 
assistant.setContentAssistProcessor(processor, IDocument.DEFAULT_CONTENT_TYPE); 

图 4 显示了当键入一个 s 并按住 Ctrl+Space 时,BBCDT 代码完成的样子。如果想改变颜色,请把上述清单中的代码改为适合于您的偏好的代码。也可以通过将数组参数改为 setCompletionProposalAutoActivationCharacters 方法来添加新的自激活字符。


图 4. BBCDT 的代码完成
构建基于 CDT 的编辑器,第 5 部分: 将 PDOM 用于代码完成

结束语

代码完成是 CDT 众多易于使用却难于理解的方面之一。但不需要理解整个过程,您就能在应用程序中包含此功能。可以扩展现有的补全贡献器,如 KeywordCompletionContributor 或 TemplateEngine,或者可以通过扩展 org.eclipse.cdt.ui.completionContributors 扩展点添加自己的贡献器。然后,如果想控制这些贡献显示的顺序,只需扩展 org.eclipse.cdt.ui.proposalFilters 点。

我最初开始学习 CDT 编辑器时,并没有意识到它的内部有多复杂,过了一段时间我才基本领会了它的基础。理解像解析器和 PDOM 这样的功能则花费了更长的时间。但正如努力完成其他事情一样,投入总有回报。越是了解 CDT,我的定制编辑器的样子就越好看,也更好操作。

这一系列文章都很详细,但我希望 BBCDT 的例子能够激励您学习这个工具,并有足够的动力继续学习。

本文源代码下载地址: http://flashview.ddvip.com/2009_12/os-ecl-cdt5.zip

上一页  2 3 4 5 6 7 

Tags:构建 基于 CDT

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