Eclipse插件开发

1 概要

Eclipse依然是开发java的主流IDE之一, 技术公司如要提升开发侧的效率或者为产品吸引开发者,可以开发Eclipse插件。
本文将介绍Eclipse插件开发的一些点。

2 插件开发

2.1 按钮扩展

2.1.1 扩展菜单

扩展菜单扩展点org.eclipse.ui.menus,指定命令id。
Eclipse插件开发_第1张图片

2.1.2 实现命令

Eclipse插件开发_第2张图片
处理类继承AbstractHandler
Eclipse插件开发_第3张图片

2.2 偏好扩展

2.2.1 扩展页面

偏好页面扩展点:org.eclipse.ui.preferencePages。
在这里插入图片描述

2.2.2 页面实现

Eclipse插件开发_第4张图片

2.2.3 初始化偏好

插件激活的时候初始化:
Eclipse插件开发_第5张图片
Eclipse插件开发_第6张图片

2.3 向导扩展

向导提供创建项目或文件的指引式操作。

2.3.1 扩展配置

在扩展点配置org.eclipse.ui.newWizards。
在这里插入图片描述

2.3.2 实现向导

继承向导父类,实现向导接口。
Eclipse插件开发_第7张图片

2.3.3 实现页面

在这里插入图片描述
在这里插入图片描述

2.4 编辑器扩展

2.4.1 扩展配置

在扩展点配置org.eclipse.ui.editors。
Eclipse插件开发_第8张图片

2.4.2 编辑器实现

Eclipse插件开发_第9张图片

2.5 右键菜单

2.5.1 扩展配置

扩展扩展点 org.eclipse.ui.popupMenus, 配置如下,注意几个点,objectClass 指定项目结构资源树每个节点的对象的所属类,nameFilter 可以过滤后缀。action 配置多个,i就出现多个右键菜单。

 
       
                 
             
                  
             
       
    

2.5.2 实现处理类

右键菜单的逻辑实现接口 IObjectActionDelegate ,处理run方法。如下:

public class OpenUrlAction implements IObjectActionDelegate {

	private TreeSelection selection;

	/**
	 * 获取selection.
	 * 
	 * @return the selection
	 */
	public TreeSelection getSelection() {
		return selection;
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
	 */
	@SuppressWarnings("unused")
	@Override
	public void run(IAction action) {

		TreePath[] paths = this.getSelection().getPaths();
		IFile file = (IFile) this.getSelection().getFirstElement();
		String url = HtmlUrlBuilder.getUrl(file);

		IWorkbenchBrowserSupport browserSupport = PlatformUI.getWorkbench().getBrowserSupport();
		try {
			IWebBrowser browser = browserSupport.createBrowser(file.getFullPath().toString());
			browser.openURL(new URL(url));
		} catch (PartInitException | MalformedURLException e) {
			e.printStackTrace();
		}

	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
	 *      org.eclipse.jface.viewers.ISelection)
	 */
	@Override
	public void selectionChanged(IAction action, ISelection selection) {
		this.selection = (TreeSelection) selection;
	}

	/**
	 * {@inheritDoc}
	 * 
	 * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction,
	 *      org.eclipse.ui.IWorkbenchPart)
	 */
	@Override
	public void setActivePart(IAction action, IWorkbenchPart part) {
		// TODO Auto-generated method stub

	}

}

2.6 获取浏览器支持

通过平台ui获取工作台,再获取浏览器支持,创建浏览器,打开url地址。

		IWorkbenchBrowserSupport browserSupport = PlatformUI.getWorkbench().getBrowserSupport();
			try {
			IWebBrowser browser = browserSupport.createBrowser(file.getFullPath().toString());
			browser.openURL(new URL(url));
		} catch (PartInitException | MalformedURLException e) {
			e.printStackTrace();
		}

2.7 控制台扩展

在控制台管理添加新建立的 MessageConsole 消息控制台,使用消息流MessageConsoleStream 输出文本信息和错误堆栈信息。

public class Console {

	private static MessageConsole console = findConsole();

	private static MessageConsoleStream stream;

	public static void println(String msg, Throwable e) {
		println(msg);
		try {
			OutputStreamWriter writer = new OutputStreamWriter(stream);
			PrintWriter s = new PrintWriter(writer);
			e.printStackTrace(s);
			writer.flush();// 刷才会输出
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}

	public static void println(String msg) {
		if (stream == null) {
			stream = console.newMessageStream();
			stream.setEncoding("utf-8");
		}
		stream.println(msg);
	}

	/**
	 * 
	 * @return
	 */
	public static MessageConsole findConsole() {
		String name = "xxx";

		IConsoleManager consoleManager = ConsolePlugin.getDefault().getConsoleManager();
		IConsole[] consoles = consoleManager.getConsoles();
		for (IConsole console : consoles) {
			if (name.equals(console.getName())) {
				return (MessageConsole) console;
			}
		}

		MessageConsole console = new MessageConsole(name, null);
		consoleManager.addConsoles(new IConsole[] { console });
		return console;
	}

	public static void close() {
		if (stream != null) {
			IOUtils.closeQuietly(stream);
		}
		stream = null;
	}

}

你可能感兴趣的:(java)