zoukankan      html  css  js  c++  java
  • eclipse插件开发:内容提示代码提示代码补全

    我们使用eclipse的java编辑器的时候,会经常用到alt+/触发的自动代码补全
    这个并不仅仅是SWT/JFACE框架下的内容
    更是属于eclipse
    先说明一下这个概念,现在的eclipse是基于osgi框架的,osgi是一个可热插拔的以bundle为基本元素的灵活管理规范。eclipse提供了一个osgi规范的实现叫做equinox,eclipse的插件(plugin)即是bundle。
    swt/jface则是用于构建eclipse的UI框架。
    但是,你所说的这个问题,其实看下eclipse的编辑器如何实现的就能明白了。
    去官网下载一个eclipse for rcp含源码版本,即可看到代码提示是怎么实现的。
    我这里说下原理。
    1、java编辑器属于jdt(java develop tool)插件,这是正常的eclipse都会有的一组插件
    2、提示代码的内容是来自于数据字典,eclipse会随时维护所有工作空间、jre内的class,用于编译和索引
    3、快捷键来自于视图(viewer)的setKeyHandler
    4、定位你指定的内容则是编辑器的mark记录的
    5、而最关键的,代码提示,则是ISourceViewer.CONTENTASSIST_PROPOSALS(内容辅助提示)
    以上都是属于eclipse插件开发方面的知识
    当然,你可以自己利用swt/jface来实现一个类似的,代码如下:
    首先你需要有一个org.eclipse.jface.text.source.SourceViewer,这是最基本的控件。
    为该SourceViewer设置一个监听,该监听触发一个ISourceViewer.CONTENTASSIST_PROPOSALS操作:

    • sv.appendVerifyKeyListener(newVerifyKeyListener(){
    •             @Override
    •             publicvoid verifyKey(VerifyEvent event){
    •                 if(event.stateMask == SWT.ALT && event.character =='/'){
    •                     sv.doOperation(ISourceViewer.CONTENTASSIST_PROPOSALS);
    •                 }
    •             }


    然后,你需要重写org.eclipse.jface.text.source.SourceViewerConfiguration#getContentAssistant(ISourceViewer sourceViewer),用于定义触发CONTENTASSIST_PROPOSALS操作之后的动作
    你可以自己用dialog之类的来实现代码提示,当然更推荐使用:
    org.eclipse.jface.text.contentassist.ContentAssistant#setContentAssistProcessor(IContentAssistProcessor processor, String contentType)
    来完成操作。
    eclipse本身就是一个完整的样例,你可以参照jdt对SourceViewer的使用来完成以上。
    参考:
    org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer

  • 相关阅读:
    文件的编码是一个怎样的机制
    MySQL——修改root密码的4种方法(以windows为例)
    python中nltk的下载安装方式
    VNC轻松连接远程Linux桌面
    Linux 查看磁盘分区、文件系统、磁盘的使用情况相关的命令和工具介绍
    shell脚本中>/dev/null的含义
    执行shell脚本时提示bad interpreter:No such file or directory的解决办法
    TabLayout+ViewPager的简单使用
    让listView gridView全部扩展开
    购物车中的观察者模式的应用
  • 原文地址:https://www.cnblogs.com/eclipsetech/p/8627057.html
Copyright © 2011-2022 走看看